A表(Aid,Asub,Asco) B表(Bid,Bname)
Aid Asub Asco Bid Bname
01 数学 95 01 张三
02 语文 90 02 李四
03 英语 80 04 王五
(左连接)
select A.*,B.* from A
left outer join B on(A.Aid=B.Bid)
结果是:
Aid Asub Asco Bid Bname
01 数学 95 01 张三
02 语文 90 02 李四
03 英语 80 NULL NULL
(右连接)
select A.*,B.* from A
right outer join B on(A.Aid=B.Bid)
结果是:
Aid Asub Asco Bid Bname
01 数学 95 01 张三
02 语文 90 02 李四
Aid Asub Asco Bid Bname
01 数学 95 01 张三
02 语文 90 02 李四
03 英语 80 04 王五
(左连接)
select A.*,B.* from A
left outer join B on(A.Aid=B.Bid)
结果是:
Aid Asub Asco Bid Bname
01 数学 95 01 张三
02 语文 90 02 李四
03 英语 80 NULL NULL
(右连接)
select A.*,B.* from A
right outer join B on(A.Aid=B.Bid)
结果是:
Aid Asub Asco Bid Bname
01 数学 95 01 张三
02 语文 90 02 李四
NULL NULL NULL 04 王五
简言之
左连接,显示左边表的所有行
右连接,显示右边表的所有行
外连接,显示所有表的所有行 (mysql中没有)
内连接,显示能连接的所有行
Union: 联合
作用: 把2次或多次查询结果合并起来
要求: 两次查询的列数一致
推荐; 查询的每一列,相对应的列类型也一样.
可以来自于多张表
多次sql语句取出的列名可以不一致,此时,以第1个sql的列名为准
如果不同的语句中取出的行, 有完全相同(每个列的值都相同),
那么相同的行将会合并.(去重复)
如果不去重复,可以加all来指定
如果子句中有order by ,limit, 须加(), 推荐放到 所有子句之后,即--对最终合并后的结果来排序.
在子句中, order by 配合limit使用才有意义, 如果order by 不配合limit使用, 会被语法分析器优化分析时,去除.