承接上文
--------------------------------------------------分割线------------------------------------------------------
In 操作符
in操作符允许我们在where子句中规定多个值
语法如下:
select * from person where lastname in(‘Adams’,‘carter’)
between 操作符
between 操作符在where子句中使用,作用是选取介于两个值之间的数据范围
语法如下:
select * from table where columnname between value1 and value2
Alias(别名)
通过使用SQL,可以为列名称和表名称指定别名
语法如下:
select columnname from table as lias_name
例子:
假设我们有两个表分别是:"Persons" 和 "Product_Orders"。我们分别为它们指定别名 "p" 和 "po"。
现在,我们希望列出 "John Adams" 的所有定单。我们可以使用下面的 SELECT 语句
SELECT po.OrderID, p.LastName, p.FirstNameFROM Persons AS p, Product_Orders AS po |
WHERE p.LastName='Adams' AND p.FirstName='John'
|
SQL Join语句
用于根据两个或者多个表中的列之间的关系,从这些表中查询数据
Join 和 Key
有时为了得到完整的结果,我们需要从两个或更多的表中获取结果。我们就需要执行 join。
数据库中的表可通过键将彼此联系起来。主键(Primary Key)是一个列,在这个列中的每一行的值都是唯一的。在表中,每个主键的值都是唯一的。这样做的目的是在不重复每个表中的所有数据的情况下,把表间的数据交叉捆绑在一起。
请注意,"Id_P" 列是 Persons 表中的的主键。这意味着没有两行能够拥有相同的 Id_P。即使两个人的姓名完全相同,Id_P 也可以区分他们。
接下来请看order表
请注意,"Id_O" 列是 Orders 表中的的主键,同时,"Orders" 表中的 "Id_P" 列用于引用 "Persons"表中的人,而无需使用他们的确切姓名。
请留意,"Id_P" 列把上面的两个表联系了起来。
从两个表获取数据,有如下方法:
比如: 谁订购列产品,并且他们订购列什么产品?
select p.lastname,p.firstname,o.orderno from persons as p,orders as o where p.Id_p =o.Id_p
除了上边的这个方法,我们也可以使用join来从两个表中获取数据
select p.lastname, p.firstname,o.orderno from persons as p Inner Join orders as o on p.Id_p=o.Id_p
Join 类型,以及它们之间的差异(inner join)
join: 如果表中至少有一个匹配,则返回行
left join: 即使右表没有匹配,也从左表返回所有的行
right join:即使左表没有匹配,也从右表返回所有的行
full join :只要其中一个表中存在匹配,就返回行。
左表:就是第一个使用的表,右表: 是我们第二个使用的表。
left join 关键字
left join 从左表(table_name1)那里返回所有的行,即使在右表(table_name2)中没有匹配的行。
一图胜千言:
举例如下:
person表:
order表如下:
我们现在希望列出所有的人,以及他们的订购-如果有的话。
select p.lastname,p.firstname,o.orderno from persons as p Left join orders as o
on p.Id_p=o.Id_p order by p.lastname
结果集如下:
从结果集中,我们可以看到,即使右表没有匹配的行,也把左表的所有行都返回列。
right join 正好和left join 相反。此处不再赘述。
full join 是综合了left 和right join的两个链接,返回两个表的所有行,即使没有匹配。