SQL高级教程之BETWEEN/Alias别名/Join系列(Inner/Left/Right/Full JOIN)

以下全部内容来自W3School SQL教程,我在学习的过程中完全自己照着敲了一遍,加深学习印象。

1、SQL 基础教程学习

2、SQL高级教程学习(之TOP LIKE 通配符 In)

SQL BETWEEN 操作符

操作符 BETWEEN … AND 会选取介于两个值之间的数据范围。这些值可以是数值文本或者日期

SQL BETWEEN 语法:

SELECT column_name(s) 
FROM table_name 
WHERE column_name 
BETWEEN value1 AND value2

Persons表:

IdLastNameFirstNameAddressCity
1AdamsJohnOxford StreetLondon
2BushGeorgeFifth AvenueNew York
3CarterThomasChangan StreetBeijing
4GatesBillXuanwumen 10Beijing


BETWEEN 操作符实例 1

如需以字母顺序显示介于 “Adams”(包括)和 “Carter”(不包括)之间的人,请使用下面的 SQL:

SELECT * 
FROM Persons 
WHERE LastName 
BETWEEN 'Adams' AND 'Carter'

结果集:

IdLastNameFirstNameAddressCity
1AdamsJohnOxford StreetLondon
2BushGeorgeFifth AvenueNew York

重要事项:
不同的数据库对 BETWEEN…AND 操作符的处理方式是有差异的。某些数据库会列出介于 “Adams” 和 “Carter” 之间的人,但不包括 “Adams” 和 “Carter” ;某些数据库会列出介于 “Adams” 和 “Carter” 之间并包括 “Adams” 和 “Carter” 的人;而另一些数据库会列出介于 “Adams” 和 “Carter” 之间的人,包括 “Adams” ,但不包括 “Carter” 。
所以,请检查你的数据库是如何处理 BETWEEN….AND 操作符的!


实例 2 不包含

如需使用上面的例子显示范围之外的人,请使用 NOT 操作符:

SELECT * 
FROM Persons 
WHERE LastName 
NOT BETWEEN 'Adams' AND 'Carter'

结果集:

IdLastNameFirstNameAddressCity
3CarterThomasChangan StreetBeijing
4GatesBillXuanwumen 10Beijing



SQL Alias(别名)

通过使用 SQL,可以为列名称和表名称指定别名(Alias)。

SQL Alias
表的 SQL Alias 语法:

SELECT column_name(s) FROM table_name AS alias_name

列的 SQL Alias 语法

SELECT column_name AS alias_name FROM table_name

Alias 实例: 使用表名称别名

假设我们有两个表分别是:”Persons”(包含LastName和FirstName) 和 “Product_Orders”(包含OrderID)。我们分别为它们指定别名 “p” 和 “po”。
现在,我们希望列出 “John Adams” 的所有定单。
我们可以使用下面的 SELECT 语句:

SELECT po.OrderID, p.LastName, p.ForstName
FROM Persons AS p, Product_Orders AS po
WHERE p.LastName='Adans' AND p.FirstName='John'

不使用别名的SELECT语句:

SELECT Product_Orders.OrderID, Psersons.LastName, Persons.FirstName
FROM Persons, Product_Orders
WHERE Persons.LastName='Adams' AND Persons.FirstName='John'

从上面两条 SELECT 语句您可以看到,别名使查询程序更易阅读和书写。


Alias 实例: 使用一个列名别名

表 Persons:

IdLastNameFirstNameAddressCity
1AdamsJohnOxford StreetLondon
2BushGeorgeFifth AvenueNew York
3CarterThomasChangan StreetBeijing

SQL:

SELECT LastName AS Family, FirstName AS Name
FROM Persons

期结果为:

FamilyName
AdamsJohn
BushGeorge
CarterThomas

SQL JOIN

SQL join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据。

Join 和 Key
有时为了得到完整的结果,我们需要从两个或更多的表中获取结果。我们就需要执行 join。

数据库中的表可通过键将彼此联系起来。主键(Primary Key)是一个列,在这个列中的每一行的值都是唯一的。在表中,每个主键的值都是唯一的。这样做的目的是在不重复每个表中的所有数据的情况下,把表间的数据交叉捆绑在一起。

请看 “Persons” 表:

Id_PLastNameFirstNameAddressCity
1AdamsJohnOxford StreetLondon
2BushGeorgeFifth AvenueNew York
3CarterThomasChangan StreetBeijing

请注意,”Id_P” 列是 Persons 表中的的主键。这意味着没有两行能够拥有相同的 Id_P。即使两个人的姓名完全相同,Id_P 也可以区分他们。

接下来请看 “
Orders” 表:

Id_OOrderNoId_P
1778953
2446783
3224561
4245621
53476465

请注意,”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

期结果为:

LastNameFirstNameOrderNo
AdamsJohn22456
AdamsJohn24562
CarterThomas77895
CarterThomas44678

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

其结果为:

LastNameFirstNameOrderNo
AdamsJohn22456
AdamsJohn24562
CarterThomas77895
CarterThomas44678

不同的 SQL JOIN

除了我们在上面的例子中使用的
INNER JOIN(内连接),我们还可以使用其他几种连接。

下面列出了您可以使用的 JOIN 类型,以及它们之间的差异。

  • JOIN: 如果表中有至少一个匹配,则返回行
  • LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
  • RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
  • FULL JOIN: 只要其中一个表中存在匹配,就返回行

SQL INNER JOIN 关键字

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

INNER JOIN 关键字语法:

SELECT column_name(s)
FROMR table_name1
INNER JOIN table_name2
ON table_name1.column_name = table_name2.column_name

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

“Persons” 表:

Id_PLastNameFirstNameAddressCity
1AdamsJohnOxford StreetLondon
2BushGeorgeFifth AvenueNew York
3CarterThomasChangan StreetBeijing

“Orders” 表:

Id_OOrderNoId_P
1778953
2446783
3224561
4245621
53476465

内连接(INNER JOIN)实例

现在,我们希望列出所有人的定购。

您可以使用下面的 SELECT 语句:

SELECT Persons.LastName, Psersons.FirstName, Orders.Orders.OrderNo 
FROM Psersons 
INNER JOIN Orders 
ON Persons.Id_P = Orders.Id_P
ORDER BY Persons.LastName

结果集:

LastNameFirstNameOrderNo
AdamsJohn22456
AdamsJohn24562
CarterThomas77895
CarterThomas44678

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.cloumn_name = table_name2.column_name

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

“Persons” 表:

Id_PLastNameFirstNameAddressCity
1AdamsJohnOxford StreetLondon
2BushGeorgeFifth AvenueNew York
3CarterThomasChangan StreetBeijing

“Orders” 表:

Id_OOrderNoId_P
1778953
2446783
3224561
4245621
53476465

左连接(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

结果集:

LastNameFirstNameOrderNo
AdamsJohn22456
AdamsJohn24562
CarterThomas77895
CarterThomas44678
BushGeorge 

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


SQL RIGHT JOIN 关键字

IGHT 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_PLastNameFirstNameAddressCity
1AdamsJohnOxford StreetLondon
2BushGeorgeFifth AvenueNew York
3CarterThomasChangan StreetBeijing

“Orders” 表:

Id_OOrderNoId_P
1778953
2446783
3224561
4245621
53476465

右连接(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

结果集:

LastNameFirstNameOrderNo
AdamsJohn22456
AdamsJohn24562
CarterThomas77895
CarterThomas44678
  34764

RIGHT 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
ORDER BY table_name.cloumn_name

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

“Persons” 表:

Id_PLastNameFirstNameAddressCity
1AdamsJohnOxford StreetLondon
2BushGeorgeFifth AvenueNew York
3CarterThomasChangan StreetBeijing

“Orders” 表:

Id_OOrderNoId_P
1778953
2446783
3224561
4245621
53476465

全连接(FULL JOIN)实例

现在,我们希望列出所有的人,以及他们的定单,以及所有的定单,以及定购它们的人。

您可以使用下面的 SELECT 语句:

SELECT Persons.LastName, Persons.FirstName, Orders.OrdreNo
FROM Persons
FULL JOIN Orders
ON Persons.Id_P = Persons.Id_P
ORDER BY Persons.LastName

结果集:

LastNameFirstNameOrderNo
AdamsJohn22456
AdamsJohn24562
CarterThomas77895
CarterThomas44678
BushGeorge 
  34764

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

    原文作者:SQL
    原文地址: https://blog.csdn.net/zbj18314469395/article/details/79794622
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞