【MySQL專欄】MySQL數據庫的復合查詢語句

在這里插入圖片描述

文章目錄

  • 1、首先練習MySQL基本語句的練習
      • ①查詢工資高于500或崗位為MANAGER的雇員,同時還要滿足他們的姓名首字母為大寫的J
      • ②按照部門號升序而雇員的工資降序排序
      • ③使用年薪進行降序排序
      • ④顯示工資最高的員工的名字和工作崗位
      • ⑤顯示工資高于平均工資的員工信息
      • ⑥顯示每個部門的平均工資和最高工資
      • ⑦顯示平均工資低于2000的部門號和它的平均工資
      • ⑧顯示每種崗位的雇員總數,平均工資
  • 2、多表查詢
      • ①顯示部門號為10的部門名,員工名和工資
      • ②顯示各個員工的姓名,工資,及工資級別
  • 3、自連接
      • ①顯示員工FORD的上級領導的編號和姓名(mgr是員工領導的編號--empno)
  • 4、子查詢
    • (1)where子語句的單行子查詢
      • ①顯示SMITH同一部門的員工——之和SMITH這一行數據作比較
    • (2)where子語句的多行子查詢
      • ①in關鍵字:查詢和10號部門的工作崗位相同的雇員的名字,崗位,工資,部門號,但是不包含10自己的
      • ②all關鍵字:顯示工資比部門30的所有員工的工資高的員工的姓名、工資和部門號
      • ③any關鍵字:顯示工資比部門30的任意員工的工資高的員工的姓名、工資和部門號(包含自己部門的員工)
    • (3)where子語句的多列子查詢
      • ①案例:查詢和SMITH的部門和崗位完全相同的所有雇員,不含SMITH本人
    • (4)from子句中的子查詢
      • ①顯示每個高于自己部門平均工資的員工的姓名、部門、工資、平均工資
      • ②查找每個部門工資最高的人的姓名、工資、部門、最高工資
      • ③顯示每個部門的信息(部門名,編號,地址)和人員數量
  • 5、合并查詢
    • (1)union關鍵字:進行取兩個結果集的并集,會自動去重。
      • 案例:將工資大于2500或職位是MANAGER的人找出來
    • (2)union all:取得兩個結果集的并集。當使用該操作符時,不會去掉結果集中的重復行。
      • 案例:將工資大于25000或職位是MANAGER的人找出來

1、首先練習MySQL基本語句的練習

語句練習的基礎數據:
①一個關于公司員工部門工資的數據庫:
創建數據庫:scott。

create database scott;

②三張表:dept:部門表、emp:員工表、salarge:薪資表。
創建三張表,結構數據如下:
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

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

考察where條件篩選。
在這里插入圖片描述

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

考察MySQL排序查詢,下面是先滿足部門號升序,存在相同部門號的,再按照工資降序排序。
在這里插入圖片描述

③使用年薪進行降序排序

此處需要注意的是在comm列屬性中的NULL不參與運算,任何數據和NULL運算都是NULL,因此用ifnull判斷。
在這里插入圖片描述
不作判斷就是為NULL:不符合。
在這里插入圖片描述

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

考察數學函數的使用:max()。
在這里插入圖片描述

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

先查詢平均工資,然后再查詢工資高于平均工資的員工信息。
在這里插入圖片描述

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

先分組然后統計分組后的平均工資和在該部門中的最高工資
在這里插入圖片描述

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

即每個部門的平均工資,查詢在對應部門低于平均工資的部門號和該部門的平均工資
在這里插入圖片描述

⑧顯示每種崗位的雇員總數,平均工資

看到每個崗位,就想到按崗位分組,然后統計,相同崗位的平均工資
在這里插入圖片描述

上面是一些基本的查詢語句,接下來主要看一下:多表查詢、自連接、子查詢、合并查詢等相關知識。

2、多表查詢

首先,什么是多表查詢,即在多張表中查看想要的結果。上面來練習的語句中都是單表查詢,而此處的多表查詢實際上也可以看作是單表查詢,只不過是經過組合的一張表,通過笛卡爾積組合后就是一張表了,然后從整個大表中進行篩選即可。

什么是笛卡爾積?有圖簡易說明:
在這里插入圖片描述
先通過下面語句看到笛卡爾積的現象:可以看到員工表和部門表進行笛卡爾積后得到很多數據,其中有些數據是不符合的,因此需要進行篩選,即我們只要emp表中的deptno = dept表中的deptno字段的記錄。
在這里插入圖片描述

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

在這里插入圖片描述
在這里插入圖片描述

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

即姓名和工資屬于一張表,工資級別一張表,笛卡爾積后需要查詢工資在對應范圍的才是正確的:
在這里插入圖片描述

總結:在進行多表查詢的時候,先進行無腦笛卡爾積,然后通過唯一值條件篩選即可,唯一值條件即是能說明多張表組合后,只能有一條數據在符號要求的。

3、自連接

什么是自連接?即在同一張表中作連接查詢,有人會覺得這有真沒意義,通過下面例子說明:

①顯示員工FORD的上級領導的編號和姓名(mgr是員工領導的編號–empno)

在這里插入圖片描述
在這里插入圖片描述

也可以通過給自己表取別名,得到新的表,作笛卡爾積,再進行判斷員工對應的mgr編號和領導表中的empno是否相同:
在這里插入圖片描述

4、子查詢

子查詢:即嵌入在其他SQL語句中的select語句,也叫嵌套查詢。

(1)where子語句的單行子查詢

即在查詢過程中之和一行數據進行比較查詢,只返回一行數據的子查詢語句,這里的返回一行是字子查詢里面返回的數據是一行。

①顯示SMITH同一部門的員工——之和SMITH這一行數據作比較

即先查詢SMITH所在的部門,再通過部門信息查找和該部門相同的員工信息即可。
在這里插入圖片描述

(2)where子語句的多行子查詢

即查詢的時候比較數據不止一行數據,子查詢返回的數據是多行的,也就再次查詢的時候比較就有多行數據
主要用到:in、all、any 查詢關鍵字。

①in關鍵字:查詢和10號部門的工作崗位相同的雇員的名字,崗位,工資,部門號,但是不包含10自己的

即先查10部門的工作崗位有哪些?
然后根據更為查詢對應的員工。看查找的員工的崗位是否在上面查詢的崗位范圍內。
在這里插入圖片描述
不等于的兩種寫法:!= 或者 <>
在這里插入圖片描述

②all關鍵字:顯示工資比部門30的所有員工的工資高的員工的姓名、工資和部門號

可以先查找部門30號的員工中最高的工資,然后在其他部門查找比該工資還高的信息。
在這里插入圖片描述

③any關鍵字:顯示工資比部門30的任意員工的工資高的員工的姓名、工資和部門號(包含自己部門的員工)

即這里的比部門30的任意員工工資高,是說只要查找到的員工工資高于部門30里面員工工資其中一個都滿足。
因此先統計部門30的所有員工工資,然后通過any進行查詢。
在這里插入圖片描述

(3)where子語句的多列子查詢

多列子查詢則是指查詢返回多個列數據的子查詢語句。

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

這里的多列子查詢就體現在剛開始查詢的結果就存在多列,即部門和崗位,因此叫多列子查詢。
即先查詢到SMITH的部門和崗位。

包含SMITH的時候:
在這里插入圖片描述
不包含本人的時候:
在這里插入圖片描述

(4)from子句中的子查詢

從上買此查詢的語句中可以看到都是跟到where子語句中的,作為條件子查詢。而在from子語句后面的,則是通過select查詢出來的作為一張臨時表進行與其他表進行篩選的。下面 通過例子來看:

①顯示每個高于自己部門平均工資的員工的姓名、部門、工資、平均工資

即先按部門分組,分別計算出每個部門的平均工資,然后通過查詢表中高于平均工資的員工相關信息。但是真正編寫SQL語句返現執行報錯,因為需要顯示員工姓名,而多個員工會存在在同一個部門,但是又以部門分組,顯然不符合分組的條件,無法分組,因此需要通過from子句的子查詢來完成。
先通過分組得到對應部門的平均工資,然后把該結果作為臨時表,然后和emp表進行一起查詢。
臨時表
在這里插入圖片描述
在這里插入圖片描述

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

即和上面一樣需要from子句的查詢,先根據分組得到每個部門的最高工資:
在這里插入圖片描述
然后和emp表進行結合查詢:
在這里插入圖片描述

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

使用多表查詢的,即員工表和部門表,以部門表進行分組查詢:
在這里插入圖片描述
使用子查詢:即先對員工表以部門分組進行人員統計
在這里插入圖片描述

5、合并查詢

即合并多個selecct查詢出來的結果,使用集合操作符號:union,union all關鍵字。

(1)union關鍵字:進行取兩個結果集的并集,會自動去重。

案例:將工資大于2500或職位是MANAGER的人找出來

使用子查詢:
在這里插入圖片描述
使用union取并集:必須保證兩張表的屬性列一樣,數量一樣才可以合并。
在這里插入圖片描述

(2)union all:取得兩個結果集的并集。當使用該操作符時,不會去掉結果集中的重復行。

案例:將工資大于25000或職位是MANAGER的人找出來

即沒有去重的數據:union
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/78292.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/78292.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/78292.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python爬蟲(5)靜態頁面抓取實戰:requests庫請求頭配置與反反爬策略詳解

目錄 一、背景與需求?二、靜態頁面抓取的核心流程?三、requests庫基礎與請求頭配置?3.1 安裝與基本請求3.2 請求頭核心參數解析?3.3 自定義請求頭實戰 四、實戰案例&#xff1a;抓取豆瓣讀書Top250?1. 目標?2. 代碼實現3. 技術要點? 五、高階技巧與反反爬策略?5.1 動態…

HTML給圖片居中

在不同的布局場景下&#xff0c;讓 <img> 元素居中的方法有所不同。下面為你介紹幾種常見的居中方式 1. 塊級元素下的水平居中 如果 <img> 元素是塊級元素&#xff08;可以通過 display: block 設置&#xff09;&#xff0c;可以使用 margin: 0 auto 來實現水平居…

【高頻考點精講】前端構建工具對比:Webpack、Vite、Rollup和Parcel

前端構建工具大亂斗:Webpack、Vite、Rollup和Parcel誰是你的菜? 【初級】前端開發工程師面試100題(一) 【初級】前端開發工程師面試100題(二) 【初級】前端開發工程師的面試100題(速記版) 最近在后臺收到不少同學提問:“老李啊,現在前端構建工具這么多,我該選哪個?…

趕緊收藏!教您如何用 GitHub 賬號,獲取永久免費的 Docker 容器!!快速搭建我們的網站/應用!

文章目錄 ?? 介紹 ???? 演示環境 ???? 永久免費的 Docker 容器 ???? 注冊與登錄? 創建 Docker 容器?? 部署你的網站?? 注意事項?? 使用場景?? 相關鏈接 ???? 介紹 ?? 還在為搭建個人網站尋找免費方案而煩惱? 今天發現一個寶藏平臺!只需一個 Git…

Java大師成長計劃之第3天:Java中的異常處理機制

&#x1f4e2; 友情提示&#xff1a; 本文由銀河易創AI&#xff08;https://ai.eaigx.com&#xff09;平臺gpt-4o-mini模型輔助創作完成&#xff0c;旨在提供靈感參考與技術分享&#xff0c;文中關鍵數據、代碼與結論建議通過官方渠道驗證。 在 Java 編程中&#xff0c;異常處理…

大數據去重

實驗4 大數據去重 1.實驗目的 通過Hadoop數據去重實驗&#xff0c;學生可以掌握準備數據、偽分布式文件系統配置方法&#xff0c;以及在集成開發環境Eclipse中實現Hadoop數據去重方法。 2.實驗要求 了解基于Hadoop處理平臺的大數據去重過程&#xff0c;理解其主要功能&…

http協議、全站https

一、http協議 1、為何要學http協議? 用戶用瀏覽器訪問網頁,默認走的都是http協議,所以要深入研究web層,必須掌握http協議 2、什么是http協議 1、全稱Hyper Text Transfer Protocol(超文本傳輸協議) ### 一個請求得到一個響應包 普通…

使用 Logstash 遷移 MongoDB 數據到 Easysearch

大家好&#xff01;在前面的文章中&#xff0c;我們已經詳細介紹了如何通過 Logstash 和 Canal 工具實現 MySQL 數據向 Easysearch 的遷移。如果您正在使用 MongoDB 作為數據存儲&#xff0c;并希望將其數據遷移到 Easysearch 中&#xff0c;這篇指南或許能為您提供一些幫助。 …

亞馬遜英國站FBA費用重構:輕小商品迎紅利期,跨境賣家如何搶占先機?

一、政策背景&#xff1a;成本優化成平臺與賣家共同訴求 2024年4月&#xff0c;亞馬遜英國站&#xff08;Amazon.co.uk&#xff09;發布近三年來力度最大的FBA費用調整方案&#xff0c;標志著英國電商市場正式進入精細化成本管理時代。這一決策背后&#xff0c;是多重因素的疊…

使用Qt Quick Controls創建自定義日歷組件

目錄 引言相關閱讀1. DayOfWeekRow2. MonthGrid3. WeekNumberColumn 項目結構及實現工程結構圖代碼實現及解析1. 組件封裝2. 主界面實現 運行效果 總結下載鏈接 引言 Qt6 Quick框架提供了一套豐富的日歷相關組件&#xff0c;包括 MonthGrid、DayOfWeekRow 和 WeekNumberColumn…

【AI微信小程序開發】大轉盤小程序項目代碼:自設轉盤選項和概率(含完整前端+后端代碼)

系列文章目錄 【AI微信小程序開發】AI減脂菜譜小程序項目代碼:根據用戶身高/體重等信息定制菜譜(含完整前端+后端代碼)【AI微信小程序開發】AI菜譜推薦小程序項目代碼:根據剩余食材智能生成菜譜(含完整前端+后端代碼)【AI微信小程序開發】圖片工具小程序項目代碼:圖片壓…

redis相關問題整理

Redis 支持多種數據類型&#xff1a; 字符串 示例&#xff1a;存儲用戶信息 // 假設我們使用 redis-plus-plus 客戶端庫 auto redis Redis("tcp://127.0.0.1:6379"); redis.set("user:1000", "{name: John Doe, email: john.doeexample.com}"…

Vue-組件的懶加載,按需加載

在Vue項目中實現組件的懶加載&#xff08;也稱為按需加載或代碼分割&#xff09;&#xff0c;可以大大提升應用的加載速度和性能。懶加載主要通過Webpack的代碼分割功能實現&#xff0c;特別是使用動態導入&#xff08;import()語法&#xff09;。 為什么要使用懶加載&#xf…

C# new Bitmap(32043, 32043, PixelFormat.Format32bppArgb)報錯:參數無效,如何將圖像分塊化處理?

C#處理非常大的圖像&#xff08;如 32043x32043 像素&#xff09;時&#xff0c;確實需要采取分塊化處理的方法來避免內存不足的問題。分塊化處理可以將大圖像分割成多個較小的塊&#xff0c;分別進行處理和保存&#xff0c;最后再合并這些塊以形成完整的圖像。以下是一個詳細的…

如何使用極狐GitLab 的外部狀態檢查功能?

極狐GitLab 是 GitLab 在中國的發行版&#xff0c;關于中文參考文檔和資料有&#xff1a; 極狐GitLab 中文文檔極狐GitLab 中文論壇極狐GitLab 官網 外部狀態檢查 (ULTIMATE ALL) pending 狀態引入于極狐GitLab 16.5 pending 狀態檢查的超時時間為兩分鐘引入于極狐GitLab 16…

深入探索Spark-Streaming:從Kafka數據源創建DStream

在大數據處理領域&#xff0c;Spark-Streaming是一個強大的實時流處理框架&#xff0c;而Kafka作為高性能的分布式消息隊列&#xff0c;二者結合能實現高效的數據處理。今天就來聊聊Spark-Streaming中從Kafka數據源創建DStream的相關知識。 早期&#xff0c;Spark-Streaming通過…

Kafka 詳解

1.基本概念&#xff1a;Kafka 是分布式發布 - 訂閱消息系統&#xff0c;具有高吞吐量、可擴展性等優勢&#xff0c;支持點對點和發布訂閱兩種消息模式&#xff0c;涉及 Broker、Topic、Partition 等多種角色。 2.安裝步驟&#xff1a;需先安裝 JDK 和 Zookeeper&#xff0c;下…

uniapp-商城-34-shop 購物車 選好了 進行訂單確認整體

在shop頁面選中商品添加到購物車&#xff0c;可選好后&#xff0c;進行確認和支付。具體呈現在shop頁面。 1 購物車欄 shop頁面代碼&#xff1a; 購物車代碼&#xff1a; 代碼&#xff1a; <template><view><view class"carlayout"><!-- 車里…

數據倉庫是什么?數據倉庫架構有哪些?

目錄 數據倉庫是什么&#xff1f;數據倉庫架構有哪些&#xff1f; 一、數據倉庫是什么&#xff1f; 二、數據倉庫的架構分層 1. 獲取層 2. 數據層 3. 應用層 4. 訪問層 三、數據倉庫的價值體現 1.決策支持 2.業務優化 3.提升競爭力 四、數據倉庫的未來發展趨勢 總…

單片機——使用printf調試

配置printf()輸出函數 1、來自于<stdio.h> 2、運行C語言時&#xff0c;輸出到終端 3、單片機沒有終端&#xff0c;需要使用串口&#xff0c;將要輸出的內容傳到電腦&#xff08;串口調試助手&#xff09;上 例子如下 #include <stdio.h> #include &qu…