查詢語句類型: 簡單查詢 多表查詢 子查詢(嵌套查詢) 查詢語法: SELECT field_name :field_name為欄位名,選擇要查詢的列 FROM table_name :database_name為資料庫名,選擇要查詢的數據表 [ WHERE condition ] : condit ...
查詢語句類型:
簡單查詢
多表查詢
子查詢(嵌套查詢)
查詢語法:
SELECT field_name :field_name為欄位名,選擇要查詢的列
FROM table_name :database_name為資料庫名,選擇要查詢的數據表
[ WHERE condition ] : condition 為查詢條件,只有滿足where後麵條件,才將相應就結果輸出
[ DISTINT ] :過濾掉重覆的行
[ ORDER BY filed_name [ASC|DESC] ] :filed_name為欄位名, 以指定的列排序, ASC 升序(預設),DESC降序
[ HAVING condition ] : condition 為查詢條件, having 只能和group by 一起使用,用於對分組結果過濾
[ LIMIT [offset,]Count ] : [offset,]Count 從第offset開始顯示(註意第一行為0),顯示count個
簡單查詢
1.SELECT * FROM tb_name; * 代表所有列,如果只輸出指定欄位,則把“* ” 代替為指定欄位名
查詢tb_book表中的所有數據:select * from tb_book ;
2. SELECT field1,field2 FROM tb_name; 只輸出指定欄位稱為 投影
只查詢tb_book表中id和 books 的欄位: select id,books from tb_book ;
3.SELECT * FROM tb_name WHERE 條件; 只輸出符合條件的行稱為 選擇
查看tb_book表中sort列的值是基礎類的記錄: select * from tb_book where sort='基礎類' ;
DISTINCT 相同的值只顯示一次(過濾掉重覆的行)
查詢tb_book表中sort欄位有幾種類型: select distinct sort from tb_book ;(註意用distinct 過濾掉重覆的行)
不加distinct的結果如下:
WHERE子句:後面跟布爾關係表達式
SELECT * FROM tb_name WHERE 條件
比較運算符:
1. =、>、>=、<=、< 數值比較不加引號,字元串比較加引號
例如: select * from tb_book where sort='基礎類' ; 查看tb_book表中sort列的值是基礎類的記錄:
2. BETWEEN 值1 AND 值2 :在值1和值2(包括值1和值2) 之間則匹配
查詢出tb_book表中id列的值在20~30中間的記錄:select * from tb_book where id between 20 and 30 ;
3. LIKE ‘’
%: 匹配任意長度任意字元
_:匹配任意單個字元
4. REGEXP, RLIKE 支持正則表達式
5. IN ("value1" ,"value2"……) 在列表中的任意一個,則匹配
6. IS NULL 判斷是否為空,為空則匹配
7. IS NOT NULL 判斷是否不為空,不為空則匹配
邏輯運算符:
1. AND 同時滿足所有條件
2. OR 滿足任意一個條件
3. NOT 不滿足指定條件,則匹配
ORDER BY field_name {ASC|DESC} : 查詢結果排序(ASC升序,DESC降序) ,預設為ASC
語法: select 列名 from 表名 order by 以那個列排序 [ASC|DESC]
欄位別名:AS
select name as student_name from student; 顯示時顯示為student_name不是name
LIMIT子句:
LIMIT [offset,]Count 從第offset開始顯示(註意第一行為0),顯示count個
聚合:
SUM(), 求某個欄位值的總和
MIN(),求某個欄位值的最小值
MAX(), 求某個欄位值的最大值
AVG(), 求某個欄位值的平均值
COUNT() 返回所選列中非NULL值的行的數目
GROUP BY: 分組
HAVING 條件(having 只能和group by 一起使用,用於對分組結果過濾)
執行次序如圖所示
多表查詢:
連接: 交叉連接(笛卡爾乘積)::用一個表中的每一行與另一個表中的每一行相連接 自然連接(內連接):將兩種表中相應欄位的值逐一比較,只列出那些等值關係的行 外連接: 左外連接:select 欄位名 from 表名1 LEFT JOIN 表名2 ON 表名1.欄位名= 表名2.欄位名
返回除內連接的數據外,還包括左表中不符合條件的數據,(也就是說左外連接包括左表的所有數據)併在右表的相應列添加空 右外連接:select 欄位名 from 表名1 RIGHT JOIN 表名2 ON 表名1.欄位名= 表名2.欄位名
返回除內連接的數據外,還包括右表中不符合條件的數據,(也就是說右外連接包括右表的所有數據)併在左表的相應列添加空
自連接(表必須使用別名):
子查詢:
在外面一層的查詢中使用裡面一層查詢產生的結果,當遇到多層查詢時,mysql從最內層的查詢開始,然後從它開始向外向上移動到外層(主)查詢,在這個過程中每個查詢產生的結果集都被賦給包圍它的父查詢
1.比較操作中使用子查詢:子查詢只能返回單個值;
語法: select 列名 from 表名 where 欄位名 比較運算符 (子查詢)
比較運算符包括 =,!=,>,>=,<,<=。
註意:用"()" 括住子查詢,只有子查詢的結果只能返回一個值,比較運算符才適用
2.IN()中使用子查詢:假如一個子查詢返回結果有多個,這時比較運算符就必須用關鍵字IN代替
語法: select 列名 from 表名 where 欄位名 in (子查詢)
註意:用"()" 括住子查詢,子查詢的結果可以有多個
3.帶關鍵字EXISTS的子查詢: 使用關鍵字exists時,內查詢語句不返回查詢的記錄,而是返回一個真假值,如果內查詢語句查詢到滿足條件的記錄,就返回一個真值(True),否則 將返回一個假值(false)。當返回的值為true時,外查詢語句將進行查詢,當返回的值為false時,外查詢語句就不進行查詢或查詢不出任何記錄。
語法: select 列名 from 表名 where exists (子查詢)
註意:用"()" 括住子查詢, NOT EXISTS 剛好與EXISTS 相反.
4.帶關鍵字ANY的子查詢:any 表示滿足其中任意一個條件。使用關鍵字any時,只要滿足內查詢語句返回的結果中的任意一個,就可以通過該條件執行外查詢
select 列名 from 表名 where 欄位名 比較運算符 any (子查詢)
5..帶關鍵字ALL的子查詢:all表示滿足所有條件。使用關鍵字all時,只有滿足內查詢語句返回的所有結果,才可以執行外查詢
select 列名 from 表名 where 欄位名 比較運算符 all (子查詢)
聯合查詢:聯合查詢結果是將多個select 語句的查詢結果合併到一起,
關鍵字UNION:將所有的查詢結果合併到一起 ,然後去除相同的記錄
關鍵字UNION ALL:只是簡單將結果和併到一起
(select 1) UNION (select 2); 將兩個查詢結果合併起來
視圖: 存儲下來的SELECT語句;(在MySQL中用處不大,跟安全相關時有意義)
基於基表的查詢結果;
CREATE
[OR REPLACE]
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
[DEFINER = { user | CURRENT_USER }]
[SQL SECURITY { DEFINER | INVOKER }]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
顯示創建某個表、視圖、資料庫等用了什麼語句
SELECT CREATE {DATABASE | TABLE | VIEW} NAME
廣義查詢:
DML:
DELETE
INSERT INTO
UPDATE
INSERT INTO tb_name (col1, col2, ...) VALUES (val1, val2, ...)[,(val1, val2, ...),...]
INSERT INTO tb_name SET col1= ,col2= ,....
INSERT INTO tb_name (col1,col2...) SELECT ....
字元型:單引號
數值型:不需要引號
日期時間型:
空值:NULL, ''
REPLACE INTO 與INSERT類似
DELETE:
DELETE FROM tb_name WHERE condition;
TRUNCATE tb_name: 清空表,並重置AUTOINCREMENT計數器;
UPDATE tb_name SET col1=..., col2=... WHERE
原文來自 http://www.cnblogs.com/xiaonengsho/p/8567937.html