`
celine_q
  • 浏览: 16259 次
  • 性别: Icon_minigender_2
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

【翻】SQL高级连接查询(一)——内连接,外连接

SQL 
阅读更多

通常我们不得不从两个或更多的表中选取数据使查询结果更完整。这时便需要使用连接查询(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

    Name
    Hansen, Ola



    使用连接查询
    或者我们可以使用连接关键字从两张表中取数据,像这样:

    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

    Name
    Hansen, Ola

    分享到:
    评论

    相关推荐

      Oracle SQL高级编程

      《Oracle SQL高级编程》:资深Oracle专家力作,OakTable团队推荐,全面、独到、翔实,题材丰富,Oracle开发人员和DBA必备。 媒体推荐 本书作者全部是OakTable的成员,且具有15-29年丰富的Oracle开发经验。在研究...

      SQLServer2008查询性能优化 2/2

      《SQL Server 2008查询性能优化》指出的性能要点之一是数据库随着用户和数据的日益增多而进行扩展的必要性。你需要理解性能低下的起因。以及识别并修复它们的方法。《SQL Server 2008查询性能优化》将帮助你: 使用...

      Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

      该资料是《Oracle SQL高级编程》的源代码 对应的书籍资料见: Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐) 基本信息 原书名: Pro Oracle SQL 原出版社: Apress 作者: (美)Karen Morton Kerry ...

      SQLServer2008查询性能优化 1/2

      《SQL Server 2008查询性能优化》指出的性能要点之一是数据库随着用户和数据的日益增多而进行扩展的必要性。你需要理解性能低下的起因。以及识别并修复它们的方法。《SQL Server 2008查询性能优化》将帮助你: 使用...

      收获,不止SQL优化 PDF 带书签 第三部分

      随后《收获,不止SQL优化——抓住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 ...

      程序员的SQL金典.rar

      透彻分析函数、子查询、表连接、不同DBMS中的SQL语法差异、SQL调优、NULL值处理、事务、开窗函数等高级技术;通过对实际案例开发过程的详细分析,使读者掌握 SQL的综合应用技巧。 内容简介 本书主要介绍SQL的语法...

      收获,不止SQL优化

      , 随后《收获,不止SQL优化——抓住SQL的本质》指引大家学会等价改写、过程包优化、高级SQL、分析函数、需求优化这些相关的五大神功。有点头晕,能否少一点套路?淡定,这还是“术”的范畴,依然是教你如何解决问题...

      程序员的SQL金典4-8

       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...

      C#全能速查宝典

      1.4.11 First函数——返回查询结果的第一个记录 55 1.4.12 FirstDayOfWeek属性——获取或设置一周中的第一天 56 1.4.13 Format方法——格式化字符串 56 1.4.14 GETDATE函数——返回当前系统日期和时间 58 1.4.15 ...

      收获,不止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 ...

      SQL.Server.2008编程入门经典(第3版).part2.rar

      《SQL Server 2008编程入门经典(第3版)》由浅入深逐步介绍了SQL Server数据库的高级主题,重点讨论了SQL Server 2008的特殊功能以及与其他编程环境的不同之处。作者Robert Vieria是Microsoft SQL,Server方面的权威...

      SQL.Server.2008编程入门经典(第3版).part1.rar

      《SQL Server 2008编程入门经典(第3版)》由浅入深逐步介绍了SQL Server数据库的高级主题,重点讨论了SQL Server 2008的特殊功能以及与其他编程环境的不同之处。作者Robert Vieria是Microsoft SQL,Server方面的权威...

      【asp+sql】Oblog4.60高级企业商业版

      系统不用我多说,大家可以到官方网站去查询,这里是高级企业版,就是商业版本中最高级别的,最贵的!可能以后官方网站会推出新版本,我们尽我们最大的购买力满足大家对商业版的需求!此系统可以让您的网站拥有一个给...

      达梦数据库_SQL语言手册

      因此在嵌入方式下,除了数据查询语句一次查询一条记录外,还有几种与游标 有关的语句: 游标的定义、打廾、关闭、拨动语句 游标定位方式的数据修改与删除语句。 为了有效维护数据库的完整性和一致性,支持 的并发...

      程序员的SQL金典6-8

       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...

      程序员的SQL金典7-8

       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...

      程序员的SQL金典3-8

       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...

      深入解析DB2--高级管理,内部体系结构与诊断案例.part1.rar

      12.1 调优案例一:某移动公司存储设计不当和SQL引起的I/O瓶颈 12.2 调优案例二:某银行知识库系统锁等待、锁升级引起性能瓶颈 12.3 调优案例三:某汽车制造商ERP系统通过调整统计信息提高性能 12.4 调优案例四:某...

    Global site tag (gtag.js) - Google Analytics