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


1.查詢(xún)工資高于2000或崗位為MANAGER的雇員,同時(shí)還要滿(mǎn)足他們的姓名首字母為大寫(xiě)的J

2.按照部門(mén)號(hào)升序而雇員的工資降序排

3.使用年薪進(jìn)行降序排序

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

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

6.顯示每個(gè)部門(mén)的平均工資和最高工資

7.顯示平均工資低于2000的部門(mén)號(hào)和它的平均工資

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

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



1.顯示部門(mén)號(hào)為10的部門(mén)名,員工名和工資

2.顯示各個(gè)員工的姓名,工資,及工資級(jí)別

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

2.使用多表查詢(xún)(自查詢(xún))
-- 使用到表的別名
--from emp leader, emp worker,給自己的表起別名,因?yàn)橐茸龅芽柗e,所以別名可以先識(shí)別

4.子查詢(xún)
子查詢(xún)是指嵌入在其他sql語(yǔ)句中的select語(yǔ)句,也叫嵌套查詢(xún)
1.單行子查詢(xún)
顯示SMITH同一部門(mén)的員工

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

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

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

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

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

2.查找每個(gè)部門(mén)工資最高的人的姓名、工資、部門(mén)、最高工資

3.顯示每個(gè)部門(mén)的信息(部門(mén)名,編號(hào),地址)和人員數(shù)量

5.合并查詢(xún)
在實(shí)際應(yīng)用中,為了合并多個(gè)select的執(zhí)行結(jié)果,可以使用集合操作符 union,union all
1.union
該操作符用于取得兩個(gè)結(jié)果集的并集。當(dāng)使用該操作符時(shí),會(huì)自動(dòng)去掉結(jié)果集中的重復(fù)行
案例:將工資大于2500或職位是MANAGER的人找出來(lái)

2.union all
該操作符用于取得兩個(gè)結(jié)果集的并集。當(dāng)使用該操作符時(shí),不會(huì)去掉結(jié)果集中的重復(fù)行
案例:將工資大于25000或職位是MANAGER的人找出來(lái)

好啦,這就是有關(guān)MySQL的復(fù)合查詢(xún)的內(nèi)容啦,我們下篇博客不見(jiàn)不散啦(五一快樂(lè)>W<)
到此這篇關(guān)于MySQL的復(fù)合查詢(xún)的文章就介紹到這了,更多相關(guān)mysql復(fù)合查詢(xún)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- MySQL復(fù)合查詢(xún)的具體使用
- MySQL從零開(kāi)始了解數(shù)據(jù)庫(kù)開(kāi)發(fā)之復(fù)合查詢(xún)
- Mysql中的復(fù)合查詢(xún)?cè)斀?/a>
- MySql中表的復(fù)合查詢(xún)實(shí)現(xiàn)示例
- MySQL數(shù)據(jù)庫(kù)復(fù)合查詢(xún)與內(nèi)外連接圖文詳解
- MySQL復(fù)合查詢(xún)(多表查詢(xún)、子查詢(xún))的實(shí)現(xiàn)
- MySQL復(fù)合查詢(xún)的實(shí)現(xiàn)示例
- MySQL復(fù)合查詢(xún)操作實(shí)戰(zhàn)案例
相關(guān)文章
linux 下配置安裝mysql以及配置【經(jīng)驗(yàn)】
這篇文章主要介紹了linux 下配置安裝mysql以及配置【經(jīng)驗(yàn)】,需要的朋友可以參考下2016-05-05
mysql通過(guò)文檔讀取并執(zhí)行命令之快速為mysql添加多用戶(hù)和數(shù)據(jù)庫(kù)技巧
這篇文章主要介紹了mysql通過(guò)文檔讀取并執(zhí)行命令之快速為mysql添加多用戶(hù)和數(shù)據(jù)庫(kù)技巧的相關(guān)資料,需要的朋友可以參考下2015-09-09
MySQL中LIKE子句相關(guān)使用的學(xué)習(xí)教程
這篇文章主要介紹了MySQL中LIKE子句相關(guān)使用的學(xué)習(xí)教程,LIKE子句一般用于WHERE語(yǔ)句中,需要的朋友可以參考下2015-12-12
Hibernate4在MySQL5.1以上版本創(chuàng)建表出錯(cuò) type=InnDB
本文主要介紹解決Hibernate4在MySQL5.1自動(dòng)創(chuàng)建表出錯(cuò)的方法,簡(jiǎn)單實(shí)用,需要的朋友可以參考下。2016-05-05

