`
celine_q
  • 浏览: 16868 次
  • 性别: 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

    分享到:
    评论

    相关推荐

      SQL查询语句——SELECT的使用技巧.pdf

      联合查询通常涉及多个表,使用SELECT语句时可以将多个表通过特定的连接类型(如内连接、外连接、交叉连接等)结合起来。例如,通过INNER JOIN可以只选择两个表中匹配的行。 #### 3. 连接查询 连接查询用于根据某些...

      SQL从基础到深入——本人心得

      四、SQL高级特性 1. 分区表:大型数据库中,将大表分成小块,提高查询性能。 2. 触发器和存储过程:用于实现复杂的业务逻辑,如审计日志、数据校验等。 3. 并行查询:利用多核CPU资源,加速查询速度。 4. 分布式...

      自连接外连接

      ### 数据库高级查询——连接查询详解 连接查询作为SQL中的重要组成部分,在进行复杂的数据分析时发挥着关键作用。本文将围绕“自连接外连接”这一主题展开,详细解析Oracle数据库中连接查询的具体实现方法,包括内...

      SqlServer2008连接驱动

      在IT领域,数据库管理系统是核心组成部分之一,而SQL Server 2008是微软公司推出的一款强大、可靠的数据库系统。本篇文章将详细讲解如何使用Java的JDBC(Java Database Connectivity)驱动来连接SQL Server 2008,...

      SQL实验:使用分组,排序和聚合函数以及连接查询

      以上实验内容不仅涉及基本的SQL语句编写技巧,还涵盖了更为高级的SQL特性,如连接查询、聚合函数、排序等。这些技能对于数据库管理、数据分析师等职业至关重要,是学习SQL过程中不可或缺的一部分。

      SQL语句全教程——语法、指令

      SQL(Structured Query Language)是一种用于管理和处理关系型数据库的标准编程语言。本教程涵盖了SQL的基础到进阶知识,旨在帮助新手和经验丰富的数据工作者巩固或学习SQL技能。 首先,SQL指令涉及了数据的存储、...

      适用SQL Server 2016版本的数据库加载驱动包——sqljdbc42.jar

      `sqljdbc42.jar`是一个Java数据库连接(JDBC)驱动包,专为与SQL Server 2016配合使用而设计。JDBC是Java平台的一部分,允许Java开发者通过编写Java代码来访问和处理关系数据库。驱动包中的类和接口实现了JDBC规范,...

      IBM DB2数据库——SQL入门

      通过上述内容的分析,可以看出该文档涵盖了从SQL语言基础到高级查询等多个方面的知识,对于初学者来说是一份非常全面的学习资料。掌握了这些基础知识后,用户将能够更好地管理和操作IBM DB2数据库中的数据。

      [信息系统开发教程——使用C#和SQL+Server+2005]

      总之,《信息系统开发教程——使用C#和SQL Server 2005》是一份全面的指南,涵盖了从基础到高级的C#编程和SQL Server数据库管理知识。无论你是初学者还是有经验的开发者,都能从中获得宝贵的见解和实践指导。通过...

      21天学会SQL语句——SQL21自学通

      本书《21天学会SQL语句——SQL21自学通》旨在帮助读者全面掌握SQL的基础和高级知识。 **第一章:SQL简介** - **SQL简史**:自1970年代由IBM的研究员E.F. Codd提出关系型数据库模型以来,SQL便应运而生,并逐渐成为...

      信息系统开发教程——使用C#和SQL Server 2005

      《信息系统开发教程——使用C#和SQL Server 2005》是一本深入探讨如何结合这两项技术构建高效、稳定的信息系统的权威指南。C#是一种面向对象的编程语言,广泛应用于Windows应用程序和Web应用程序的开发,而SQL ...

      asp+sql+server+程序代码系统——天书

      3. SQL查询:深入理解SQL语言,包括DML(数据操纵语言)和DDL(数据定义语言),以及高级查询技巧如联接、子查询、聚合函数等。 4. 数据库设计:探讨如何规划和设计关系数据库,包括范式理论、表结构设计、主键和...

      打造网站的坚盾——SQL注入防范专题——SQL注入防范之完善网站程序.pdf

      这是更为高级的防御手段,允许数据库在执行查询时区分开代码和数据,即使数据中包含了SQL命令的一部分,数据库也不会将其作为命令执行。 5. 在应用层实现多级验证机制。例如,即使是在用户登录环节,除了基本的用户...

      Sql2008技术内幕-T-Sql查询

      2. **子查询与联接**:深入讲解嵌套查询的使用,以及各种类型的联接(内连接、外连接、交叉连接)和自连接,帮助读者处理多表数据。 3. **集函数**:如COUNT、SUM、AVG、MIN和MAX等,用于对一组值进行统计计算。 4...

      SQL_Server_2000图解教程——下

      《SQL Server 2000 图解教程——下》是一本专门为初学者设计的数据库管理教程,通过丰富的图像和简洁的文字,深入浅出地讲解了SQL Server 2000的核心概念和技术。在这个部分,我们将重点探讨SQL Server 2000在数据...

      C#与Sql连接字符串的公用类 DBHelper

      本篇文章将详细介绍一个针对SQL Server 2005及以后版本的通用类——`DBHelper`,该类主要负责处理数据库连接和基本的CRUD(创建、读取、更新、删除)操作。此类的设计旨在帮助初学者快速理解如何在C#中进行数据库...

      C# +SQL Server——通讯录

      【标题】:“C# + SQL Server —— 通讯录” 这篇内容主要介绍了一个使用C#编程语言和SQL Server数据库技术开发的通讯录系统,适用于课程设计项目。该系统旨在提供一个用户友好的界面,实现对联系人信息的有效管理...

      c#版VS2005@MS SQL SERVER2005典型应用——通讯录

      4. **数据访问技术**:在C#与SQL Server之间进行数据交互,通常会用到ADO.NET,它是.NET框架的一部分,提供了连接数据库、执行命令、读取结果集等方法。通过分析源码,你可以学习到如何使用DataSet、DataTable、...

      学习笔记——sql.zip

      "学习笔记——sql.zip"这个压缩包文件很可能包含了关于SQL的学习资料,如教程、笔记、示例代码等,旨在帮助用户掌握SQL的基本概念、语法和高级特性。 首先,SQL的基础知识包括数据类型,如整型(INT)、浮点型...

      北大青鸟-ACCP5.0-S2(2期课程)课件sql server高级查询和数据库

      2. **联接查询**:SQL Server支持多种类型的联接,包括内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全外连接(FULL OUTER JOIN),这些用于合并多个表中的数据,以获取更全面的信息。 3. **子查询**...

    Global site tag (gtag.js) - Google Analytics