通常我们不得不从两个或更多的表中选取数据使查询结果更完整。这时便需要使用连接查询(join)。
数据库中的表通过关键字相互关联。主键是所有列中拥有唯一值列。每一个主键值必须是表中唯一,
目的是为了把数跨不同表的数据,在不重复资源的情况下绑定在一起。
下面的"Employees"表中,"Employee_ID"是主键,意味着没有任何两条记录会有相同的Employee_ID值。
它能区别当两个人名字相同时的记录。
看以下实例注意:
"Employee_ID" 列是"Employees"表主键
"Prod_ID" 列是"Orders"表主键
在"Orders"表中,"Employee_ID"列作为外键存在而省去"Employees"中使用名字表达某个人。
Employees:
Employee_ID
Name
01 |
Hansen, Ola |
02 |
Svendson, Tove |
03 |
Svendson, Stephen |
04 |
Pettersen, Kari |
Orders:
Prod_ID
Product
Employee_ID
234 |
Printer |
01 |
657 |
Table |
03 |
865 |
Chair |
03 |
从两张表中查询
我们可以从两张表中查询数据,像这样:
Example
查询所有拥有订单的人的姓名,以及订单所定的产品名
SELECT Employees.Name, Orders.Product
FROM Employees, Orders
WHERE Employees.Employee_ID=Orders.Employee_ID
|
Result
Name
Product
Hansen, Ola |
Printer |
Svendson, Stephen |
Table |
Svendson, Stephen |
Chair |
Example
查询定购产品名为"Printer"的人名
SELECT Employees.Name FROM Employees, Orders WHERE Employees.Employee_ID=Orders.Employee_ID AND Orders.Product='Printer'
|
Result
使用连接查询
或者我们可以使用连接关键字从两张表中取数据,像这样:
Example INNER JOIN(内连接)
语法
SELECT field1, field2, field3 FROM first_table INNER JOIN second_table ON first_table.keyfield = second_table.foreign_keyfield
|
查询所有拥有订单的人的姓名,以及订单所定的产品名
SELECT Employees.Name, Orders.Product FROM Employees INNER JOIN Orders ON Employees.Employee_ID=Orders.Employee_ID
|
内连接从两个表中返回所有满足条件的列。如果在Employees表中有记录不符合Orders表,
则这些记录不会被列出。
Result
Name
Product
Hansen, Ola |
Printer |
Svendson, Stephen |
Table |
Svendson, Stephen |
Chair |
Example LEFT JOIN(左连接)
语法
SELECT field1, field2, field3 FROM first_table LEFT JOIN second_table ON first_table.keyfield = second_table.foreign_keyfield
|
列出所有Employees表中有订单的人的姓名,产品
SELECT Employees.Name, Orders.Product FROM Employees LEFT JOIN Orders ON Employees.Employee_ID=Orders.Employee_ID
|
左连接返回第一个表(Employees)中所有,即使在Orders表中没有符合条件的记录。
如果Employees表中的记录在Orders表中没有符合条件的话,这些记录也会被列出。
Result
Name
Product
Hansen, Ola |
Printer |
Svendson, Tove |
|
Svendson, Stephen |
Table |
Svendson, Stephen |
Chair |
Pettersen, Kari |
|
Example RIGHT JOIN(右连接)
语法
SELECT field1, field2, field3 FROM first_table RIGHT JOIN second_table ON first_table.keyfield = second_table.foreign_keyfield
|
列出所有订单及订单所属人的人名
SELECT Employees.Name, Orders.Product FROM Employees RIGHT JOIN Orders ON Employees.Employee_ID=Orders.Employee_ID
|
右连接返回第二个表(Orders)中所有,即使在第一个表Employees中没有符合条件的记录。
如果Orders表中存在不匹配Employees表的记录,这些记录也会被列出来。
Result
Name
Product
Hansen, Ola |
Printer |
Svendson, Stephen |
Table |
Svendson, Stephen |
Chair |
Example
查询定购产品名为"Printer"的人名
SELECT Employees.Name FROM Employees INNER JOIN Orders ON Employees.Employee_ID=Orders.Employee_ID WHERE Orders.Product = 'Printer'
|
Result
分享到:
相关推荐
《Oracle SQL高级编程》:资深Oracle专家力作,OakTable团队推荐,全面、独到、翔实,题材丰富,Oracle开发人员和DBA必备。 媒体推荐 本书作者全部是OakTable的成员,且具有15-29年丰富的Oracle开发经验。在研究...
《SQL Server 2008查询性能优化》指出的性能要点之一是数据库随着用户和数据的日益增多而进行扩展的必要性。你需要理解性能低下的起因。以及识别并修复它们的方法。《SQL Server 2008查询性能优化》将帮助你: 使用...
该资料是《Oracle SQL高级编程》的源代码 对应的书籍资料见: Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐) 基本信息 原书名: Pro Oracle SQL 原出版社: Apress 作者: (美)Karen Morton Kerry ...
《SQL Server 2008查询性能优化》指出的性能要点之一是数据库随着用户和数据的日益增多而进行扩展的必要性。你需要理解性能低下的起因。以及识别并修复它们的方法。《SQL Server 2008查询性能优化》将帮助你: 使用...
随后《收获,不止SQL优化——抓住SQL的本质》指引大家学会等价改写、过程包优化、高级SQL、分析函数、需求优化这些相关的五大神功。有点头晕,能否少一点套路?淡定,这还是“术”的范畴,依然是教你如何解决问题,...
第1章 全局在胸——用工具对SQL整体优化 1 1.1 都有哪些性能工具 1 1.1.1 不同调优场景分析 2 1.1.2 不同场景对应工具 2 1.2 整体性能工具的要点 4 1.2.1 五大性能报告的获取 5 1.2.2 五大报告关注的要点 10 ...
透彻分析函数、子查询、表连接、不同DBMS中的SQL语法差异、SQL调优、NULL值处理、事务、开窗函数等高级技术;通过对实际案例开发过程的详细分析,使读者掌握 SQL的综合应用技巧。 内容简介 本书主要介绍SQL的语法...
, 随后《收获,不止SQL优化——抓住SQL的本质》指引大家学会等价改写、过程包优化、高级SQL、分析函数、需求优化这些相关的五大神功。有点头晕,能否少一点套路?淡定,这还是“术”的范畴,依然是教你如何解决问题...
1.2.9 数据库的语言——SQL 1.2.10 DBA与程序员 第2章 数据表的创建和管理 2.1 数据类型 2.1.1 整数类型 2.1.2 数值类型 2.1.3 字符相关类型 2.1.4 日期时间类型 2.1.5 二进制类型 2.2 通过SQL...
1.4.11 First函数——返回查询结果的第一个记录 55 1.4.12 FirstDayOfWeek属性——获取或设置一周中的第一天 56 1.4.13 Format方法——格式化字符串 56 1.4.14 GETDATE函数——返回当前系统日期和时间 58 1.4.15 ...
第1章 全局在胸——用工具对SQL整体优化 1 1.1 都有哪些性能工具 1 1.1.1 不同调优场景分析 2 1.1.2 不同场景对应工具 2 1.2 整体性能工具的要点 4 1.2.1 五大性能报表的获取 5 1.2.2 五大报表关注的要点 10 ...
《SQL Server 2008编程入门经典(第3版)》由浅入深逐步介绍了SQL Server数据库的高级主题,重点讨论了SQL Server 2008的特殊功能以及与其他编程环境的不同之处。作者Robert Vieria是Microsoft SQL,Server方面的权威...
《SQL Server 2008编程入门经典(第3版)》由浅入深逐步介绍了SQL Server数据库的高级主题,重点讨论了SQL Server 2008的特殊功能以及与其他编程环境的不同之处。作者Robert Vieria是Microsoft SQL,Server方面的权威...
系统不用我多说,大家可以到官方网站去查询,这里是高级企业版,就是商业版本中最高级别的,最贵的!可能以后官方网站会推出新版本,我们尽我们最大的购买力满足大家对商业版的需求!此系统可以让您的网站拥有一个给...
因此在嵌入方式下,除了数据查询语句一次查询一条记录外,还有几种与游标 有关的语句: 游标的定义、打廾、关闭、拨动语句 游标定位方式的数据修改与删除语句。 为了有效维护数据库的完整性和一致性,支持 的并发...
1.2.9 数据库的语言——SQL 1.2.10 DBA与程序员 第2章 数据表的创建和管理 2.1 数据类型 2.1.1 整数类型 2.1.2 数值类型 2.1.3 字符相关类型 2.1.4 日期时间类型 2.1.5 二进制类型 2.2 通过SQL...
1.2.9 数据库的语言——SQL 1.2.10 DBA与程序员 第2章 数据表的创建和管理 2.1 数据类型 2.1.1 整数类型 2.1.2 数值类型 2.1.3 字符相关类型 2.1.4 日期时间类型 2.1.5 二进制类型 2.2 通过SQL...
1.2.9 数据库的语言——SQL 1.2.10 DBA与程序员 第2章 数据表的创建和管理 2.1 数据类型 2.1.1 整数类型 2.1.2 数值类型 2.1.3 字符相关类型 2.1.4 日期时间类型 2.1.5 二进制类型 2.2 通过SQL...
12.1 调优案例一:某移动公司存储设计不当和SQL引起的I/O瓶颈 12.2 调优案例二:某银行知识库系统锁等待、锁升级引起性能瓶颈 12.3 调优案例三:某汽车制造商ERP系统通过调整统计信息提高性能 12.4 调优案例四:某...