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子句:指明過濾條件以實現「選擇」的功能;過濾條件爲布爾型表達式;
支持語法格式:
算術操做符:+, -, *, /, %
比較操做符:=, !=, <>, <=>, >, >=, <, <=
邏輯操做符:NOT、AND、OR、XOR
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;