MySQL系列:單表&多表數據查詢

1、查詢相關概念正則表達式

  1.笛卡爾件表系返回的緩存

        表一字段a,行b;表二字段c,行dide

        表一和表二的笛卡爾:字段=a+c =b*d優化

  2.鏈接類型spa

      內連接(INNER JOIN):表系笛卡爾積數據,保留表系中全部匹配記錄xml

      天然根據表系中相同名的字段自動進記錄匹配,再去重排序

                             內連查詢中存在的一特殊的等值連接,表其自身element

      值連系笛卡爾中,選擇所匹配字段相等的記錄字符串

      不等值連!=it

  3.鏈接方式

           接(OUTER JOIN系笛卡爾積數據,不保留表中全部匹配據,還會保留部分不匹配的記錄

              查詢返回操做表中至少一表的全部

           左外系笛卡爾積數據除了選擇匹配數則記錄包含關聯左表中不匹配記錄,以左主保留

FROM tb1 LEFT JOIN tb2 ON tb1.col=tb2.col

           右外…右

FROM tb1 RIGHT JOIN tb2 ON tb1.col=tb2.col

           全外…左右兩邊表全

  4.查詢(嵌套查詢):查詢之中嵌套了其餘若干查詢

      子查詢:在查詢語句嵌套着查詢語句 基於某語句的查詢結果再次進行的查詢

    IN:主查詢件是子查詢查詢結

    ANY:主查詢爲滿足子查詢查詢返回查詢結果中任意一條數

                = ANY > ANY < ANY

    ALL:主查詢爲滿足子查詢查詢返回查詢結果中全部

    EXISTS:布爾型,ture&false

 

 

 

2、單查詢

  1.基本介紹

    (1)SELECT原理

           Query Cache查詢緩存組件,再查詢結果肯定是有用

查詢執行路徑中的組件:查詢緩存、解析器、預處理器、優化器、查詢執行引擎、存儲引擎;

    (2)SELECT語句的執行流程

FROM Clause --> WHERE Clause --> GROUP BY --> HAVING Clause --> ORDER BY --> SELECT --> LIMIT

    (3)單表查詢語法

SELECT

    [ALL | DISTINCT | DISTINCTROW ]

      [SQL_CACHE | SQL_NO_CACHE]

    select_expr [, select_expr ...]

    [FROM table_references

    [WHERE where_condition]

    [GROUP BY {col_name | expr | position}

      [ASC | DESC], ... [WITH ROLLUP]]

    [HAVING where_condition]

    [ORDER BY {col_name | expr | position}

      [ASC | DESC], ...]

    [LIMIT {[offset,] row_count | row_count OFFSET offset}]

    [FOR UPDATE | LOCK IN SHARE MODE]

       說明:

1) DISTINCT數據去重;

2) SQL_CACHE: 顯式指定存儲查詢結果於緩存之中;

    SQL_NO_CACHE: 顯式查詢結果不予緩存;

  說明:

         query_cache_type的值爲'ON'時,查詢緩存功能打開;

            SELECT的結果符合緩存條件即會緩存,不然,不予緩存;顯式指定SQL_NO_CACHE,不予緩存;

         query_cache_type的值爲'DEMAND'時,查詢緩存功能按需進行;

                  顯式指定SQL_CACHE的SELECT語句纔會緩存;其它均不予緩存;

3) 字段顯示能夠使用別名:col1 AS alias1, col2 AS alias2, ...

4) WHERE子句:指明過濾條件以實現「選擇」的功能過濾條件布爾型表達式;

      支持語法格式:

算術操做符:+, -, *, /, %

比較操做符:=, !=, <>, <=>, >, >=, <, <=

邏輯操做符:NOTANDORXOR

BETWEEN min_num AND max_num

IN (element1, element2, ...)

IS NULL:爲空值

IS NOT NULL:非空

LIKE %表示任意長度的任意字符_表示任意單個字符;

RLIKE:

REGEXP:匹配字符串可用正則表達式書寫模式;

5) GROUP:根據指定的條件把查詢結果進行「分組」以用於作「聚合」運算:

6) HAVING: 對分組聚合運算後的結果指定過濾條件;

7) ORDER BY: 根據指定的字段對查詢結果進行排序;

升序:ASC降序:DESC

8) LIMIT [[offset,]row_count]:對查詢的結果進行輸出行數數量限制;

9) 對查詢結果中的數據請求施加「鎖」:

FOR UPDATE: 寫鎖,排他鎖;

LOCK IN SHARE MODE: 讀鎖,共享鎖

 

  2.避免重複查詢

          SELECT  DISTINCT field1,field n FROM table_name

        注意:則運算:用AS義別名,或省略AS關鍵

  3.示格式查詢

           SELECT  CONCAT(field格式) AS 名】FROM table_name

  4.查詢

        SELECT field1,field n FROM table_name WHERE CONDITION

               _通配符:匹配一字符

              %通配符:任意度字符

  5.排序查詢

        SELECT field1,field n FROM table_name WHERE CONDITION  ORDER  BY  filedldm1 [ASC|DESC] [,filedldm1 [ASC|DESC],]

  6.限制記錄查詢數

         SELECT field1,field n FROM table_name WHERE CONDITION  LIMIT  OFFSET_START,ROW_COUNT

  7.統計和分組數記錄查詢

         COUNT()AVG()SUM()MAX()MIN()

  8.組數查詢

        SELECT function() FROM table_name WHERE CONDITION GROUP BY field

  9.實現統計功能的分組數查詢

         SELECT  GROUP_CONCAT(field)  FROM table_name  WHERE CONDITION GROUP BY field

  10.多字段分組查詢

         SELECT  GROUP_CONCAT(field), function(field) FROM table_name  WHERE CONDITION GROUP BY field1,field2……fieldn

  11.HAVING子句限定分組查詢

          SELECT  function(field)  FROM table_name  WHERE CONDITION  GROUP BY field1,field2……fieldn HAVING CONTITION

     注意:

             WHERE:實現條件限制記錄

             HAVING:實現條件限制分組數記錄

 

 

 

3、多表查詢

  1.多表查詢實現方式

    (1) FROM子句利用(,)分多表,在WHERE子句中通過邏輯來實現匹配

    (2) FROM子句用 」JOIN ON」ON後接

 

  2.子查詢

  (1)用在WHERE子句中的子查詢

        1) 用於比較表達式中的子查詢;子查詢僅能返回單個值;

      SELECT Name,Age FROM students WHERE Age>(SELECT avg(Age) FROM students);

        2) 用於IN中的子查詢:子查詢應該單鍵查詢並返回一個或多個值從構成列表;

      SELECT Name,Age FROM students WHERE Age IN (SELECT Age FROM teachers);

        3) 用於EXISTS;

    (2)用於FROM子句中的子查詢

使用格式:SELECT tb_alias.col1,... FROM (SELECT clause) AS tb_alias WHERE Clause;

示例:

                SELECT s.aage,s.ClassID FROM (SELECT avg(Age) AS aage,ClassID FROM students WHERE ClassID IS NOT NULL GROUP BY ClassID) AS s WHERE s.aage>30;

    (3)聯合查詢:UNION

  SELECT Name,Age FROM students UNION SELECT Name,Age FROM teachers;

相關文章
相關標籤/搜索