一、连接查询
本文中以r和s两个表为例,进行操作。
r表:
s表:
1、INNER JOIN
内连接:在查询的几个表中,每个表都存在至少一个匹配时,INNER JOIN 关键字返回行。也就是共有部分,即,几个表的交集。
SELECT A,r.B,C,E
FROM r INNER JOIN s
ON r.B=s.B;
查询结果:
2、LEFT JOIN
左连接:返回左表中的所有的行,如果右表有不匹配的行,则直接填充为NULL。
SELECT A,r.B,C,E
FROM r LEFT JOIN s
ON r.B=s.B;
查询结果:
3、RIGHT JOIN
右连接:返回右表中的所有的行,如果左表有不匹配的行,则直接填充为NULL。
SELECT A,r.B,C,E
FROM r RIGHT JOIN s
ON r.B=s.B;
二、组合查询
可用UNION操作符来组合数条SQL查询,其使用方法很简单,所需的只是给出每条SELECT语句,在各条语句之间放上UNION即可。
SELECT B
FROM r
WHERE C>5
UNION
SELECT B
FROM s;
查询结果:
在简单的例子中,使用UNION会比使用WHERE子句更复杂,但是对于更加复杂的过滤条件,使用UNION可能会使得处理更加简单。
UNION使用规则:
1)UNOIN必须由两条或两条以上的SELECT语句组成,语句之间用关键字UNION分隔。
2)UNION中的每个查询语句必须包含相同的列、表达式或聚集函数,但是各个列的次序不需要相同。
3)列数据类型必须兼容,类型可以不同,但必须是DBMS可以隐含的转换的类型。
从之前的查询结果可以看出,UNION自动删除了重复的行,如果想要返回所有的匹配行,可以使用UNION ALL。
SELECT B
FROM r
WHERE C>5
UNION ALL
SELECT B
FROM s;
查询结果:
注:在使用UNION组合查询时,只能使用一条ORDER BY子句,它必须出现在最后一条SELECT语句之后,而且排序结果是对整个查询结果进行的排序;不存在使用一种方式排序一部分,而又使用另一种方式排序另一部分的情况。
参考《数据库系统概论》和《MySQL必知必会》