單表查詢Ⅱ


單表查詢

先把該鋪墊的鋪墊好

建表--插入數據--查詢數據

 

 

接上一篇~~~~

4、在SELECT語句中,最常見的是使用WHERE子句指定查詢條件對數據進行過濾

     格式:SELECT 字段名1,...,字段名n FROM 表名 WHERE 條件表達式;

 

常見的關系運算符

 

 

①查詢表中id4的學生姓名

 

 

 ②查看表中成績大於90的數據

 

 

 

 5、帶IN關鍵字的查詢

  IN關鍵字用於判斷某個字段的值是否在指定集合中

  格式:SELECT *|字段名1,...,字段名n FROM 表名 WHERE

       字段名[NOT] IN(字段名1,...,字段名n)

 

 

                             如上兩圖所示,很容易看出兩者間的區別

                    譯1id123的記錄

                    譯2id不為123的記錄

注意:在上面的語法格式中,“元素1、元素2…”表示集合中的元素,即指定的條件范圍。NOT是可選參數,使用NOT表示查詢不在IN關       鍵字指定集合范圍中的記錄。

6、帶BETWEEN  AND關鍵字的查詢

   格式:SELECT *|字段名1,...,字段名n FROM 表名 WHERE

        字段名[NOT] BETWEEN 值1 ADD 值2

   注意:“值1”表示范圍條件的起始值,“值2”表示范圍條件的結束值

            通常情況下“值1”小於“值2”,否則查詢不到任何結果。

 

                                    如上兩圖所示,很容易看出兩者間的區別

                             譯1id2-5之間的記錄

                             譯2id不為2-5之間的記錄

7、空值查詢

使用IS NULL關鍵字來判斷字段的值是否為空值

  格式:SELECT *|字段名1,...,字段名n FROM 表名 WHERE

       字段名 IS [NOT] NULL

 

 

                        如上兩圖所示,很容易看出兩者間的區別

                      譯1gender為空的記錄

                      譯2gender不為空的記錄

8、DISTINCT關鍵字的查詢

   使用DISTINCT關鍵字來去掉查詢記錄中重復的值。

 ①  格式:SELECT DISTINCT 字段名 FROM 表名;

 

從查詢記錄可以看到,這次查詢只返回了3條記錄的gender值,分別為“NULL”,不再有重復值。

②DISTINCT關鍵字作用多個字段

格式:SELECT DISTINCT 字段名1,字段名2……FROM 表名;

注意:只有多個字段的值都相同才會被認為是重復的

      (查詢表中的gendername字段)

 

附:為了下面的操作,重新在表中增加了值

 

 

9、帶LIKE關鍵字的查詢

LIKE關鍵字用於對字符串進行模糊查詢

SELECT *或字段名1,字段名2……

FROM 表名WHERE 字段名【NOTLIKE “匹配字符串

匹配字符串指定用來匹配的字符串,其值可以是一個普通字符串,也可以是包含%_的通配字符串。

使用百分號通配符查詢

百分號通配符:一個百分號可以匹配任意多的字符,包括空字符

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字段值在78910之中,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 BYHAVING關鍵字一起使用

 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)

 

翻譯:查詢表中的idgender字段值,如果gender字段的值為“男”則返回1,如果不為“男”則返回0

18、為表取別名

格式:SELECT * FROM 表名 [AS] 別名;

注意:AS關鍵字用於指定表名的別名,它可以省略不寫

 

 

 翻譯:為表起一個別名s,並查詢student表中gender字段值為“女”的記錄

格式:SELECT 字段名 [AS] 別名[,字段名 [AS] 別名,……] FROM 表名;

 

翻譯:查詢表中的所有記錄的namegender字段值,並為這兩個字段其別名stu_namestu_gender

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM