多表查詢
分類:
* 合併結果集
* 連線查詢
* 子查詢
* 要求被合併的表中,列數相同,列的型別要一一對應相同
* union,去除重複行
* union all,不去除重複行
例: select * from table1 union select * from table2;
select * from table1 union all select * from table2;
分類
* 內連線
* 外連線
> 左外連線
> 右外連線
> 全外連線(mysql不支援)
* 自然連線(屬於一種簡化方式)
1. 內連線
* 方言:select * from 表1 別名1, 表2 別名2 where 別名1.xx=別名2.xx(mysql可以)
* 標準:select * from 表1 別名1 inner join 表2 別名2 on 別名1.xx=別名2.xx
* 自然:select * from 表1 別名1 natural join 表2 別名2
自動通過兩張表的相同列進行匹配,相同列只顯示一列
* 內連線查詢出的所有記錄都滿足條件。不滿足條件的丟掉
注意:where後面的條件叫做關聯條件。
多表查詢一定要去除笛卡爾積,用關聯條件去除
2. 外連線
* 左外:select * from 表1 別名1 left outer join 表2 別名2 on 別名1.xx=別名2.xx//座標所有記錄都顯示,沒有對應的右表則右表以null補充
* 左外自然:select * from 表1 別名1 natural left outer join 表2 別名2;
* 右外:select * from 表1 別名1 right outer join 表2 別名2 on 別名1.xx=別名2.xx
* 右外自然:select * from 表1 別名1 natural right outer join 表2 別名2;
1. 出現的位置:
* where後作為條件存在
* from後作為表存在(一般為多行多列)
2. 條件
***** 單行單列:select * from 表1 別名1 where 列1 [=、>、<、>=、<=、!=] (select 列 from 表2 別名2 where 條件)
*** 多行單列:select * from 表1 別名1 where 列1 [in, all, any] (select 列 from 表2 別名2 where 條件)
select * from 表名 where 列 > any (select . . . .) where 條件
** 單行多列:select * from 表1 別名1 where (列1,列2) in (select 列1, 列2 from 表2 別名2 where 條件)//where和子表中對應列數相同
**** 多行多列:select * from 表1 別名1 , (select ....) 別名2 where 條件
注意:多表查詢要找關聯條件,on後面跟關聯條件
查出至少有乙個員工的部門。顯示部門編號、部門名稱、部門位置、部門人數。
列出薪金比關羽高的所有員工。
列出所有員工的姓名及其直接上級的姓名。
列出受僱日期早於直接上級的所有員工的編號、姓名、部門名稱。
列出部門名稱和這些部門的員工資訊,同時列出那些沒有員工的部門。
列出所有文員的姓名及其部門名稱,部門的人數。
列出最低薪金大於15000的各種工作及從事此工作的員工人數。
列出在銷售部工作的員工的姓名,假定不知道銷售部的部門編號。
列出薪金高於公司平均薪金的所有員工資訊,所在部門名稱,上級領導,工資等級。
10.列出與龐統從事相同工作的所有員工及部門名稱。
11.列出薪金高於在部門30工作的所有員工的薪金的員工姓名和薪金、部門名稱。
12.列出每個部門的員工數量、平均工資。
關於SQL查詢語句合併結果集
整理別人的sql 大概的思想是用union 和union all 合併重複行 select from a union select from b 不合併重複行 select from a union all select from b 按某個字段排序 合併重複行 select from select...
模糊查詢和排序後合併查詢結果集
今天需要做乙個查詢,當天時間按時間降序排列排在最前面,然後是其他的按時間降序排列排在當天的時間後面。select from select from table where time like 2015 11 16 order by time desc a union all select from ...
mysql 兩個查詢結果合併去重 SQL多表查詢
知識框架 1.表的加法 union 去重 union將兩個表的資料按行合併在一起,兩個表重複的資料只保留乙個 union all 不去重 union all將兩個表的資料按行合併在一起並保留重複行。2.表的聯結 2.1.交叉聯結cross join 交叉聯結又稱笛卡爾積,交叉聯結是對兩張表中的全部記...