單表查詢Ⅱ
先把該鋪墊的鋪墊好
建表--插入數據--查詢數據
接上一篇~~~~
4、在SELECT語句中,最常見的是使用WHERE子句指定查詢條件對數據進行過濾
格式:SELECT 字段名1,...,字段名n FROM 表名 WHERE 條件表達式;
常見的關系運算符:
①查詢表中id為4的學生姓名
②查看表中成績大於90的數據
5、帶IN關鍵字的查詢
IN關鍵字用於判斷某個字段的值是否在指定集合中
格式:SELECT *|字段名1,...,字段名n FROM 表名 WHERE
字段名[NOT] IN(字段名1,...,字段名n)
如上兩圖所示,很容易看出兩者間的區別
譯1:id為1、2、3的記錄
譯2:id不為1、2、3的記錄
注意:在上面的語法格式中,“元素1、元素2…”表示集合中的元素,即指定的條件范圍。NOT是可選參數,使用NOT表示查詢不在IN關 鍵字指定集合范圍中的記錄。
6、帶BETWEEN AND關鍵字的查詢
格式:SELECT *|字段名1,...,字段名n FROM 表名 WHERE
字段名[NOT] BETWEEN 值1 ADD 值2
注意:“值1”表示范圍條件的起始值,“值2”表示范圍條件的結束值
通常情況下“值1”小於“值2”,否則查詢不到任何結果。
如上兩圖所示,很容易看出兩者間的區別
譯1:id為2-5之間的記錄
譯2:id不為2-5之間的記錄
7、空值查詢
使用IS NULL關鍵字來判斷字段的值是否為空值
格式:SELECT *|字段名1,...,字段名n FROM 表名 WHERE
字段名 IS [NOT] NULL
如上兩圖所示,很容易看出兩者間的區別
譯1:gender為空的記錄
譯2:gender不為空的記錄
8、帶DISTINCT關鍵字的查詢
使用DISTINCT關鍵字來去掉查詢記錄中重復的值。
① 格式:SELECT DISTINCT 字段名 FROM 表名;
從查詢記錄可以看到,這次查詢只返回了3條記錄的gender值,分別為“男”、“女”和“NULL”,不再有重復值。
②DISTINCT關鍵字作用多個字段
格式:SELECT DISTINCT 字段名1,字段名2,……FROM 表名;
注意:只有多個字段的值都相同才會被認為是重復的
(查詢表中的gender和name字段)
附:為了下面的操作,重新在表中增加了值
9、帶LIKE關鍵字的查詢
LIKE關鍵字用於對字符串進行模糊查詢
SELECT *或字段名1,字段名2,……
FROM 表名WHERE 字段名【NOT】LIKE “匹配字符串”
“匹配字符串”指定用來匹配的字符串,其值可以是一個普通字符串,也可以是包含%和_的通配字符串。
①使用百分號通配符查詢
百分號通配符:一個百分號可以匹配任意多的字符,包括空字符
A、格式:SELECT id,name FROM student WHERE name LIKE "s%";
翻譯:查找表中name字段值以字符“s”開頭的學生id;
B、格式:SELECT id,name FROM student_td WHERE name LIKE "w%g";
翻譯:查詢表中name字段值以字符“w”開始,以字符“g”結束的學生id
C、格式:SELECT id,name FROM student_td WHERE name LIKE "%y%";
翻譯:查詢表中name字段值包含字符“y”的學生id
D、LIKE之前可以使用NOT關鍵字,用來查詢與指定通配字符串不匹配的記錄。
格式:SELECT id,name FROM student_td WHERE name NOT LIKE "%y%";
翻譯:查詢表中name字段值不包含字符“y”的學生id
②下划線通配符:一個下划線匹配一個字符,包括空字符
一個”—”可以匹配一個字符,包括空字符串
多個”—”可以匹配任意多的字符,包括空字符串
翻譯:查詢student表中name字段值以字符串“wu”開始,以字符串“ong”結束,並且兩個字符串之間只有一個字符的記錄
翻譯:查詢表中name字段值包含7個字符,並且以字符串“ing”結束的記錄
注意:(圖中現象)
因為在-ing前有四個字母,所以在通配字符串中要使用了4個下划線通配符,它匹配name字段值中“ing”前面的4個字符,如果不匹配,就是空值。
③使用百分號和下划線通配符進行查詢操作
注意:百分號和下划線是通配符,它們在通配字符串中有特殊含義,因此,如果要匹配字符串中的百分號和下划線,就需要在通配字 符串中使用右斜線(“\”)對百分號和下划線進行轉義
在查詢之前先添加一條記錄
從上面的執行語句中可以看到,添加的新記錄其name字段值為“sun%er”,包含一個百分號字面值
翻譯:查詢結果可以看到,查出了name字段值為“sun%er”的新記錄
10、帶AND關鍵字的多條件查詢
使用AND關鍵字可以連接兩個或者多個查詢條件,只有滿足所有條件的記錄才會被返回
格式:SELECT *|{字段名1,字段名2,……}
FROM 表名
WHERE 條件表達式1 AND 條件表達式2 […… AND 條件表達式n];
注:在WHERE關鍵字后面跟了多個條件表達式,每兩個條件表達式之間用AND關鍵字分隔。
①查詢一個
翻譯:查詢表中id字段值小於5,並且gender字段值為“女”的學生姓名
②查詢多個
用兩個AND關鍵字連接了三個條件表達式
翻譯:查詢表中id字段值在7、8、9、10之中,name字段值以字符串“ng”結束,並且grade字段值小於80的記錄
11、帶OR關鍵字的多條件查詢
在使用SELECT語句查詢數據時,也可以使用OR關鍵字連接多個查詢條件,只要記
錄滿足任意一個條件就會被查詢出來。
格式:SELECT *|{字段名1,字段名2,……}
FROM 表名
WHERE 條件表達式1 OR 條件表達式2 […… OR條件表達式n];
①查詢一個
翻譯:查詢表中id字段值小於3或者gender字段值為“女”的學生姓名
②查詢多個
翻譯:查詢表中滿足條件name字段值以字符“h”開始,或者gender字段值為“女”,或者grade字段值為100的記錄
12、OR和AND關鍵字一起使用的情況
注意:AND的優先級高於OR,因此當兩者在一起使用時,應該先運算AND兩邊的條件表達式,再運算OR兩邊的條件表達式。
翻譯:查詢表中gender字段值為“女”或者gender字段值為“男”,並且grade字段值為100的學生姓名
------------------------------------------------------------------------------------------------------------------
高級查詢
13、聚合函數
注意:表中的函數用於對一組值進行統計,並返回唯一值,這些函數被稱為聚合函數。
①COUNT()函數
COUNT()函數用來統計記錄的條數
格式:SELECT COUNT(*) FROM 表名;
翻譯:查詢表中一共有多少條記錄,從查詢結果可以看出,表中一共有16條記錄
②SUM()函數
SUM()是求和函數,用於求出表中某個字段所有值的總和
格式:SELECT SUM(字段名) FROM 表名;
翻譯:求出表中grade字段的總和,所有學生grade字段的總和為1273
③AVG()函數
AVG()函數用於求出某個字段所有值的平均值
格式:SELECT AVG(字段名) FROM 表名;
翻譯:求出表中grade字段的平均值,所有學生grade字段的平均值為79.5625
④MAX()函數
MAX()函數是求最大值的函數,用於求出某個字段的最大值
格式:SELECT MAX(字段名) FROM 表名;
翻譯:求出表中所有學生grade字段的最大值,所有學生grade字段的最大值為100。
⑤MIN()函數
MIN()函數是求最小值的函數,用於求出某個字段的最小值
格式:SELECT MIN(字段名) FROM 表名;
翻譯:求出表中grade字段的最小值,所有學生grade字段的最小值為40。
14、對查詢結果排序
①為了使查詢結果滿足用戶的要求,可以使用ORDER BY對查詢結果進行排序。
格式:SELECT 字段名1,字段名2,……
FROM 表名
ORDER BY 字段名1 [ASC | DESC],字段名2 [ASC | DESC]……
注意:參數ASC表示按照升序進行排序,DESC表示按照降序進行排序。默認情況下,按照ASC方式進行排序。
翻譯:查出表中的所有記錄,並按照grade字段進行排序,從查詢結果可以看到,返回的記錄按照ORDER BY指定的字段grade進行排序,並且默認是按升序排列。
②利用ASC升序排序
翻譯:查出表中的所有記錄,使用參數ASC按照grade字段升序方式排列
從查詢結果可以看到,在ORDER BY中使用了ASC關鍵字,返回結果和①查詢的結果一致。
③使用DESC降序排序
翻譯:查出表中的所有記錄,使用參數DESC按照grade字段降序方式排列
從查詢結果可以看到,在ORDER BY中使用了DESC關鍵字,返回的記錄按照grade字段的降序進行排列。
④一個字段升序一個字段降序
翻譯:查詢表中的所有記錄,按照gender字段的升序和grade字段的降序進行排列
15、分組查詢
可以使用GROUP BY按某個字段或者多個字段中的值進行分組,字段中值相同的為一組。
格式:SELECT 字段1,字段2 ...
FROM 表名
GROUP BY 字段1,字段2 ...[HAVING 條件表達式];
指定的字段名1、字段名2等是對查詢結果分組的依據。HAVING關鍵字指定條件表達式對分組后的內容進行過濾。需要特別注意的是,GROUP BY一般和聚合函數一起使用,如果查詢的字段出現在GROUP BY后,卻沒有沒有包含在聚合函數中,該字段顯示的是分組后的第一條記錄的值,這樣有可能會導致查詢結果不符合我們的預期。
HAVING是用來對分組后的數據再次進行篩選
①單獨使用GROUP BY分組
單獨使用group by關鍵字,查詢的是每個分組中的一條記錄。
翻譯:查詢表中的記錄,按照gender字段值進行分組
②GROUP BY和聚合函數一起使用
GROUP BY和聚合函數一起使用,可以統計出某個或者某些字段在一個分組中的最大值、最小值、平均值等等。
翻譯:將表按照gender字段值進行分組查詢,計算出每個分組中各有多少名學生
③GROUP BY和HAVING關鍵字一起使用
HAVING關鍵字和WHERE關鍵字的作用相同,都用於設置條件表達式對查詢結果進行過濾。
HAVING關鍵字和WHERE關鍵字的區別在於,HAVING關鍵字后可以跟聚合函數,而WHERE關鍵字不能。通常情況下HAVING關鍵字都和GROUP BY一起使用,用於對分組后的結果進行過濾。
翻譯:將表按照gender字段進行分組查詢,查詢出grade字段值之和小於300的分組
16、使用LIMIT限制查詢結果的數量
關鍵字LIMIT可以指定查詢結果從哪一條記錄開始以及一共查詢多少條信息。
格式:SELECT 字段名1,字段名2,……
FROM 表名
LIMIT [OFFSET,] 記錄數
①無偏移量
翻譯:查詢表中的前4條記錄
注意:從查詢結果可以看到,執行語句中沒有指定返回記錄的偏移量,只指定了查詢記錄的條數4,因此返回結果從第一條記錄開始,一共返回4條記錄。
②存在偏移量
翻譯:查詢student表中grade字段值從第5位到第8位的學生(從高到低)
17、函數(列表)
①CONCAT(s1,s2,……)
翻譯:查詢表中的所有記錄,將各個字段值使用下划線“_”連接起來
②IF(expr,v1,v2)
翻譯:查詢表中的id和gender字段值,如果gender字段的值為“男”則返回1,如果不為“男”則返回0
18、為表取別名
①格式:SELECT * FROM 表名 [AS] 別名;
注意:AS關鍵字用於指定表名的別名,它可以省略不寫
翻譯:為表起一個別名s,並查詢student表中gender字段值為“女”的記錄
②格式:SELECT 字段名 [AS] 別名[,字段名 [AS] 別名,……] FROM 表名;
翻譯:查詢表中的所有記錄的name和gender字段值,並為這兩個字段其別名stu_name和stu_gender