最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL之復(fù)合查詢解讀

 更新時(shí)間:2025年08月11日 10:14:25   作者:每天敲200行代碼  
本文系統(tǒng)講解SQL查詢技術(shù),涵蓋基本查詢(條件篩選、排序、聚合)、多表連接、自連接、子查詢(單行/多行/多列)及合并查詢(UNION/UNION?ALL),通過emp、dept、salgrade三張表演示員工與部門數(shù)據(jù)關(guān)聯(lián)分析方法

一、基本查詢練習(xí)回顧

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

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

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

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

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

6、顯示每個(gè)部門的平均工資和最高工資

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

8、顯示每種崗位的雇員總數(shù),平均工資

二、多表查詢

實(shí)際開發(fā)中往往數(shù)據(jù)來自不同的表,所以需要多表查詢。這里我們用一個(gè)簡(jiǎn)單的公司管理系統(tǒng),有三張表 emp,dept,salgrade 來演示如何進(jìn)行多表查詢。

?練習(xí)

1、顯示雇員名、雇員工資以及所在部門的名字因?yàn)樯厦娴臄?shù)據(jù)來自 emp 和 dept 表,因此要聯(lián)合查詢(將數(shù)據(jù)進(jìn)行窮舉組合 —— 笛卡爾積)

其實(shí)我們只要 emp 表中的 deptno=dept 表中的 deptno 字段的記錄:

2、顯示部門號(hào)為 10 的部門名,員工名和工資

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

三、自連接

自連接 是指在同一張表連接查詢。

?練習(xí)

1、顯示員工 FORD 的上級(jí)領(lǐng)導(dǎo)的編號(hào)和姓名(mgr 是員工領(lǐng)導(dǎo)的編號(hào) —— empno)

(1)使用的子查詢

先找 FORD 的上級(jí)領(lǐng)導(dǎo)的編號(hào)(emp),再根據(jù)領(lǐng)導(dǎo)的編號(hào)來找領(lǐng)導(dǎo)的信息(emp)。

(2)使用多表查詢(自查詢)

  • 使用到表的別名

from emp e1, emp e2,給自己的表起別名,因?yàn)橐茸龅芽柗e,所以別名可以先識(shí)別。

四、子查詢

子查詢是指嵌入在其他  sql  語句中的  select  語句,也叫嵌套查詢。

  • 目前學(xué)習(xí)到的子查詢都在 where 子句中充當(dāng)判斷條件。
  • 任何時(shí)刻,查詢出來的臨時(shí)結(jié)構(gòu),本質(zhì)在邏輯上也是表結(jié)構(gòu)。

1、單行子查詢

返回一行記錄的子查詢。

  • 顯示 SMITH 同一部門的員工

2、多行子查詢

返回多行記錄的子查詢。

(1)in 關(guān)鍵字

in 關(guān)鍵字用來判斷一個(gè)對(duì)應(yīng)的列值是否在某個(gè)集合當(dāng)中,只要在集合當(dāng)中,說明查找成功。

查詢和  10  號(hào)部門的工作崗位相同的雇員的名字,崗位,工資,部門號(hào),但是不包含  10  自己的。

擴(kuò)展:除了上面的要求以外,還需要顯示出對(duì)應(yīng)員工所屬崗位的名字。

(2)all 關(guān)鍵字

all 關(guān)鍵字表示與所有的值作比較。

顯示工資比部門  30  的所有員工的工資高的員工的姓名、工資和部門號(hào)。

另一種寫法:

(3)any 關(guān)鍵字

amy 關(guān)鍵字表示與任意的值作比較。

顯示工資比部門 30 的任意員工的工資高的員工的姓名、工資和部門號(hào)(包含自己部門的員工)。

3、多列子查詢

  • 單行子查詢是指子查詢只返回單列,單行數(shù)據(jù)。
  • 多行子查詢是指返回單列多行數(shù)據(jù),都是針對(duì)單列而言的,而多列子查詢則是指查詢返回多個(gè)列數(shù)據(jù)的子查詢語句。

?練習(xí)

查詢和 SMITH 的部門和崗位完全相同的所有雇員,不含 SMITH 本人

4、在 from 子句中使用子查詢

子查詢語句出現(xiàn)在  from  子句中。

這里要用到數(shù)據(jù)查詢的技巧,把一個(gè)子查詢當(dāng)做一個(gè)臨時(shí)表使用。

?練習(xí)

(1)顯示每個(gè)高于自己部門平均工資的員工的姓名、部門、工資、平均工資

  • 獲取各個(gè)部門的平均工資,將其看作臨時(shí)表

擴(kuò)展:除了上面的要求以外,還需要顯示出對(duì)應(yīng)部門的辦公地點(diǎn)。

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

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

a. 方法 1:使用多表

解決多表問題的本質(zhì):(多表的指導(dǎo)思想)

想辦法將多表轉(zhuǎn)化為單表,所以在 MySQL 中,所有 select 的問題全都可以轉(zhuǎn)成單表問題。 

b. 方法 2:使用子查詢(推薦)

  • 對(duì) emp 表進(jìn)行人員統(tǒng)計(jì)

  • 將上面的表看作臨時(shí)表

5、合并查詢

在實(shí)際應(yīng)用中,為了合并多個(gè)  select  的執(zhí)行結(jié)果,可以使用集合操作符 union , union all。

(1)union

該操作符用于取得兩個(gè)結(jié)果集的并集。當(dāng)使用該操作符時(shí), 會(huì) 自動(dòng)去掉結(jié)果集中的重復(fù)行。

練習(xí) —— 將工資大于 2500 或職位是 MANAGER 的人找出來

(2)union all

該操作符用于取得兩個(gè)結(jié)果集的并集。當(dāng)使用該操作符時(shí),不會(huì)去掉結(jié)果集中的重復(fù)行。

練習(xí) —— 將工資大于 25000 或職位是 MANAGER 的人找出來

注意:select 如果要使用 union / union all 來拼接兩個(gè)結(jié)果,前提是必須保證兩個(gè)表的列數(shù)是相同的。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

东丰县| 凤山县| 河南省| 湄潭县| 灵台县| 全椒县| 灵川县| 新昌县| 汽车| 呼图壁县| 阿克苏市| 华宁县| 陕西省| 眉山市| 阜新市| 新野县| 仙桃市| 汶上县| 宣城市| 宜阳县| 义马市| 广灵县| 洛扎县| 莱州市| 永安市| 大关县| 同心县| 闻喜县| 洞口县| 周口市| 张家界市| 鹤岗市| 文登市| 陵水| 叶城县| 金昌市| 义乌市| 新乐市| 大厂| 汝南县| 嘉峪关市|