天天看点

内连接·外连接·UNION联结UNION

联结

内连接——查询出来的结果肯定会满足所有的条件

自连接

select p1.prod_id,p1.prod_name 
from product AS p1,product AS p2
where p1.vend_id = p2.vend_id and p2.prod_id = 'DNTRY'
           

自然连接——两张表中的名称和类型完全一致的列进行内连接

  • 自然连接不必指定任何连接条件,自动连接两张表中相同名称的所有列。
  • 如果两张表中有相同名字的列,但是数据类型不一致,如果能隐式转换,则能正常连接,但如果隐式转换不成功,则报错。
  • 使用自然连接时,不能使用表名或表的别名修饰列。
select * from emp natural join dept;
           

外连接——查询出来的结果存在不满足条件的可能

左/右外连接(全外连接 mysql不支持)

select columns from table1 left/right join table2 on table1.col = table2.col;
           

笛卡儿积(cartesian product)

由没有联结条件的表关系返回的结果为笛卡儿积。检索出的行的数目将是第一个表中的行数乘以第二个表中的行数。

UNION

  • 至少2个select
  • 2个select查询列数一致,顺序不要求
  • 数据类型兼容
UNION查询结果,默认情况——重复的行被自动取消
若要结果包含重复行,使用UNION ALL

如果确实需要每个条件的匹配行全部出现(包括重复行),则必须使用UNION ALL而不是WHERE

结果排序

* 在用UNION组合查询时,只能使用一条ORDER BY子句,它必须出现在最后一条SELECT语句之后。
* 对于结果集,不存在用一种方式排序一部分,而又用另一种方式排序另一 部分的情况
* 因此不允许使用多条ORDER BY子句