7、組合查詢union

組合查詢union

組合查詢也叫復(fù)合查詢

1、使用場景

以下兩種情況中,可使用組合查詢

  • 在單個查詢中從不同的表返回類似結(jié)構(gòu)的數(shù)據(jù)
  • 對單個表進(jìn)行多次查詢,按單次查詢返回?cái)?shù)據(jù)

多數(shù)情況下,組合相同表的多次查詢,union與where能完成相同工作,但兩者性能不同,應(yīng)視具體情況二選擇

2、使用舉例

#查出職位是clerk或者在10部門工作的員工
#步驟1,查出clerk的員工

MariaDB> select ename,job,deptno from emp where job='clerk';
+--------+-------+--------+
| ename  | job   | deptno |
+--------+-------+--------+
| SIMITH | CLERK |     20 |
| ADAMS  | CLERK |     20 |
| JAMES  | CLERK |     30 |
| MILLER | CLERK |     10 |
+--------+-------+--------+
4 rows in set (0.000 sec)

#步驟2,查出10部分的員工

MariaDB> select ename,job,deptno from emp where deptno='10';
+--------+-----------+--------+
| ename  | job       | deptno |
+--------+-----------+--------+
| CLARK  | MANAGER   |     10 |
| KING   | PRESIDENT |     10 |
| MILLER | CLERK     |     10 |
+--------+-----------+--------+
3 rows in set (0.000 sec)

#直接組合查詢
MariaDB> select ename,job,deptno from emp where job='clerk'
         union
         select ename,job,deptno from emp where deptno='10';
+--------+-----------+--------+
| ename  | job       | deptno |
+--------+-----------+--------+
| SIMITH | CLERK     |     20 |
| ADAMS  | CLERK     |     20 |
| JAMES  | CLERK     |     30 |
| MILLER | CLERK     |     10 |
| CLARK  | MANAGER   |     10 |
| KING   | PRESIDENT |     10 |
+--------+-----------+--------+
6 rows in set (0.001 sec)

#不去重,返回所有行,可以使用union all

MariaDB> select ename,job,deptno from emp where job='clerk'
         union all
         select ename,job,deptno from emp where deptno='10';
+--------+-----------+--------+
| ename  | job       | deptno |
+--------+-----------+--------+
| SIMITH | CLERK     |     20 |
| ADAMS  | CLERK     |     20 |
| JAMES  | CLERK     |     30 |
| MILLER | CLERK     |     10 |
| CLARK  | MANAGER   |     10 |
| KING   | PRESIDENT |     10 |
| MILLER | CLERK     |     10 |
+--------+-----------+--------+
7 rows in set (0.001 sec)

#使用where查詢

MariaDB> select ename,job,deptno from emp where job='clerk' or deptno='10';
+--------+-----------+--------+
| ename  | job       | deptno |
+--------+-----------+--------+
| SIMITH | CLERK     |     20 |
| CLARK  | MANAGER   |     10 |
| KING   | PRESIDENT |     10 |
| ADAMS  | CLERK     |     20 |
| JAMES  | CLERK     |     30 |
| MILLER | CLERK     |     10 |
+--------+-----------+--------+
6 rows in set (0.000 sec)

從以上結(jié)果可以看出,union會自動過濾重復(fù)的記錄,若想展示全部數(shù)據(jù),則可以使用union all
另外,在一些where語句比較復(fù)雜的情況下,可以直接用union進(jìn)行查詢,可以簡化語句,更利于程序的閱讀

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容