SQL 高级(2)

来源:互联网 发布:mac安装win10不用u盘 编辑:程序博客网 时间:2024/05/17 03:08

SQL 高级(2)

SQL INNER JOIN 关键字

        在表中存在至少一个匹配时,INNER JOIN 关键字返回行。

INNER JOIN 关键字语法

SELECT column_name(s)FROM table_name1INNER JOIN table_name2 ON table_name1.column_name=table_name2.column_name
        注释:INNER JOIN 与 JOIN 是相同的。
        原始的表 (用在例子中的):
        "Persons" 表:
Id_PLastNameFirstNameAddressCity1AdamsJohnOxford StreetLondon2BushGeorgeFifth AvenueNew York3CarterThomasChangan StreetBeijing        "Orders" 表:
Id_OOrderNoId_P177895324467833224561424562153476465

内连接(INNER JOIN)实例

        现在,我们希望列出所有人的定购。
        您可以使用下面的 SELECT 语句:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNoFROM PersonsINNER JOIN OrdersON Persons.Id_P=Orders.Id_PORDER BY Persons.LastName
        结果集:
LastNameFirstNameOrderNoAdamsJohn22456AdamsJohn24562CarterThomas77895CarterThomas44678
        INNER JOIN 关键字在表中存在至少一个匹配时返回行。如果 "Persons" 中的行在 "Orders" 中没有匹配,就不会列出这些行。

SQL LEFT JOIN 关键字

SQL LEFT JOIN 关键字

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

LEFT JOIN 关键字语法

SELECT column_name(s)FROM table_name1LEFT JOIN table_name2 ON table_name1.column_name=table_name2.column_name
        注释:在某些数据库中, LEFT JOIN 称为 LEFT OUTER JOIN。
        原始的表 (用在例子中的):
        "Persons" 表:
Id_PLastNameFirstNameAddressCity1AdamsJohnOxford StreetLondon2BushGeorgeFifth AvenueNew York3CarterThomasChangan StreetBeijing        "Orders" 表:
Id_OOrderNoId_P177895324467833224561424562153476465

左连接(LEFT JOIN)实例

        现在,我们希望列出所有的人,以及他们的定购 - 如果有的话。
        您可以使用下面的 SELECT 语句:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNoFROM PersonsLEFT JOIN OrdersON Persons.Id_P=Orders.Id_PORDER BY Persons.LastName
        结果集:
LastNameFirstNameOrderNoAdamsJohn22456AdamsJohn24562CarterThomas77895CarterThomas44678BushGeorge         LEFT JOIN 关键字会从左表 (Persons) 那里返回所有的行,即使在右表 (Orders) 中没有匹配的行。

SQL RIGHT JOIN 关键字


SQL RIGHT JOIN 关键字

        RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。

RIGHT JOIN 关键字语法

SELECT column_name(s)FROM table_name1RIGHT JOIN table_name2 ON table_name1.column_name=table_name2.column_name
        注释:在某些数据库中, RIGHT JOIN 称为 RIGHT OUTER JOIN。
        原始的表 (用在例子中的):
        "Persons" 表:
Id_PLastNameFirstNameAddressCity1AdamsJohnOxford StreetLondon2BushGeorgeFifth AvenueNew York3CarterThomasChangan StreetBeijing        "Orders" 表:
Id_OOrderNoId_P177895324467833224561424562153476465

右连接(RIGHT JOIN)实例

        现在,我们希望列出所有的定单,以及定购它们的人 - 如果有的话。
        您可以使用下面的 SELECT 语句:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNoFROM PersonsRIGHT JOIN OrdersON Persons.Id_P=Orders.Id_PORDER BY Persons.LastName
        结果集:
LastNameFirstNameOrderNoAdamsJohn22456AdamsJohn24562CarterThomas77895CarterThomas44678  34764        RIGHT JOIN 关键字会从右表 (Orders) 那里返回所有的行,即使在左表 (Persons) 中没有匹配的行。

SQL FULL JOIN 关键字

SQL FULL JOIN 关键字

        只要其中某个表存在匹配,FULL JOIN 关键字就会返回行。

FULL JOIN 关键字语法

SELECT column_name(s)FROM table_name1FULL JOIN table_name2 ON table_name1.column_name=table_name2.column_name
        注释:在某些数据库中, FULL JOIN 称为 FULL OUTER JOIN。
        原始的表 (用在例子中的):
        "Persons" 表:
Id_PLastNameFirstNameAddressCity1AdamsJohnOxford StreetLondon2BushGeorgeFifth AvenueNew York3CarterThomasChangan StreetBeijing        "Orders" 表:
Id_OOrderNoId_P177895324467833224561424562153476465

全连接(FULL JOIN)实例

        现在,我们希望列出所有的人,以及他们的定单,以及所有的定单,以及定购它们的人。
        您可以使用下面的 SELECT 语句:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNoFROM PersonsFULL JOIN OrdersON Persons.Id_P=Orders.Id_PORDER BY Persons.LastName
        结果集:
LastNameFirstNameOrderNoAdamsJohn22456AdamsJohn24562CarterThomas77895CarterThomas44678BushGeorge   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_name1UNIONSELECT column_name(s) FROM table_name2
        注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。

SQL UNION ALL 语法

SELECT column_name(s) FROM table_name1UNION ALLSELECT column_name(s) FROM table_name2
        另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。
        下面的例子中使用的原始表:
        Employees_China:
E_IDE_Name01Zhang, Hua02Wang, Wei03Carter, Thomas04Yang, Ming        Employees_USA:
E_IDE_Name01Adams, John02Bush, George03Carter, Thomas04Gates, Bill

使用 UNION 命令

实例

        列出所有在中国和美国的不同的雇员名:
SELECT E_Name FROM Employees_ChinaUNIONSELECT E_Name FROM Employees_USA
        结果
E_NameZhang, HuaWang, WeiCarter, ThomasYang, MingAdams, JohnBush, GeorgeGates, Bill         注释:这个命令无法列出在中国和美国的所有雇员。在上面的例子中,我们有两个名字相同的雇员,他们当中只有一个人被列出来了。UNION 命令只会选取不同的值。

UNION ALL

        UNION ALL 命令和 UNION 命令几乎是等效的,不过 UNION ALL 命令会列出所有的值。
SQL Statement 1UNION ALLSQL Statement 2
        使用 UNION ALL 命令

实例:

        列出在中国和美国的所有的雇员:
SELECT E_Name FROM Employees_ChinaUNION ALLSELECT E_Name FROM Employees_USA
        结果
E_NameZhang, HuaWang, WeiCarter, ThomasYang, MingAdams, JohnBush, GeorgeCarter, ThomasGates, Bill
4 0