Mysql子查詢 UNION操作

2021-07-24 19:08:27 字數 1694 閱讀 3301

1.where型子查詢

指把內層查詢的結果作為外層查詢結果的比較條件。

例如:我們查詢乙個貨物id的最大的那乙個值可以通過order by來查詢,如:

那麼,如果不能用order by呢,我們可以用where子查詢來解決:

和group by組合成的子查詢:select goods_id,cat_id,goods_name from goods where goods_id in (select max(goods_id) from goods group by cat_id);     需要用in

2.from型子查詢

把內層的查詢結果當成臨時表,供外層sql再次查詢

舉例:select * from (select goods_id,cat_id, goods_name from goods order by cat_id ,goods_id desc) as tmp group by cat_id;

3.exist型子查詢

把外層的查詢結果拿到內層看內層的查詢是否成立。

比如:select * from category where exist (select * from goods where goods.cat_id  = category.cat_id); 把select * from category查詢的結果帶入內層判斷是否成立,成立就輸出

字面意思就是合併,舉個最簡單的例子:

select goods_id,goods_name,shop_price from goods where shop_price > 5000 union select goods_id,goods_name,shop_price from goods where shop_price < 20;

合併了兩個select產生的結果。

要求:兩次查詢的列數一致就行,列名可以不一樣。

可來自於多張表。

多次sql語句取出的列名可以不一致,此時以第乙個sql的列名為準。

如果不同的語句中取出的行,有完全相同(每個列的值都相同),那麼相同的行會合併成一行,去重複。如果不去重複,可以加all來指定。

比如:

假設表ta和tb分別是上圖左右兩個表,那麼執行select id, sum(num) from ta group by id union select id, sum(num) from tb group by id; 

結果會出現錯誤,因為由於b在兩個表中值相同,那對兩個表使用union,b這一項會直接被消重,只留下乙個。

如果子句中有order by, limit 需加括號。推薦放到所有子句之後,即對最終的結果進行排序。

在子句中order by配合limit使用才有意義。如果order by不配合limit使用,會被語法分析器優化時去除。

MySQL組合查詢UNION

組合查詢 union,放在兩個select語句之間,如果有n個select語句,則用n 1個union.重複行也出現 union all 排序 order by 寫在所有select語句最後,只用一次。union可簡化where語句 union適合用於查詢多個表的情況下。多個查詢 多條select語...

mysql聯合查詢union

將多條查詢結果合併成乙個結果 查詢語句1 union all 查詢語句2 查詢部門編號 90或郵箱包含a的員工資訊 select from employees where email like a or department id 90 或者 select from employees where ...

MySql 高階查詢 union 聯合查詢

1.union 聯合查詢 將多個查詢結果集合到一起 2.語法 select 查詢語句 union select 查詢語句 union select 查詢語句 union select 查詢語句 3.例子 查詢學生資訊和班級資訊,集合到一起 select class id,class name,cla...