SQL 高级(2)

SQL 高级(2)
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 是相同的。
        原始的表 (用在例子中的):
        "Persons" 表:
Id_P    LastName    FirstName    Address    City
1    Adams    John    Oxford Street    London
2    Bush    George    Fifth Avenue    New York
3    Carter    Thomas    Changan Street    Beijing
        "Orders" 表:
Id_O    OrderNo    Id_P
1    77895    3
2    44678    3
3    22456    1
4    24562    1
5    34764    65
内连接(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 关键字
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。
        原始的表 (用在例子中的):
        "Persons" 表:
Id_P    LastName    FirstName    Address    City
1    Adams    John    Oxford Street    London
2    Bush    George    Fifth Avenue    New York
3    Carter    Thomas    Changan Street    Beijing
        "Orders" 表:
Id_O    OrderNo    Id_P
1    77895    3
2    44678    3
3    22456    1
4    24562    1
5    34764    65
左连接(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     
        LEFT JOIN 关键字会从左表 (Persons) 那里返回所有的行,即使在右表 (Orders) 中没有匹配的行。
SQL RIGHT JOIN 关键字

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。
        原始的表 (用在例子中的):
        "Persons" 表:
Id_P    LastName    FirstName    Address    City
1    Adams    John    Oxford Street    London
2    Bush    George    Fifth Avenue    New York
3    Carter    Thomas    Changan Street    Beijing
        "Orders" 表:
Id_O    OrderNo    Id_P
1    77895    3
2    44678    3
3    22456    1
4    24562    1
5    34764    65
右连接(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
        RIGHT JOIN 关键字会从右表 (Orders) 那里返回所有的行,即使在左表 (Persons) 中没有匹配的行。
SQL FULL JOIN 关键字
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。
        原始的表 (用在例子中的):
        "Persons" 表:
Id_P    LastName    FirstName    Address    City
1    Adams    John    Oxford Street    London
2    Bush    George    Fifth Avenue    New York
3    Carter    Thomas    Changan Street    Beijing
        "Orders" 表:
Id_O    OrderNo    Id_P
1    77895    3
2    44678    3
3    22456    1
4    24562    1
5    34764    65
全连接(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 ALL 操作符
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。
SQL 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
--------------------- 
作者:Crazygolf 
来源:CSDN 
原文:https://blog.csdn.net/crazygolf/article/details/39085729 
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值