文章標題多表查詢 合併結果集,連線查詢,子查詢

2021-06-29 07:17:00 字數 2059 閱讀 5780

多表查詢

分類:

* 合併結果集

* 連線查詢

* 子查詢

* 要求被合併的表中,列數相同,列的型別要一一對應相同

* 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 交叉聯結又稱笛卡爾積,交叉聯結是對兩張表中的全部記...