日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql去掉两个最高分_数据分析系列 16/32 | MySQL中子查询与联合查询

發(fā)布時間:2023/12/4 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql去掉两个最高分_数据分析系列 16/32 | MySQL中子查询与联合查询 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前面說了很多MySQL中的查詢,比如條件查詢、分組聚合查詢、連接查詢,今天來說一下另外兩個非常的重要的查詢,MySQL中的子查詢和聯(lián)合查詢。

PART

01

子查詢

子查詢也稱嵌套查詢,是將一個查詢語句嵌套在另一個查詢語句的WHERE子句或者HAVING短語中,前者被稱為內層查詢或子查詢,后者被稱為外層查詢或父查詢。在整個SELECT語句中,先計算子查詢,然后將子查詢的結果作為父查詢的過濾條件,嵌套查詢可以用多個簡單的查詢構成一個復雜的查詢,用來增強SQL的查詢能力。

1、帶IN關鍵字的查詢

帶IN關鍵字的子查詢是最常用的一類子查詢,用于判定一個給定值是否存在與子查詢的結果集中,使用IN關鍵字進行子查詢是,內層查詢語句僅僅返回一個數據列,其值將提供給外層查詢進行比較操作。

#在學生表tb_student中,將學號出現(xiàn)在成績表tb_score中(表明該學生選修了課程)的學生姓名查詢出來SELECT studentNameFROM tb_studentWHERE tb_student.studentNo IN(SELECT DISTINCT tb_score, studentNo FROM tb_score);或SELECT DISTINCT studentNameFROM tb_student, tb_scoreWHERE tb_student.studentNo = tb_score.studentNo;

說明:在處理這類子查詢時MySQL實際上執(zhí)行了兩個操作,即先執(zhí)行內層查詢,再執(zhí)行外層查詢,內層查詢的結果作為外層查詢的比較條件。也可以使用NOT IN來判定一個給定值不屬于子查詢的結果。但是,這類表示否定的查詢不能用連接查詢來改寫。

2、帶比較運算符的子查詢

帶比較運算符的子查詢是指父查詢與子查詢之間用用比較運算符進行連接,當用戶能確定知道內層查詢返回的是單值時,可以用=、>、=、<=、!=(<>)等比較運算符構造子查詢。

#查詢班級“計算機17-1班”所有學生的學號、姓名SELECT studentNo, studentName FROMtb_studentWHERE classNo =(SELECT classNo FROM tb_classWHERE className = ‘計算機17-1班’)#查詢與“李明”在同一個班學習的學生學號、姓名、班號SELECT studentNo, studentName, classNo FROMtb_student s1WHERE classNo =(SELECT classNo FROM tb_ students s2WHERE studentName=’李明’) AND studentName != ’李明’;#上面的最后一個條件,是為了從結果集中去掉李明本人。

比較運算符還可以與ALL、SOME、ANY關鍵字一起構造子查詢。ALL、SOME、ANY用于指定對比較運算符的限制,ALL用于指定表達式需要與子查詢結果集中的每個值都進行比較當表達式與每個值都滿足比較關系時,會返回TRUE,否則返回FALSE,SOME和ANY是同義詞,表示表達式與子查詢結果集中的某個值滿足比較關系時,就返回TRUE,否則返回FALSE。

#查詢男生中比某個女生出生年份晚的學生姓名和出生年份SELECT studentName, YEAR(birthday) FROM tb_studentWHERE sex=’男’ AND YEAR(birthday)>ANY(SELECT YEAR(birthday) FROM tb_student WHEREsex=’女’);

3、帶EXISTS關鍵字的子查詢

使用關鍵字EXISTS構建子查詢時,系統(tǒng)對子查詢進行運算以判斷它是否返回結果集,如果子查詢的結果集不為空,則EXISTS返回的結果為TRUE,此時外層查詢語句將進行查詢,如果子查詢的結果集為空,則EXISTS返回的結果為FALSE,此時外層查詢不進行查詢。

由于帶EXISTS的子查詢只返回TRUE或FALSE,內層查詢的SELECT 子句給出字段名稱的實際意義,所以其目標列表達式通常用星號“*”。與EXISTS相對應的是NOT EXISTS,使用方法相同。

#查詢選修了課程號為“31002”的學生姓名SELECT studentName FROM tb_student aWHERE EXISTS(SELECT * FROM tb_score bWHERE a.studentNo= b.studentNo AND courseNo=’31002’);或SELECT studentName FROM tb_studentWHERE studentNo IN(SELECT studentNo FROM tb_score WHERE courseNo=’31002’);

說明:與關鍵字IN不同的是,外層的WHERE子句中關鍵字EXISTS前面沒有指定內層查詢結果集與外層查詢的比較條件,故使用關鍵字EXISTS構造子查詢時內層的WHERE子句中需要指定連接條件,即a.studentNo=b.studentNo。

PART

02

聯(lián)合查詢

使用UNION關鍵字可以把來自多個SELECT語句的結果組合到一個結果集中,這種查詢稱為并(UNION)運算或聯(lián)合查詢。合并時,多個SELECT子句中對應的字段數和數據類型必須相同。下面不使用ALL關鍵字,執(zhí)行的時候去掉重復的記錄,所有返回的行都是唯一的,使用關鍵字ALL的作用是不去掉重復的記錄,也不對結果進行自動排序。

語法格式是:

SELECT -FROM -WHEREUNION [ALL]SELECT -FROM -WHERE[...UNION [ALL]SELECT -FROM -WHERE]

例子:

#使用UNION查詢選修了“管理學”或“計算機基礎”的學生學號SELECT studentNo FROM tb_score, tb_courseWHERE tb_score .courseNo= tb_course. courseNoAND courseName=’管理學’UNIONSELECT studentNo FROM tb_score, tb_courseWHERE tb_score .courseNo= tb_course. courseNoAND courseName=’ 計算機基礎’;

使用UNION語句需要注意以下幾點:

  • UNION語句必須由兩條或兩條以上的SELECT語句組成,且彼此間用關鍵字UNION分隔。
  • UNION語句中的每個SELECT子句必須包含相同的列、表達式或聚合函數。
  • 每個SELECT子句對應的目標列的數據類型必須兼容,目標列的數據類型不必完全相同,但必須是MySQL可以隱含轉換的類型,例如,不同的數值類型或不同的日期類型。
  • 第一個SELECT子句對應的目標列名會被作 為UNION語句結果集的列名稱。
  • 聯(lián)合查詢中只能使用一條ORDER BY自己或LIMIMT自己,且它們置于最后一條SELECT語句之后。

今天分享下MySQL中的子查詢和聯(lián)合查詢,這對多層查詢很有幫助,在工作中,我們常用的是子查詢,因為很多數據都不是存儲在一個表中,需要進行多層查詢。

歡迎關注微信公眾號,訪問更多精彩:數據之魅

如需轉載,請聯(lián)系授權,謝謝合作。

總結

以上是生活随笔為你收集整理的mysql去掉两个最高分_数据分析系列 16/32 | MySQL中子查询与联合查询的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。