`
eric.zhang
  • 浏览: 126064 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

sql常用连接

    博客分类:
  • SQL
SQL 
阅读更多
一、SQL JOIN
Join 和 Key
有时为了得到完整的结果,我们需要从两个或更多的表中获取结果。我们就需要执行 join。
数据库中的表可通过键将彼此联系起来。主键(Primary Key)是一个列,在这个列中的每一行的值都是唯一的。在表中,每个主键的值都是唯一的。这样做的目的是在不重复每个表中的所有数据的情况下,把表间的数据交叉捆绑在一起。
请看 "Persons" 表:
Id_P LastName FirstName AddressCity
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

请注意,"Id_P" 列是 Persons 表中的的主键。这意味着没有两行能够拥有相同的 Id_P。即使两个人的姓名完全相同,Id_P 也可以区分他们。
接下来请看 "Orders" 表:
Id_O OrderNo Id_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 65

请注意,"Id_O" 列是 Orders 表中的的主键,同时,"Orders" 表中的 "Id_P" 列用于引用 "Persons" 表中的人,而无需使用他们的确切姓名。
请留意,"Id_P" 列把上面的两个表联系了起来。

引用两个表
我们可以通过引用两个表的方式,从两个表中获取数据:
谁订购了产品,并且他们订购了什么产品?
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
WHERE Persons.Id_P = Orders.Id_P 


结果集:
LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678


SQL JOIN - 使用 Join
除了上面的方法,我们也可以使用关键词 JOIN 来从两个表中获取数据。
如果我们希望列出所有人的定购,可以使用下面的 SELECT 语句:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P = Orders.Id_P
ORDER BY Persons.LastName

结果集:

LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678


不同的 SQL JOIN
除了我们在上面的例子中使用的 INNER JOIN(内连接),我们还可以其他几种连接。
下面列出了您可以使用的 JOIN 类型,以及它们之间的差异。
JOIN: 如果表中有至少一个匹配,则返回行
LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
FULL JOIN: 只要其中一个表中存在匹配,就返回行

(一)、SQL INNER JOIN 关键字
在表中存在至少一个匹配时,INNER JOIN 关键字返回行。
INNER JOIN 关键字语法
SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2 
ON table_name1.column_name=table_name2.column_name

注释:INNER JOIN 与 JOIN 是相同的。

内连接(INNER JOIN)实例
现在,我们希望列出所有人的定购。
可以使用下面的 SELECT 语句:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName


结果集:

LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678


INNER JOIN 关键字在表中存在至少一个匹配时返回行。如果 "Persons" 中的行在 "Orders" 中没有匹配,就不会列出这些行。

(二)、SQL LEFT JOIN 关键字
LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。
LEFT JOIN 关键字语法
SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2 
ON table_name1.column_name=table_name2.column_name

注释:在某些数据库中, LEFT JOIN 称为 LEFT OUTER JOIN。

左连接(LEFT JOIN)实例
现在,我们希望列出所有的人,以及他们的定购 - 如果有的话。
可以使用下面的 SELECT 语句:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
LEFT JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName


结果集:
LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678
Bush George

EFT JOIN 关键字会从左表 (Persons) 那里返回所有的行,即使在右表 (Orders) 中没有匹配的行。

(三)、SQL RIGHT JOIN 关键字
RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。
RIGHT JOIN 关键字语法
SELECT column_name(s)
FROM table_name1
RIGHT JOIN table_name2 
ON table_name1.column_name=table_name2.column_name

注释:在某些数据库中, RIGHT JOIN 称为 RIGHT OUTER JOIN。

右连接(RIGHT JOIN)实例
现在,我们希望列出所有的定单,以及定购它们的人 - 如果有的话。
可以使用下面的 SELECT 语句:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
RIGHT JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName

结果集:
LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678
34764

IGHT JOIN 关键字会从右表 (Orders) 那里返回所有的行,即使在左表 (Persons) 中没有匹配的行。

(四)、SQL FULL JOIN 关键字
只要其中某个表存在匹配,FULL JOIN 关键字就会返回行。
FULL JOIN 关键字语法
SELECT column_name(s)
FROM table_name1
FULL JOIN table_name2 
ON table_name1.column_name=table_name2.column_name

注释:在某些数据库中, FULL JOIN 称为 FULL OUTER JOIN。

全连接(FULL JOIN)实例
现在,我们希望列出所有的人,以及他们的定单,以及所有的定单,以及定购它们的人。
可以使用下面的 SELECT 语句:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
FULL JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName


结果集:
LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678
Bush George
34764

FULL JOIN 关键字会从左表 (Persons) 和右表 (Orders) 那里返回所有的行。如果 "Persons" 中的行在表 "Orders" 中没有匹配,或者如果 "Orders" 中的行在表 "Persons" 中没有匹配,这些行同样会列出。

(五)、SQL UNION 操作符
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
SQL UNION 语法
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2

注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。

UNION ALL 语法
SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2

另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。
下面的例子中使用的原始表:
Employees_China:
E_ID E_Name
01 Zhang, Hua
02 Wang, Wei
03 Carter, Thomas
04 Yang, Ming


Employees_USA:
E_ID E_Name
01 Adams, John
02 Bush, George
03 Carter, Thomas
04 Gates, Bill


使用 UNION 命令
实例
列出所有在中国和美国的不同的雇员名:
SELECT E_Name FROM Employees_China
UNION
SELECT E_Name FROM Employees_USA


结果集:
E_Name
Zhang, Hua
Wang, Wei
Carter, Thomas
Yang, Ming
Adams, John
Bush, George
Gates, Bill


注释:这个命令无法列出在中国和美国的所有雇员。在上面的例子中,我们有两个名字相同的雇员,他们当中只有一个人被列出来了。UNION 命令只会选取不同的值。

UNION ALL
UNION ALL 命令和 UNION 命令几乎是等效的,不过 UNION ALL 命令会列出所有的值。
SQL Statement 1
UNION ALL
SQL Statement 2
使用 UNION ALL 命令
实例:
列出在中国和美国的所有的雇员:
SELECT E_Name FROM Employees_China
UNION ALL
SELECT E_Name FROM Employees_USA


结果:
E_Name
Zhang, Hua
Wang, Wei
Carter, Thomas
Yang, Ming
Adams, John
Bush, George
Carter, Thomas
Gates, Bill


(六)、SQL SELECT INTO 语句可用于创建表的备份复件。
SELECT INTO 语句
SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中。
SELECT INTO 语句常用于创建表的备份复件或者用于对记录进行存档。
SQL SELECT INTO 语法
您可以把所有的列插入新表:
SELECT *
INTO new_table_name [IN externaldatabase] 
FROM old_tablename

或者只把希望的列插入新表:
SELECT column_name(s)
INTO new_table_name [IN externaldatabase] 
FROM old_tablename


SQL SELECT INTO 实例 - 制作备份复件
下面的例子会制作 "Persons" 表的备份复件:
SELECT *
INTO Persons_backup
FROM Persons

IN 子句可用于向另一个数据库中拷贝表:
SELECT *
INTO Persons IN 'Backup.mdb'
FROM Persons

如果我们希望拷贝某些域,可以在 SELECT 语句后列出这些域:
SELECT LastName,FirstName
INTO Persons_backup
FROM Persons


SQL SELECT INTO 实例 - 带有 WHERE 子句
我们也可以添加 WHERE 子句。
下面的例子通过从 "Persons" 表中提取居住在 "Beijing" 的人的信息,创建了一个带有两个列的名为 "Persons_backup" 的表:
SELECT LastName,Firstname
INTO Persons_backup
FROM Persons
WHERE City='Beijing'

SQL SELECT INTO 实例 - 被连接的表
从一个以上的表中选取数据也是可以做到的。
下面的例子会创建一个名为 "Persons_Order_Backup" 的新表,其中包含了从 Persons 和 Orders 两个表中取得的信息:
SELECT Persons.LastName,Orders.OrderNo
INTO Persons_Order_Backup
FROM Persons
INNER JOIN Orders
ON Persons.Id_P=Orders.Id_P
分享到:
评论

相关推荐

    SqlServer连接工具

    除此之外,免费的第三方工具如SQL Server Compact Toolbox 和 SQL Server Express Management Studio 也是开发者常用的选择。SQL Server Compact Toolbox适用于处理SQL Server Compact Edition数据库,而SQL Server ...

    如何查看sql server数据库连接数

    1. 打开性能监视器,添加计数器,选择 SQL Server 的常用统计(MSSQL General Statistics)。 2. 在下面的项目中选择用户连接(User Connection),这样就可以实时查询到 SQL Server 数据库连接数。 方法二:通过...

    SQL Server连接字段的方法

    ### SQL Server连接字段的方法 在SQL Server中,经常会遇到需要将不同的字段进行组合或转换的情况,比如将分别存储年、月、日的三个字段合并成一个日期格式的字符串。这种需求在实际应用中非常常见,尤其是在处理...

    sql连接常用jar包

    本文将深入探讨“sql连接常用jar包”这一主题,介绍如何在Java项目中配置和使用这些jar包,以及它们在SQL连接中的重要性。 首先,SQL连接jar包通常包括JDBC(Java Database Connectivity)驱动,它是Java标准版的一...

    SQLDBX 连接多种类型的数据库

    - 自定义代码片段,将常用的SQL语句模板化,节省编写时间。 - 通过“数据导入/导出”功能,可以快速将数据迁移至其他数据库或文件。 总结,SQLDBX作为一个强大的数据库管理工具,具备丰富的功能,能够满足用户在...

    sql server客户端连接工具

    SQL Server客户端连接工具是数据库管理员和开发人员用来与Microsoft SQL Server进行交互的重要工具。它提供了图形用户界面(GUI)和命令行选项,使得用户能够轻松地执行查询、管理数据库对象以及进行其他数据库维护...

    sql内连接和外连接

    内连接(INNER JOIN)是一种最常用的连接方式,它仅返回两个数据集合中具有匹配关系的那些行。具体来说,它会从位于两个互相交叉的数据集合中找到重叠部分内的数据行,并将其连接起来。 **语法**: ```sql SELECT ...

    常用sql指令一般面试都可通过

    SQL常用指令详解 SQL 是结构化查询语言(Structured Query Language),是一种专门用于管理关系数据库管理系统(RDBMS)的语言。 SQL 指令是数据库管理系统的基础,掌握 SQL 指令是开发者和数据库管理员必备的技能...

    SQL常用优化方法

    `sql常用优化方法.chm`文件可能包含了一些实用的SQL性能监控和调优工具,例如SQL Profiler,它可以帮助识别慢查询,找出性能瓶颈。通过这些工具,你可以实时监控数据库性能,进行针对性优化。 总结,SQL性能优化是...

    sql常用命令sql命令sql命令sql命令sql命令

    SQL 命令是数据库管理系统中最基本也是最常用的命令,它们可以用来管理和维护数据库。本文将介绍一些基本的 SQL 命令,以及一些操作技巧,以便读者更好地使用 MySQL 数据库管理系统。 一、连接 MySQL 在使用 MySQL...

    SQL数据库连接和操作

    4. 查询数据:`SELECT`语句是SQL中最常用的,用于获取数据,如:`SELECT * FROM Employees;` 获取所有员工信息。 5. 更新数据:`UPDATE`语句用于修改表中的数据,如:`UPDATE Employees SET Name = 'Jane Doe' ...

    用VB做端口扫描和SQL Server连接器.

    "用VB做端口扫描和SQL Server连接器"这个标题涉及了两个主要的IT技术领域:Visual Basic(VB)编程语言和数据库管理系统的连接,特别是与SQL Server的交互。VB是一种流行的微软开发环境,适用于创建桌面应用程序。...

    c#数据库sqlserver连接公共类的实现

    在C#中,为了方便地管理和操作SQL Server数据库,我们可以创建一个数据库连接的公共类,封装常用的操作方法。这个公共类可以大大提高代码的复用性,减少重复的工作,使得项目更加整洁高效。 首先,我们需要引入`...

    ASP的SQL Server连接字符串介绍

    SQL Server作为最常用的数据库管理系统之一,了解如何在ASP中配置与SQL Server的连接字符串是开发这类应用程序的基础。本文将详细介绍ASP环境中SQL Server连接字符串的配置方式,包括不同版本的SQL Server和不同的...

    SQL常用语句速查手册

    SQL 常用语句速查手册 本资源摘要信息提供了 SQL 常用语句速查手册,涵盖了创建数据库、删除数据库、备份数据库、创建新表、删除表、增加列、添加主键、创建索引、创建视图、基本的 SQL 语句、 高级查询运算词等...

    sqlserver常用sql

    死锁的诊断和定位 查询阻塞的语句 查询执行较慢的语句 查询正在执行的语句1 查询正在执行的语句2 查询所有表的主键 查询所有索引 查询表结构 生成表结构文档 ...用DAC连接到SQL Server 其它SQL DBCC

    SQL技巧 常用SQL操作语句

    ### SQL技巧:常用SQL操作语句详解 #### 1. 复制表(仅复制结构) **场景描述:** 在数据库管理过程中,有时我们需要创建一个与现有表具有相同结构但不包含任何数据的新表。例如,当我们需要为测试或备份目的创建...

    面试常用SQL常用语句

    在SQL面试中,掌握一些常用的查询语句是至关重要的,以下是一些常见的SQL知识点: 1. **ISNULL函数**:这个函数用于判断一个值是否为NULL,如果是,则替换为指定的值。例如,在第一条查询中,如果员工的出生日期为...

    Oracle SQL常用脚本

    在这个"Oracle SQL常用脚本"的资源中,我们重点探讨四个关键知识点:创建表空间、创建用户、理解执行计划以及外连接和全连接。 首先,让我们讨论创建表空间。在Oracle数据库系统中,表空间是存储数据的主要单位。...

Global site tag (gtag.js) - Google Analytics