连接查询 P51-58看完了
distinct
- 把查询结果去除重复记录
- 注意!:团表不会修改,改的只是视图
- distinct只能出现在字段的最前方
什么是连接查询
单独查一张表的数据叫单表查询 两张表联合起来查询数据,从一个表取列,从另一个表取另一列。这种跨表查询,多张表联合起来查询数据,被称为连接查询。
连接查询的分类
内连接:(能够完全匹配上的连接,两张表是平等的,没有谁主谁次)
- 等值连接
- 非等值连接
- 自连接 外连接:
- 左外连接(左连接)
- 右外连接(右连接)
笛卡尔积现象
当没有任何条件去约束时,连接两张表会把每一项都连接起来 表一数* 表二数 那么如何避免笛卡尔积现象?,用一个项给他们连接起来,(但是实际上底层该找多少次还是找多少次,只不过结果只返回那么多)表要起别名,比较简单
尽量避免太多的表的连接次数,效率太低
等值连接
99的语法,SELECT * FROM A JOIN B ON XXX 把表连接的限制条件改成了join on,和where区分开
join前面可以加个inner,不过可以省略,好处是有他可也认为他是内连接
非等值连接
条件不是一个等值关系,称为非等值连接
- 比如在两个条件之间(比如薪资)用 x between a and b
自连接
把自己的这一张表看成两张表
外连接
就是如果有不匹配但是还是想输出出来的话,就用外连接,分为左右连接,而且都可以写成互相的写法
就是from a right join b 就是主要输出b,然后顺便关联查询左边那个表
相同的,外连接也有一个可写可不写的outer 在right/left后面 只为了可读性
多表联查
就是join on join on join on 什么时候该用内连接,什么时候该用外连接 注意好