MySQL數(shù)據(jù)庫(kù)之union,limit和子查詢?cè)斀?/h1>
更新時(shí)間:2022年07月25日 08:45:24 作者:世界盡頭與你
這篇文章主要為大家詳細(xì)介紹一下MySQL數(shù)據(jù)庫(kù)中union、limit和子查詢的使用,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)MySQL有一定幫助,需要的可以參考一下
1.where中的子查詢
案例:查詢比最低工資高的員工姓名和薪資
子查詢,先查詢子查詢括號(hào)里的,再向上級(jí)進(jìn)行查詢
mysql> select ename,sal from emp where sal
-> >
-> (select min(sal) from emp);
+--------+---------+
| ename | sal |
+--------+---------+
| ALLEN | 1600.00 |
| WARD | 1250.00 |
| JONES | 2975.00 |
| MARTIN | 1250.00 |
| BLAKE | 2850.00 |
| CLARK | 2450.00 |
| SCOTT | 3000.00 |
| KING | 5000.00 |
| TURNER | 1500.00 |
| ADAMS | 1100.00 |
| JAMES | 950.00 |
| FORD | 3000.00 |
| MILLER | 1300.00 |
+--------+---------+
13 rows in set (0.02 sec)
2.from子句后的子查詢
from后面的子查詢,可以將子查詢的查詢結(jié)果當(dāng)作一張臨時(shí)表來(lái)看待
案例:找出每個(gè)崗位的平均薪資的薪資等級(jí)
mysql> select
-> t.*,s.grade
-> from
-> (select job,avg(sal) as avgsal from emp group by job) t
-> join salgrade s
-> on
-> t.avgsal between s.losal and s.hisal;
+-----------+-------------+-------+
| job | avgsal | grade |
+-----------+-------------+-------+
| CLERK | 1037.500000 | 1 |
| SALESMAN | 1400.000000 | 2 |
| MANAGER | 2758.333333 | 4 |
| ANALYST | 3000.000000 | 4 |
| PRESIDENT | 5000.000000 | 5 |
+-----------+-------------+-------+
5 rows in set (0.00 sec)
3.union
MySQL UNION 操作符用于連接兩個(gè)以上的 SELECT 語(yǔ)句的結(jié)果組合到一個(gè)結(jié)果集合中。多個(gè) SELECT 語(yǔ)句會(huì)刪除重復(fù)的數(shù)據(jù)。
MySQL UNION 操作符語(yǔ)法格式:
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];
參數(shù)
- expression1, expression2, ... expression_n: 要檢索的列。
- tables: 要檢索的數(shù)據(jù)表。
- WHERE conditions: 可選, 檢索條件。
- DISTINCT: 可選,刪除結(jié)果集中重復(fù)的數(shù)據(jù)。默認(rèn)情況下 UNION 操作符已經(jīng)刪除了重復(fù)數(shù)據(jù),所以 DISTINCT修飾符對(duì)結(jié)果沒啥影響。
- ALL: 可選,返回所有結(jié)果集,包含重復(fù)數(shù)據(jù)。
案例:查詢工作崗位為MANAGER或者SALESMAN的員工信息(使用union)
mysql> select ename,job from emp where job = 'MANAGER'
-> union
-> select ename,job from emp where job = 'SALESMAN';
+--------+----------+
| ename | job |
+--------+----------+
| JONES | MANAGER |
| BLAKE | MANAGER |
| CLARK | MANAGER |
| ALLEN | SALESMAN |
| WARD | SALESMAN |
| MARTIN | SALESMAN |
| TURNER | SALESMAN |
+--------+----------+
7 rows in set (0.00 sec)
為什么使用union而不是or邏輯運(yùn)算?因?yàn)閡nion效率更高!
另外,對(duì)于表連接來(lái)說(shuō),如果有恰當(dāng)?shù)膗nion語(yǔ)句可以操作與之相同的效果,優(yōu)先使用union操作
union使用注意:
查詢的兩個(gè)結(jié)果集列數(shù)必須相同
在Mysql中列的數(shù)據(jù)類型可以存在差異,但是在Oracle中則不可以
4.limit查詢
limit用于限制結(jié)果集的長(zhǎng)度
后面可以存在一個(gè)參數(shù)或者兩個(gè)參數(shù)(起始下標(biāo),取數(shù)據(jù)條數(shù))
案例:按照薪資降序取出排名前5的員工信息
mysql> select ename,sal
-> from emp
-> order by sal desc
-> limit 0,5;
+-------+---------+
| ename | sal |
+-------+---------+
| KING | 5000.00 |
| FORD | 3000.00 |
| SCOTT | 3000.00 |
| JONES | 2975.00 |
| BLAKE | 2850.00 |
+-------+---------+
5 rows in set (0.00 sec)
limit在order by之后執(zhí)行
5.分頁(yè)
假設(shè)每頁(yè)要訪問y條數(shù)據(jù),那么第x頁(yè)的數(shù)據(jù)就是
limit((x-1)*y,y)
以上就是MySQL數(shù)據(jù)庫(kù)之union,limit和子查詢?cè)斀獾脑敿?xì)內(nèi)容,更多關(guān)于MySQL union limit 子查詢的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
-
一篇文章弄懂MySQL查詢語(yǔ)句的執(zhí)行過(guò)程
這篇文章主要給大家介紹了如何通過(guò)一篇文章弄懂MySQL查詢語(yǔ)句的執(zhí)行過(guò)程的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧 2021-05-05
-
MySQL常見的底層優(yōu)化操作教程及相關(guān)建議
這篇文章主要介紹了MySQL常見的底層優(yōu)化操作教程及相關(guān)建議,包括對(duì)運(yùn)行操作系統(tǒng)的硬件方面及存儲(chǔ)引擎參數(shù)的調(diào)整等零碎方面的小整理,需要的朋友可以參考下 2015-12-12
-
修改MySQL數(shù)據(jù)庫(kù)中表和表中字段的編碼方式的方法
這篇文章主要介紹了如何修改MySQL數(shù)據(jù)庫(kù)中表和表中字段的編碼方式,需要的朋友可以參考下 2014-05-05
-
通過(guò)實(shí)例分析MySQL中的四種事務(wù)隔離級(jí)別
SQL標(biāo)準(zhǔn)定義了4種隔離級(jí)別,包括了一些具體規(guī)則,用來(lái)限定事務(wù)內(nèi)外的哪些改變是可見的,哪些是不可見的。下面這篇文章通過(guò)實(shí)例詳細(xì)的給大家分析了關(guān)于MySQL中的四種事務(wù)隔離級(jí)別的相關(guān)資料,需要的朋友可以參考下。 2017-08-08
-
MySQL中union和join語(yǔ)句使用區(qū)別的辨析教程
這篇文章主要介紹了MySQL中union和join語(yǔ)句的用法區(qū)別,舉例說(shuō)明了union和join在連接操作上的不同作用,需要的朋友可以參考下 2015-12-12
最新評(píng)論
1.where中的子查詢
案例:查詢比最低工資高的員工姓名和薪資
子查詢,先查詢子查詢括號(hào)里的,再向上級(jí)進(jìn)行查詢
mysql> select ename,sal from emp where sal -> > -> (select min(sal) from emp); +--------+---------+ | ename | sal | +--------+---------+ | ALLEN | 1600.00 | | WARD | 1250.00 | | JONES | 2975.00 | | MARTIN | 1250.00 | | BLAKE | 2850.00 | | CLARK | 2450.00 | | SCOTT | 3000.00 | | KING | 5000.00 | | TURNER | 1500.00 | | ADAMS | 1100.00 | | JAMES | 950.00 | | FORD | 3000.00 | | MILLER | 1300.00 | +--------+---------+ 13 rows in set (0.02 sec)
2.from子句后的子查詢
from后面的子查詢,可以將子查詢的查詢結(jié)果當(dāng)作一張臨時(shí)表來(lái)看待
案例:找出每個(gè)崗位的平均薪資的薪資等級(jí)
mysql> select -> t.*,s.grade -> from -> (select job,avg(sal) as avgsal from emp group by job) t -> join salgrade s -> on -> t.avgsal between s.losal and s.hisal; +-----------+-------------+-------+ | job | avgsal | grade | +-----------+-------------+-------+ | CLERK | 1037.500000 | 1 | | SALESMAN | 1400.000000 | 2 | | MANAGER | 2758.333333 | 4 | | ANALYST | 3000.000000 | 4 | | PRESIDENT | 5000.000000 | 5 | +-----------+-------------+-------+ 5 rows in set (0.00 sec)
3.union
MySQL UNION 操作符用于連接兩個(gè)以上的 SELECT 語(yǔ)句的結(jié)果組合到一個(gè)結(jié)果集合中。多個(gè) SELECT 語(yǔ)句會(huì)刪除重復(fù)的數(shù)據(jù)。
MySQL UNION 操作符語(yǔ)法格式:
SELECT expression1, expression2, ... expression_n FROM tables [WHERE conditions] UNION [ALL | DISTINCT] SELECT expression1, expression2, ... expression_n FROM tables [WHERE conditions];
參數(shù)
- expression1, expression2, ... expression_n: 要檢索的列。
- tables: 要檢索的數(shù)據(jù)表。
- WHERE conditions: 可選, 檢索條件。
- DISTINCT: 可選,刪除結(jié)果集中重復(fù)的數(shù)據(jù)。默認(rèn)情況下 UNION 操作符已經(jīng)刪除了重復(fù)數(shù)據(jù),所以 DISTINCT修飾符對(duì)結(jié)果沒啥影響。
- ALL: 可選,返回所有結(jié)果集,包含重復(fù)數(shù)據(jù)。
案例:查詢工作崗位為MANAGER或者SALESMAN的員工信息(使用union)
mysql> select ename,job from emp where job = 'MANAGER' -> union -> select ename,job from emp where job = 'SALESMAN'; +--------+----------+ | ename | job | +--------+----------+ | JONES | MANAGER | | BLAKE | MANAGER | | CLARK | MANAGER | | ALLEN | SALESMAN | | WARD | SALESMAN | | MARTIN | SALESMAN | | TURNER | SALESMAN | +--------+----------+ 7 rows in set (0.00 sec)
為什么使用union而不是or邏輯運(yùn)算?因?yàn)閡nion效率更高!
另外,對(duì)于表連接來(lái)說(shuō),如果有恰當(dāng)?shù)膗nion語(yǔ)句可以操作與之相同的效果,優(yōu)先使用union操作
union使用注意:
查詢的兩個(gè)結(jié)果集列數(shù)必須相同
在Mysql中列的數(shù)據(jù)類型可以存在差異,但是在Oracle中則不可以
4.limit查詢
limit用于限制結(jié)果集的長(zhǎng)度
后面可以存在一個(gè)參數(shù)或者兩個(gè)參數(shù)(起始下標(biāo),取數(shù)據(jù)條數(shù))
案例:按照薪資降序取出排名前5的員工信息
mysql> select ename,sal -> from emp -> order by sal desc -> limit 0,5; +-------+---------+ | ename | sal | +-------+---------+ | KING | 5000.00 | | FORD | 3000.00 | | SCOTT | 3000.00 | | JONES | 2975.00 | | BLAKE | 2850.00 | +-------+---------+ 5 rows in set (0.00 sec)
limit在order by之后執(zhí)行
5.分頁(yè)
假設(shè)每頁(yè)要訪問y條數(shù)據(jù),那么第x頁(yè)的數(shù)據(jù)就是
limit((x-1)*y,y)
以上就是MySQL數(shù)據(jù)庫(kù)之union,limit和子查詢?cè)斀獾脑敿?xì)內(nèi)容,更多關(guān)于MySQL union limit 子查詢的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
一篇文章弄懂MySQL查詢語(yǔ)句的執(zhí)行過(guò)程
這篇文章主要給大家介紹了如何通過(guò)一篇文章弄懂MySQL查詢語(yǔ)句的執(zhí)行過(guò)程的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05MySQL常見的底層優(yōu)化操作教程及相關(guān)建議
這篇文章主要介紹了MySQL常見的底層優(yōu)化操作教程及相關(guān)建議,包括對(duì)運(yùn)行操作系統(tǒng)的硬件方面及存儲(chǔ)引擎參數(shù)的調(diào)整等零碎方面的小整理,需要的朋友可以參考下2015-12-12修改MySQL數(shù)據(jù)庫(kù)中表和表中字段的編碼方式的方法
這篇文章主要介紹了如何修改MySQL數(shù)據(jù)庫(kù)中表和表中字段的編碼方式,需要的朋友可以參考下2014-05-05通過(guò)實(shí)例分析MySQL中的四種事務(wù)隔離級(jí)別
SQL標(biāo)準(zhǔn)定義了4種隔離級(jí)別,包括了一些具體規(guī)則,用來(lái)限定事務(wù)內(nèi)外的哪些改變是可見的,哪些是不可見的。下面這篇文章通過(guò)實(shí)例詳細(xì)的給大家分析了關(guān)于MySQL中的四種事務(wù)隔離級(jí)別的相關(guān)資料,需要的朋友可以參考下。2017-08-08MySQL中union和join語(yǔ)句使用區(qū)別的辨析教程
這篇文章主要介紹了MySQL中union和join語(yǔ)句的用法區(qū)別,舉例說(shuō)明了union和join在連接操作上的不同作用,需要的朋友可以參考下2015-12-12