通常我们不得不从两个或更多的表中选取数据使查询结果更完整。这时便需要使用连接查询(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
使用连接查询
或者我们可以使用连接关键字从两张表中取数据,像这样:
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
分享到:
相关推荐
联合查询通常涉及多个表,使用SELECT语句时可以将多个表通过特定的连接类型(如内连接、外连接、交叉连接等)结合起来。例如,通过INNER JOIN可以只选择两个表中匹配的行。 #### 3. 连接查询 连接查询用于根据某些...
四、SQL高级特性 1. 分区表:大型数据库中,将大表分成小块,提高查询性能。 2. 触发器和存储过程:用于实现复杂的业务逻辑,如审计日志、数据校验等。 3. 并行查询:利用多核CPU资源,加速查询速度。 4. 分布式...
### 数据库高级查询——连接查询详解 连接查询作为SQL中的重要组成部分,在进行复杂的数据分析时发挥着关键作用。本文将围绕“自连接外连接”这一主题展开,详细解析Oracle数据库中连接查询的具体实现方法,包括内...
在IT领域,数据库管理系统是核心组成部分之一,而SQL Server 2008是微软公司推出的一款强大、可靠的数据库系统。本篇文章将详细讲解如何使用Java的JDBC(Java Database Connectivity)驱动来连接SQL Server 2008,...
以上实验内容不仅涉及基本的SQL语句编写技巧,还涵盖了更为高级的SQL特性,如连接查询、聚合函数、排序等。这些技能对于数据库管理、数据分析师等职业至关重要,是学习SQL过程中不可或缺的一部分。
SQL(Structured Query Language)是一种用于管理和处理关系型数据库的标准编程语言。本教程涵盖了SQL的基础到进阶知识,旨在帮助新手和经验丰富的数据工作者巩固或学习SQL技能。 首先,SQL指令涉及了数据的存储、...
`sqljdbc42.jar`是一个Java数据库连接(JDBC)驱动包,专为与SQL Server 2016配合使用而设计。JDBC是Java平台的一部分,允许Java开发者通过编写Java代码来访问和处理关系数据库。驱动包中的类和接口实现了JDBC规范,...
通过上述内容的分析,可以看出该文档涵盖了从SQL语言基础到高级查询等多个方面的知识,对于初学者来说是一份非常全面的学习资料。掌握了这些基础知识后,用户将能够更好地管理和操作IBM DB2数据库中的数据。
总之,《信息系统开发教程——使用C#和SQL Server 2005》是一份全面的指南,涵盖了从基础到高级的C#编程和SQL Server数据库管理知识。无论你是初学者还是有经验的开发者,都能从中获得宝贵的见解和实践指导。通过...
本书《21天学会SQL语句——SQL21自学通》旨在帮助读者全面掌握SQL的基础和高级知识。 **第一章:SQL简介** - **SQL简史**:自1970年代由IBM的研究员E.F. Codd提出关系型数据库模型以来,SQL便应运而生,并逐渐成为...
《信息系统开发教程——使用C#和SQL Server 2005》是一本深入探讨如何结合这两项技术构建高效、稳定的信息系统的权威指南。C#是一种面向对象的编程语言,广泛应用于Windows应用程序和Web应用程序的开发,而SQL ...
3. SQL查询:深入理解SQL语言,包括DML(数据操纵语言)和DDL(数据定义语言),以及高级查询技巧如联接、子查询、聚合函数等。 4. 数据库设计:探讨如何规划和设计关系数据库,包括范式理论、表结构设计、主键和...
这是更为高级的防御手段,允许数据库在执行查询时区分开代码和数据,即使数据中包含了SQL命令的一部分,数据库也不会将其作为命令执行。 5. 在应用层实现多级验证机制。例如,即使是在用户登录环节,除了基本的用户...
2. **子查询与联接**:深入讲解嵌套查询的使用,以及各种类型的联接(内连接、外连接、交叉连接)和自连接,帮助读者处理多表数据。 3. **集函数**:如COUNT、SUM、AVG、MIN和MAX等,用于对一组值进行统计计算。 4...
《SQL Server 2000 图解教程——下》是一本专门为初学者设计的数据库管理教程,通过丰富的图像和简洁的文字,深入浅出地讲解了SQL Server 2000的核心概念和技术。在这个部分,我们将重点探讨SQL Server 2000在数据...
本篇文章将详细介绍一个针对SQL Server 2005及以后版本的通用类——`DBHelper`,该类主要负责处理数据库连接和基本的CRUD(创建、读取、更新、删除)操作。此类的设计旨在帮助初学者快速理解如何在C#中进行数据库...
【标题】:“C# + SQL Server —— 通讯录” 这篇内容主要介绍了一个使用C#编程语言和SQL Server数据库技术开发的通讯录系统,适用于课程设计项目。该系统旨在提供一个用户友好的界面,实现对联系人信息的有效管理...
4. **数据访问技术**:在C#与SQL Server之间进行数据交互,通常会用到ADO.NET,它是.NET框架的一部分,提供了连接数据库、执行命令、读取结果集等方法。通过分析源码,你可以学习到如何使用DataSet、DataTable、...
"学习笔记——sql.zip"这个压缩包文件很可能包含了关于SQL的学习资料,如教程、笔记、示例代码等,旨在帮助用户掌握SQL的基本概念、语法和高级特性。 首先,SQL的基础知识包括数据类型,如整型(INT)、浮点型...
2. **联接查询**:SQL Server支持多种类型的联接,包括内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全外连接(FULL OUTER JOIN),这些用于合并多个表中的数据,以获取更全面的信息。 3. **子查询**...