溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

mysql 基礎(chǔ)篇-數(shù)據(jù)查詢(1)

發(fā)布時(shí)間:2020-07-18 23:17:44 來(lái)源:網(wǎng)絡(luò) 閱讀:421 作者:tianfo 欄目:MySQL數(shù)據(jù)庫(kù)

一、查詢數(shù)據(jù)的概念:查詢數(shù)據(jù)、篩選數(shù)據(jù)、確定數(shù)據(jù)的以什么樣的格式輸出。

二、數(shù)據(jù)查詢的基本語(yǔ)句

   1、基本語(yǔ)句格式 :select 字段列表  FROM 表或者視圖  where 查詢條件

   2.1 單表查詢的內(nèi)容:查詢所有字段、查詢指定字段、查詢指定記錄、查詢空值、多條件的查詢

對(duì)查詢結(jié)果進(jìn)行排序。

 2.1.1  查詢所有字段,通過* 通配符來(lái)實(shí)現(xiàn)。

        SELECT * FROM fruits;(*代表所有的表中的字段,fruits是表名)

      數(shù)據(jù)返回的時(shí)候按照定義表時(shí)候的順序顯示的。

      一般不推薦使用*查詢所有的數(shù)據(jù),不然會(huì)降低查詢和所使用得應(yīng)用程序的效率

2.1.2 查詢指定單個(gè)字段:

      SELECT f_name FROM fruits (f_name 是fruits表中的一個(gè)列)

2.1.3 查詢多個(gè)字段:

      SELECT f_name, f_price FROM fruits;(f_name,f_price 都是fruits的一個(gè)列)。    

      不同字段名稱之間要用逗號(hào)分隔開。

2.2通過where來(lái)寫條件 進(jìn)行數(shù)據(jù)的過濾篩選

 SELECT 字段名1...n FROM 表名 WHERE 查詢條件

2.2.2  條件判斷符  大于(>), 小于(<) ,大于等于 (>=) ,小于等于(<=)  ,不等于(!= <>) ,之間(BETWEEN).

2.2.3 等于 (用來(lái)比較字符串和數(shù)值)

       SELECT f_name, f_price FROM fruits WHERE f_price =10.2;

       SELECT f_name, f_price FROM fruits WHERE f_name='apple';

2.2.4 小于  

        SELECT f_name,f_price FROM fruits WHERE f_price <10.00;

2.2.5 帶 IN關(guān)鍵字的查詢   用來(lái)查詢滿足指定范圍內(nèi)的條件的記錄,只要滿足條件范圍內(nèi)的一個(gè)值即為匹配。

     SELECT s_id, f_name, f_price FROM fruits  WHERE s_id IN(101,102) ORDER BY f_name;

 NOT IN:

    SELECT s_id ,f_name, f_price FROM fruits WHERE  s_id IN(101,102)  ORDER BY f_name;


2.2.6  between ... and ...

    SELECT f_name ,f_price FROM fruits WHERE f_price BETWEEN 2.00 AND 10.20;

not between .... and....

    SELECT f_name ,f_price FROM fruits WHERE f_price NOT BETWEEN  2.00 AND 10.20;

2.3.1 LIKE 的字符匹配查詢, 配合LIKE 使用的通配符是 %   和 _。

2.3.2 % 匹配任意長(zhǎng)度的字符,甚至包括零字符,%可以放在不同的位置。

     SELECT f_id, f_name FROM fruits WHERE f_name LIKE 'b%'; (查找以b 字開頭的水果)

     SELECT f_id , f_name FROM fruits WHERE f_name  LIKE '%g%'(查找名字中含g的水果)

2.3.3  _ 下劃線通配符,一次只能匹配任意一個(gè)字符。

      SELECT f_id, f_name FROM fruits WHERE f_name LIKE '____y';

2.4.1 查詢空值 : 空值不同于0,也不同于空字符串,,空值一般表示數(shù)據(jù)未知,不適用或?qū)⒃谝院筇砑訑?shù)據(jù)。

       SELECT c_id, c_name, c_email FROM customers WHERE c_email IS NULL;

   NOT IS NULL: 

       SELECT c_id,c_name,c_email FROM customers WHERE c_email NOT IS NULL;

2.5.1  AND 操作符限定只有滿足所有查詢條件的記錄才會(huì)被返回,可以使用AND 鏈接多個(gè)甚至多個(gè)查詢條件,多個(gè)條件之間用AND分開。

     SELECT f_id, f_price ,f_name FROM fruits WHERE s_id ='101' AND f_price >=5;

     可以有多個(gè)過濾條件,  增加條件的同時(shí)增加一個(gè)關(guān)鍵字AND

     SELECT  f_id ,f_price ,f_name FROM fruits 

     WHERE s_id IN(101,102)   AND f_price >=5 AND f_name= 'apple';

2.6.1 OR 表示只需要滿足其中一個(gè)條件的記錄即可返回?cái)?shù)據(jù),OR可以連接多個(gè)甚至多個(gè)查詢條件,多個(gè)條件表達(dá)式之間使用OR分開。

    SELECT s_id ,f_name,f_price FROM fruits WHERE s_id =101 OR s_id =102;

    IN 和 OR 的操作符使用后結(jié)果是一樣的,但是使用IN操作符使得檢索語(yǔ)句更加簡(jiǎn)明,并且IN執(zhí)行的速度要快于OR ,使用IN操作符,可以執(zhí)行更加復(fù)雜的嵌套查詢。

    AND 的優(yōu)先級(jí)高于 OR。

2.7.1 查詢結(jié)果不重復(fù)   distinct 消除重復(fù)的值

SELECT DISTINCT  s_id FROM fruits;

2.8.1 對(duì)查詢結(jié)果進(jìn)行排序

    SELECT f_name FROM fruits ORDER BY f_name;   默認(rèn)應(yīng)該都是升序。

 2.8.2  多列排序  對(duì)多列數(shù)據(jù) 進(jìn)行排序,需將需要排序的列之間用逗號(hào)隔開。

   SELECT f_name, f_price FROM fruits ORDER BY f_name, f_price;

在對(duì)多列進(jìn)行排序的時(shí)候,首先排序的第一列必須有相同的列值,才會(huì)對(duì)第二列進(jìn)行排序。如果第一列數(shù)據(jù)中的所有值都是唯一的,將不再對(duì)第二列進(jìn)行排序。

2.8.3 指定排序的方向  通過關(guān)鍵字DESC來(lái)實(shí)現(xiàn)

SELECT f_name ,f_price FROM fruits ORDER BY f_price DESC;  降序

 ASC 是升序, 在排序的時(shí)候 ASC是作為默認(rèn)的排序方式,所以加不加都可以。

要對(duì)多列都進(jìn)行降序排序,必須要在每一列的列名后面都要加DESC 關(guān)鍵字

SELECT f_price, f_name FROM fruits ORDER BY f_price DESC ,f_name DESC;

2.9.1 分組查詢  分組查詢是對(duì)數(shù)據(jù)按照某個(gè)或者多個(gè)字段進(jìn)行分組。 使用GROUP BY 關(guān)鍵字對(duì)數(shù)據(jù)進(jìn)行分組。

2.9.2 基本語(yǔ)法: GROUP BY 字段 HAVING 條件表達(dá)式

  字段值為進(jìn)行分組時(shí)所依據(jù)的列名稱;‘HAVING(條件表達(dá)式)’ 指定滿足表達(dá)式限定條件的結(jié)果將被顯示。

2.9.3 GROUP BY 關(guān)鍵字通常和集合函數(shù)一期使用 如:MAX()、 MIN()、COUNT()、SUM()、AVG()

        SELECT s_id, COUNT(*)  AS total FROM fruits GROUP BY s_id;

        SELECT s_id,GROUP_CONCAT(f_name) AS Names FROM fruits GROUP BY s_id;

  2.9.4  GROUP BY 可以和HAVING 一起限定顯示記錄所需滿足的條件,只有滿足條件的分組才能會(huì)被顯示。

       SELECT s_id, GROUP_CONCAT(f_name) AS Names

       FROM fruits

       GROUP BY s_id HAVING COUNT(f_name)>1 ;

2.9.5 HAVING 和WHERE 的區(qū)別 :HAVING在數(shù)據(jù)分組之后進(jìn)行過濾來(lái)選擇分組,而WHERE 在分組之前用來(lái)選擇記錄,在WHERE 排除的記錄不在包括在分組內(nèi)。

2.9.6 GROUP BY 中使用 WITH ROLLUP

       使用WITH ROLLUP 后,在所有查詢出的分組之后增加一條記錄,該記錄計(jì)算查詢出的所有記錄的綜合,即統(tǒng)計(jì)數(shù)量。

      SELECT s_id ,COUNT(*) AS Total FROM fruits GROUP BY s_id WITH ROLLUP;

2.9.7 多字段分組   實(shí)驗(yàn)無(wú)法成功。

2.9.8 GROUP BY 和 ORDER BY 一起使用

      SELECT o_num, SUM(quantity* item_price)  AS orderTotal  

      FROM orderitems

     GROUP BY o_num

     HAVING SUM(quantity*item_price) >=100;

3.1.1 LIMIT 限制查詢結(jié)果的數(shù)量

 SELECT * FROM fruits LIMIT 4;  顯示查詢結(jié)果的前4行

 SELECT * FROM fruits LIMIT4,3; 顯示從第五行開始后的三條記錄。

4.1.1 使用聚合函數(shù)查詢

  功能:計(jì)算數(shù)據(jù)表中記錄行數(shù)的總數(shù)、計(jì)算某個(gè)字段列下數(shù)據(jù)的總和,以及計(jì)算表中某個(gè)字段下的最大值、最小值或者平均值。

 AVG (某列的平均數(shù)) COUNT (某列的行數(shù)) MAX (某列的最大值)MIN(某列的最小值) SUM(某列值得和)


4.1.2 COUNT()函數(shù)

      COUNT(*) 計(jì)算表中總的行數(shù),不管某列有數(shù)值或者為空值。

       SELECT COUNT(*)   AS cust_num FROM customers;

       

      COUNT(字段名) 計(jì)算機(jī)指定列下總的行數(shù),計(jì)算時(shí)忽略空值的行

      SELECT COUNT(o_email)   AS email_num FROM customers;

4.1.2   COUNT  GROUP BY

     SELECT o_num, COUNT(f_id)

     FROM orderitems

    GROUP BY o_num;

   GROUP BY 關(guān)鍵字先按照哦訂單號(hào)進(jìn)行分組,然后計(jì)算每個(gè)分組中的總記錄數(shù)。

4.1.3 SUM  

      SELECT SUM(quantity)  AS items_total

       FROM orderitems

       WHERE o_num =30005;


   SELECT o_num ,SUM(quantity)   AS items_total

   FROM orderitems

   GROUP BY o_num;


count 行的總和, sum 是列的值得總和。

4.1.4 AVG

       SELECT AVG(f_price)   AS avg_price

       FROM fruits

       WHERE s_id=103;

  

       SELECT s_id, AVG(f_price )   AS avg_price

        FROM  fruits

       GROUP BY s_id;

  AVG()函數(shù)使用時(shí),其參數(shù)為要計(jì)算的列名稱,如果要得到多個(gè)列的多個(gè)平均值,則需要在每一列上使用AVG()函數(shù)

4.1.5 MAX() 函數(shù)

      SELECT MAX(f_price)  AS max_price FROM fruits;

      

       SELECT s_id, MAX(f_price)   AS max_price FROM fruits GROUP BY s_id;


      SELECT MAX(f_name)   FROM fruits;


     MAX  可以對(duì)字母進(jìn)行大小判斷,并返回最大的字符或者字符串值。

4.1.6   MIN()函數(shù)

     SELECT MIN(f_price)  AS min_price FROM fruits;

     

     SELECT s_id ,MIN(f_price)   AS min_price

     FROM fruits

     GROUP BY s_id;

GROUP BY 關(guān)鍵字 根據(jù) s_id 字段對(duì)記錄進(jìn)行分組,然后計(jì)算出每個(gè)分組中的最小值。

5.1.1  連接是數(shù)據(jù)庫(kù)模型的主要特點(diǎn)。主要包含內(nèi)連接,外連接等。

5.1.2 內(nèi)連接查詢

        使用標(biāo)膠運(yùn)算符進(jìn)行表間某列數(shù)據(jù)的比較操作,并列出這些表中與連接條件相匹配的數(shù)據(jù)行,組合成新記錄。

       SELECT suppliers.s_id, s_name,f_name, f_price 

       FROM fruits ,suppliers

       WHERE  fruits.s_id =suppliers.s_id;

      SELECT后面指定的列分別屬于兩個(gè)不同的表。 WHERE 子句作為過濾條件,指明只有兩個(gè)表中的s_id字段值相等的時(shí)候才符合連接查詢的條件。

       SELECT suppliers.s_id,s_name, f_name, f_price

       FROM fruits INNER JOIN suppliers

       ON fruits.s_id = suppliers.s_id;


      INNER JOIN 是標(biāo)準(zhǔn)規(guī)范

5.1.3 在一個(gè)連接查詢中,涉及的兩個(gè)表都是同一個(gè)表,這種查詢稱為自連接查詢。自連接查詢是一種特殊的內(nèi) 連接,它是指相互連接的表在物理上為同一張表,但在邏輯上分為兩張表。

     SEELCT f1.f_id ,f1.f_name

      FROM fruits AS f1 , fruits AS f2

      WHERE f1.s_id = f2.s_id AND f2.f_id = 'a1';







向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI