MySQL(九)之數據表的查詢詳解(SELECT語法)一


這一篇是MySQL中的重點也是相對於MySQL中比較難得地方,個人覺得要好好的去歸類,並多去練一下題目。MySQL的查詢也是在筆試中必有的題目。希望我的這篇博客能幫助到大家!

重感冒下的我,很難受!keep on going,never givp up.(小編高中最喜歡用的句子,因為只記得這一句)

對數據表數據進行查詢操作,其中可能大家不熟悉的就對於INNER JOIN(內連接)、LEFT JOIN(左連接)、RIGHT JOIN(右連接)等一些復雜查詢,還有多表查詢與子查詢都是應用十分廣泛的。

一、SELECT查詢概述

  1.1、select查詢語法的作用

    1)提取數據(搜索)

    2)提取的數據進行排序(排序)

    3)執行計算匯總

  注意:select語句永遠不會改變數據庫中原始記錄,僅僅是對數據進行提取處理而已。

  1.2、select查詢語法格式

    

    select語法格式簡化為:

      

  1.3、構建查詢環境

    創建一個book表  

create table book(
  b_id varchar(15),
  s_id int not null,
  b_name varchar(30) not null,
  b_price decimal(8,2) not null ,
  primary key (b_id)
);    備注:b_id:主鍵 使用的是VARCHAR類型的字符來代表主鍵,s_id:書籍批發商編號,s_name書名,s_price書的價格.

 

   插入數據

   

  

二、單表查詢

  單表查詢的主要操作有:查詢所有字段、查詢指定字段、查詢指定記錄、帶IN關鍵字的查詢、帶BETWEEN AND 的范圍查詢、帶LIKE的字符匹配查詢、查詢空值  

               帶AND的多條件查詢、帶OR的多條件查詢、關鍵字DISTINCT(查詢結果不重復)、對查詢結果排序、分組查詢(GROUP BY)、使用LIMIT限制查詢結果的數量

  2.1、查詢所有字段

    select * from book;

   

  2.2、查詢指定字段

    select b_name,b_price from book;

   

  2.3、查詢指定記錄

    指定記錄:也就是按條件進行查詢,將滿足一定條件的記錄給查詢出來,使用WHERE關鍵字

    select * from book where b_price>50;

    

  2.4、帶IN關鍵字的查詢

     IN關鍵字:IN(xx,yy,...) 滿足條件范圍內的一個值即為匹配項(IN前面可以加NOT)

      select * from book where book.b_name in('ajax','io');

    

  2.5、帶BETWEEN AND 的范圍查詢

    BETWEEN ... AND ... : 在...到...范圍內的值即為匹配項(between前面可以加NOT)

    select * from book where b_price not between 10 and 50;

    

  2.6、帶LIKE的字符匹配查詢

    LIKE: 相當於模糊查詢,和LIKE一起使用的通配符有  "%"、"_"  

       "%":作用是能匹配任意長度的字符。

       "_":只能匹配任意一個字符

    select * from book where book.b_name like 's%'; //查詢以s開頭的書名

    

     select * from book where book.b_name like '__a_';//查詢前面任意兩個字符后面為a,在后面為任意字符的四個字符的書名

    

    總結:'%'和'_'可以在任意位置使用,只需要記住%能夠表示任意個字符,_只能表示一個任意字符

  2.7、查詢空值

    空值不是指為空字符串""或者0,一般表示數據未知或者在以后在添加數據,也就是在添加數據時,其字段上默認為NULL,也就是說,如果該字段上不插入任何值,就為NULL。此時就可以查詢出來。 

        SELECT * FROM 表名 WHERE 字段名 IS NULL;  //查詢字段名是NULL的記錄

        SELECT * FROM 表名 WHERE 字段名 IS NOT NULL;  //查詢字段名不是NULL的記錄

  2.8、 帶AND的多條件查詢

    AND: 相當於"邏輯與",也就是說要同時滿足條件才算匹配

    select * from book where book.s_id=40 and book.b_price>60;//查詢s_id為100,且價格大於60的書

    

  2.9、帶OR的多條件查詢

    OR: 相當於"邏輯或",也就是說只要滿足其中一個條件,就算匹配上了,跟IN關鍵字效果差不多

     select * from book where book.s_id=40 or book.b_price>60;//查詢s_id為100或者價格大於60的書

      

  2.10、關鍵字DISTINCT(查詢結果不重復)

    使用DISTINCT就能消除重復的值

    

  2.11、對查詢結果排序

    看上面輸出的值沒順序,可以給他們進行排序。使用關鍵字 ORDER BY,有兩個值供選擇 DESC 降序 、 ASC 升序(默認值)

    select distinct s_id from book order by s_id;

    默認為升序

    select distinct s_id from book order by s_id desc;

    

  2.12、分組查詢(GROUP BY)

     分組查詢就是將相同的東西分到一個組里面去,現實生活中舉個例子,廁所分男女,這也是一個分組的應用,在還沒有分男女廁所前,大家度共用廁所,后面通過分男女性別,男的跟男的分為一組,女的和女的分為一組,

          就這樣分為了男女廁所了。這就是分組的意思, 在上面對s_id進行查詢的時候,發現很多重復的值,我們也就可以對它進行分組,將相同的值分為一組

     1)select s_id from book group by s_id;  //將s_id進行分組,有實際意義,按書批發商進行分組,從40批發商這里拿的書籍會放在40這個組中

      

      解釋:將s_id分組后,就沒有重復的值了,因為重復的度被分到一個組中去了,現在在來看看每個組中有多少個值

    2)COUNT()作用就是計算有多少條記錄, 

      GROUP_CONCAT(): 將分組中的各個字段的值顯示出來 

      select s_id,count(b_name),group_concat(b_name),group_concat(b_price) from book group by s_id;

      

       分組之后還可以進行條件過濾,將不想要的分組丟棄,使用關鍵字 HAVING

      select s_id,count(b_name),group_concat(b_name),group_concat(b_price) from book group by s_id having count(b_name)>2;

      

    總結:知道GROUP BY的意義,並且會使用HAVING對分組進行過濾, HAVING和WHERE都是進行條件過濾的,區別就在於 WHERE 是在分組之前進行過濾,而HAVING是在分組之后進行條件過濾

  2.13、使用LIMIT限制查詢結果的數量

    LIMIT[位置偏移量] 行數  通過LIMIT可以選擇數據庫表中的任意行數,也就是不用從第一條記錄開始遍歷,可以直接拿到 第5條到第10條的記錄,也可以直接拿到第12到第15條的記錄。、

    1)select * from book limit 4;  //沒有寫位置偏移量,默認就是0,也就是從第一條開始,往后取4條數據,也就是取了第一條數據到第4條的數據。

      

    2)select * from book limit 3,3; //從第4條數據開始,往后取3條數據,也就是從第4條到第7條

      

三、組函數(集合函數)查詢

  MySQL中組函數有COUNT()函數、SUM()函數、AVG()函數、MAX()函數、MIN()函數

  3.1、COUNT()

    COUNT(*):計算表中的總的行數,不管某列有數值或者為空值,因為*就是代表查詢表中所有的數據行

    COUNT(字段名):計算該字段名下總的行數,計算時會忽略空值的行,也就是NULL值的行

    例如:查看一下book表中的總記錄數

      沒有空值,所以計算出來的行數和總的記錄行數是一樣的。

  3.2、SUM()

    SUM()是一個求總和的函數,返回指定列值的總和

    例如:計算一下所有書的總價

    

  3.3、AVG()

    AVG()函數通過計算返回的行數和每一行數據的和,求的指定列數據的平均值(列數據指的就是字段名下的數據,不要搞不清楚列和行,搞不清就對着一張表搞清楚哪個是列哪個是行),通俗點講,就是將計算得來的總之除以總的記錄數,得出一個平均值。

    例如:求所有書的平均價格

      

  3.4、MAX()

    MAX()返回指定列中的最大值

    例如:求所有書中最貴的一本

      

  3.5、MIN()

    MIN()返回查詢列中的最小值

    例如:求所有書中最便宜的一本

      

 

  覺得不錯的老哥,點個“”推薦“”!


免責聲明!

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



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