1. 程式人生 > >MYSQL必知必會:分組查詢和子查詢

MYSQL必知必會:分組查詢和子查詢

除了一些彙總函式之外,還可以根據欄位進行分組,分組之後再進行資料的彙總或過濾等其他查詢操作.

下面有張表t5,分別有id,name,subject,score四個欄位.
這裡寫圖片描述

1.分組過濾.
分組過濾是把一張表內的剩餘的記錄通過某個欄位進行分組,關鍵詞是group by.剩餘的指的是:再分組過濾之前,我們可以先通過where過濾一部分記錄.然後在進行分組操作.

先看下第一個例子.
example1:要求列出每個學生的名字和考試的門數.在這裡我們對name欄位進行分組,然後通過呼叫count(*)函式來獲得每個組的記錄數量.

這裡寫圖片描述

example2:要求列出考試門數大於2門的學生的名字和考試的門數.這裡就需要先通過name進行分組,然後再分組的基礎上,再進行過濾.當然這裡的關鍵詞不是where,而是having.where和having很像,但是他們最大的區別在於:
where用於對記錄的過濾.having用於對組的過濾.也就是說where用於分組前過濾資料,having再分組後進行過濾.

這裡寫圖片描述

example3:要求列出分數>80分的科目數量>=2門的學生的姓名和科目數量.這裡就需要先對所有的記錄進行過濾,然後再進行分組,再對組進行過濾.

這裡寫圖片描述

example4:要求列出每個科目得最高分的學生的姓名和分數.(假設最高分沒有重疊.)
這裡就根據subject欄位進行分組,然後對每個組呼叫了max()函式找出分數最高的學生的姓名和分數.注意order by排序是在之前的所有操作完成後才執行的..

這裡寫圖片描述

2.子查詢

子查詢指的是:把一個查詢語句查詢到的結果,作為篩選過濾的條件來進行條件過濾.見下例.
example5:根據表t5,列出所有分數中得到最高分的一名學生的所有考試科目以及成績.(如果最高分相同,則按照名字字典序排列.)
根據題目,很清楚:
第一步:只需要先找到得到分數最高的學生名字.返回的是一個值.(在這個例子是一個值.)
第二步:去查詢這個學生名字的所有考試記錄即可.

我們把兩個步驟的語句寫到一個語句中去,第一步的步驟就作為第二步的子查詢.子查詢可以巢狀多層.但是由於效能的限制,最好不要巢狀太多的子查詢,你必須要知道,並不是說在mysql資料中查詢語句不用花費太多的時間.

這裡寫圖片描述

之前的例子一直都是單表查詢,下面再多加一張學生資訊表.分別有學號,名字,性別3個欄位.

這裡寫圖片描述

example6:*要求列出考試門數大於2門的學生的學號,名字和性別.
這裡就可以通過in操作符來過濾資料.

這裡寫圖片描述

相關推薦

MYSQL:分組查詢查詢

除了一些彙總函式之外,還可以根據欄位進行分組,分組之後再進行資料的彙總或過濾等其他查詢操作. 下面有張表t5,分別有id,name,subject,score四個欄位. 1.分組過濾. 分組過濾是把一張表內的剩餘的記錄通過某個欄位進行分組,關鍵詞是gr

MySQL練習題:多表查詢查詢

1. 列出至少有4個員工的部門名稱 2. 列出薪金比"SMITH"多的所有員工 3. 列出所有員工的姓名以及其直接上級的姓名 4. 列出受僱日期早於其直接上級的所有員工的編號、姓名、部門名稱 5. 列出部門名稱和這些部門的員工資訊,同時列出那些沒有員工的部門 6. 列出所有從事"CLERK"工作

Java 11---SELECT分組查詢查詢

導讀 1.GROUP BY子句 2.HAVING子句 3.巢狀子查詢 GROUP BY子句 語法: SELECT FROM WHERE GROUP BY 列1,列2... ORDER BY; 注意: 1.執行流程 FROM->WHERE,行的篩選-

MySQL中的多表查詢查詢

多表查詢 合併查詢 合併查詢 UNION 關鍵字 SELECT 欄位名 FROM 表1名 UNION SELECT 欄位名 FROM 表2名; 返

mysql 查詢(六)之主查詢查詢的執行順序

那麼,什麼是相關子查詢呢?舉個例子,查詢員工表中薪水大於本部門平均薪水的員工。首先構建思路,說到底還是查詢員工,所以主查詢是查詢員工,然後在where後面增加子查詢,查詢薪水大於本部門平均薪水。開始寫sql,如下:問題來了,查詢某個部門的薪水,公司有很多個部門,所以引數不能寫

mysql (dml) 連結串列查詢 查詢

連表查詢,分為內連線和外連線,外連線又分為左連線和右連線。     1.內連線:select 列名.... from 表1 inner join 表2 on 表1.外來鍵=表2.主鍵 【where /order by]          示例:select user.nam

mysql8學習手冊第三部分查詢查詢

Selecting data into a file and table To save the output into a file, you need the FILE privilege. FILE is a global privilege, which means you

OCP-1Z0-051 補充題庫 第5題 主查詢查詢的注意事項

Which three statements are true regarding sub queries? (Choose three.)A. Multiple columns or expressions can be compared between the main query and sub que

面試題:連線查詢查詢

今天碰到個有意思的面試題,主要是被第2小題難住了(和同事靈感碰撞才把問題解決),所以做個demo記錄一下。1、首先我們分別建立 tab_user_info 和 tab_dict_sex 資料表:CREATE TABLE `tab_user_info` ( `fld_id`

MySQL】第十三章 分組數據

num mysql 統計 where子句 rom 過濾 group by 大於 映射 1、創建分組   輸入:   SELECT vend_id , COUNT(*) AS num_prods   FROM products   GROUP BY vend_id;   輸出

MySQL學習筆記》:查詢

簡單的 後繼 復雜 pos clas tty append 靈活 values 子查詢 在開始了解子查詢之前,首先做下準備工作,建立3個表, 一個是customers表,當中包含:客戶名字、客戶ID、客戶Tel等。 一個是orders

mysql--簡單查詢-3

基礎查詢 用萬用字元進行過濾 like操作符 萬用字元 用來匹配值得一部分的特殊字元 搜尋模式 由字表面值、萬用字元或者兩者組合構成的搜尋條件 萬用字元本身實際是SQL的where子句中有特殊含義的字元,SQL支援幾種萬用字元 未在搜尋子句中使用萬用字元,必

mysql-簡單查詢-2

簡單查詢 過濾資料 使用where子句 資料庫一般很少需要檢索表中所有的行,通常只會根據特定的需求提取表資料的子集,而檢索表中所需的特定資料則需要指定搜尋條件(也稱為過濾條件)。 在select語句中,資料根據where子句中指定的搜尋條件進行過濾,where子

mysql-簡單查詢-1

簡單查詢 檢索資料 檢索語句select的基本結構: select 欄位名 from 表名 檢索就是需要從指定的表中檢索出指定的欄位名,以此獲取到你想要的資訊 檢索單列資訊 select id from customers;

讀書筆記《MySQL》之第十七章組合查詢

文章目錄 什麼是組合查詢 建立組合查詢 使用union 使用union的規則 union all的使用 組合查詢的結果的排序 總結 什麼是組合查詢 把

MySQL:組合查詢(Union)

本篇文章主要介紹使用Union操作符將多個SELECT查詢組合成一個結果集。本文參考《Mysql必知必會》+工作實踐融合組合查詢定義在大多數開發中,使用一條SELECT查詢就會返回一個結果集。如果,我們想一次性查詢多條SQL語句,並將每一條SELECT查詢的結果合併成一個結果

MySQL-5去重,擷取排序

去重 使用DISTINCT,DISTINCT告訴MySQL只返回不同(唯一)的列的行。 如果使用DISTINCT關鍵字,它必須放在列的前面。 不能部分使用DISTINCT,DISTINCT關鍵字應用於所有列而不僅是前置它的列,如果給出兩個列,除非指定的兩個列都不同,否則所

mysql--學習筆記(8)--查詢 where巢狀查詢語句,作為計算欄位使用查詢

1、子查詢的查詢過程一般是通過where中的in操作符來完成,in後面跟上一個子查詢,通常in之前的列名和子查詢查詢出來的列名是一致的。例如select name from book where id in (select book_id from store where s

MySQL】第6章 過濾數據

sea 錯誤 arch order by ice where 大量數據 子句 否則 1、使用WHERE子句   數據庫一般包含大量數據,所以一般不會檢索所有行。只檢索所需數據需要指定搜索條件(search criteria),搜索條件也稱為過濾條件(filter condi

MySQL】第八章 用通配符進行過濾

通配符 操作符 範圍 name 使用 技巧 商品 -- rom 1、LIKE操作符   之前使用的操作符都是針對已知的數據,而使用通配符可以對未知數據也進行搜索。   通配符(wildcard):用來匹配值得一部分的特殊字符。   搜索模式(search pattern):