MySQL的復合查詢功能實現(xiàn)
到這里,我們已經(jīng)學會了如何在一張表中進行各種查詢。但請大家思考一個問題:真實的工程項目中,我們面對的真的只是單張孤立的數(shù)據(jù)表嗎?顯然不是。訂單信息可能關(guān)聯(lián)用戶表,成績查詢需要聯(lián)立課程表……單表查詢固然基礎(chǔ),卻難以應對這些現(xiàn)實場景。因此,為了讓查詢真正“活”起來,我們將進入下一個核心篇章 —— MySQL 復合查詢
1.基本查詢回顧


1.查詢工資高于2000或崗位為MANAGER的雇員,同時還要滿足他們的姓名首字母為大寫的J

2.按照部門號升序而雇員的工資降序排

3.使用年薪進行降序排序

4.顯示工資最高的員工的名字和工作崗位

5.顯示工資高于平均工資的員工信息

6.顯示每個部門的平均工資和最高工資

7.顯示平均工資低于2000的部門號和它的平均工資

在 SQL 中看到的 HAVING 平均工資 <= 2000 其實是一種 MySQL 對標準 SQL 的擴展,它允許在 HAVING 子句中直接使用 SELECT 中定義的列別名(比如這里的 平均工資)。
不過,從 SQL 的邏輯執(zhí)行順序來看,這并不符合標準的運算順序,所以容易讓人困惑,所以最好不要這么寫,直接寫avg(sal)更好
8.顯示每種崗位的雇員總數(shù),平均工資

2.多表查詢
實際開發(fā)中往往數(shù)據(jù)來自不同的表,所以需要多表查詢。本節(jié)我們用一個簡單的公司管理系統(tǒng),有三張表EMP,DEPT,SALGRADE來演示如何進行多表查詢。
案例:
顯示雇員名、雇員工資以及所在部門的名字因為上面的數(shù)據(jù)來自EMP和DEPT表,因此要聯(lián)合查詢



1.顯示部門號為10的部門名,員工名和工資

2.顯示各個員工的姓名,工資,及工資級別

3.自連接
自連接是指在同一張表連接查詢
案例:
顯示員工FORD的上級領(lǐng)導的編號和姓名(mgr是員工領(lǐng)導的編號--empno)
1.使用的子查詢

2.使用多表查詢(自查詢)
-- 使用到表的別名
--from emp leader, emp worker,給自己的表起別名,因為要先做笛卡爾積,所以別名可以先識別

4.子查詢
子查詢是指嵌入在其他sql語句中的select語句,也叫嵌套查詢
1.單行子查詢
顯示SMITH同一部門的員工

2.多行子查詢
1.IN關(guān)鍵字
- 作用:判斷某個值是否在子查詢返回的多行結(jié)果列表中
- 典型場景:查找與指定集合匹配的記錄
- 示例:查詢和 10 號部門工作崗位相同的雇員,但排除 10 號部門自己

2.ALL關(guān)鍵字
- 作用:與比較運算符(
>、<、=等)配合,表示比子查詢返回的所有值都大/小/相等** - 典型場景:查找超過某一組中所有記錄某個字段的值(例如比某部門所有人都高)
- 示例:顯示工資比 部門 30 的所有員工 的工資都高的員工(即工資大于部門 30 的最高工資)

3.ANY關(guān)鍵字(有些數(shù)據(jù)庫也支持SOME)
- 作用:與比較運算符配合,表示比子查詢返回的任意一個值大/小/相等(即至少滿足一個)
- 典型場景:查找超過某一組中至少一個人的某個字段(例如比部門 30 中工資最低的人高)
- 你的示例:顯示工資比部門 30 的任意一個員工的工資高的員工(即大于部門 30 的最低工資即可,包括自己部門的員工)

3.多列子查詢
單行子查詢是指子查詢只返回單列,單行數(shù)據(jù);多行子查詢是指返回單列多行數(shù)據(jù),都是針對單列而言的,而多列子查詢則是指查詢返回多個列數(shù)據(jù)的子查詢語句
案例:查詢和SMITH的部門和崗位完全相同的所有雇員,不含SMITH本人

4.在from子句中使用子查詢
子查詢語句出現(xiàn)在from子句中。這里要用到數(shù)據(jù)查詢的技巧,把一個子查詢當做一個臨時表使用
1.顯示每個高于自己部門平均工資的員工的姓名、部門、工資、平均工資

2.查找每個部門工資最高的人的姓名、工資、部門、最高工資

3.顯示每個部門的信息(部門名,編號,地址)和人員數(shù)量

5.合并查詢
在實際應用中,為了合并多個select的執(zhí)行結(jié)果,可以使用集合操作符 union,union all
1.union
該操作符用于取得兩個結(jié)果集的并集。當使用該操作符時,會自動去掉結(jié)果集中的重復行
案例:將工資大于2500或職位是MANAGER的人找出來

2.union all
該操作符用于取得兩個結(jié)果集的并集。當使用該操作符時,不會去掉結(jié)果集中的重復行
案例:將工資大于25000或職位是MANAGER的人找出來

好啦,這就是有關(guān)MySQL的復合查詢的內(nèi)容啦,我們下篇博客不見不散啦(五一快樂>W<)
到此這篇關(guān)于MySQL的復合查詢的文章就介紹到這了,更多相關(guān)mysql復合查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
linux 下配置安裝mysql以及配置【經(jīng)驗】
這篇文章主要介紹了linux 下配置安裝mysql以及配置【經(jīng)驗】,需要的朋友可以參考下2016-05-05
mysql通過文檔讀取并執(zhí)行命令之快速為mysql添加多用戶和數(shù)據(jù)庫技巧
這篇文章主要介紹了mysql通過文檔讀取并執(zhí)行命令之快速為mysql添加多用戶和數(shù)據(jù)庫技巧的相關(guān)資料,需要的朋友可以參考下2015-09-09
Hibernate4在MySQL5.1以上版本創(chuàng)建表出錯 type=InnDB
本文主要介紹解決Hibernate4在MySQL5.1自動創(chuàng)建表出錯的方法,簡單實用,需要的朋友可以參考下。2016-05-05

