SQL基礎知識整理
本文是對SQL相關內容的一個梳理。首先SQL語言的分類主要有四大類
DDL資料定義語言:
關鍵字有CREATE、ALERT、DROP建立一個新的表或者表的檢視或者物件;
- 操作資料庫 建立:create database mydb2 character set gbk COLLATE gbk_chinese_ci; 查詢:show create database mydb2; 修改:alter database mydb2 character set utf8; 刪除:drop database mydb2; 其他:select database(); //檢視當前使用的資料庫 use mydb3; //切換使用的資料庫
- 操作資料表 語法: create table 表名( 欄位1 欄位型別, 欄位2 欄位型別, … 欄位n 欄位型別 );
DML資料操作語言:
主要有INSERT、UPDATE、DELETE對應對錶中的資料進行增,改,刪除;
- 插入操作: 語法: INSERT INTO 表名(列名1,列名2 …)VALUES(列值1,列值2…); 注意:列名與列值的型別、個數、順序要一一對應; 值不要超出列定義的長度 如果插入空值,請使用null 插入的日期和字元一樣,都使用引號括起來。
- 修改操作: 語法:UPDATE 表名 SET 列名1=列值1,列名2=列值2 。。。 WHERE 列名=值
- 刪除操作: 語法 : DELETE FROM 表名 [WHERE 列名=值]
DCL資料控制語言:
用於授予或收回資料庫的某些許可權或事務提交。 GRANT:授權;ROLLBACK [WORK] TO [SAVEPOINT]:回退到某一點。
DQL資料查詢語言:
由SELECT子句WHERE子句FROM子句構成的查詢塊。 資料查詢語言不會修改資料,而是將查詢的結果集返回到客戶端。 語法: SELECT selection_list /*要查詢的列名稱 */ FROM table_list /*要查詢的表名稱 */ WHERE condition /*行條件 */ GROUP BY grouping_columns /*對結果分組 */ HAVING condition /*分組後的行條件 */ ORDER BY sorting_columns /*對結果分組 */ LIMIT offset_start, row_count /*結果限定 */
基礎查詢
- 查詢所有列 SELECT * FROM stu;
- 查詢指定列 SELECT sid, sname, age FROM stu;
條件查詢
條件查詢即再WHERE子句中,同時WHERE子句中可以使用如下關鍵字:
- =、!=、<>、<、<=、>、>=;
- BETWEEN…AND;
- IN(set);
- IS NULL; IS NOT NULL;
- AND;OR;NOT; eg: 查詢性別為女,並且年齡50的記錄 SELECT * FROM stu WHERE gender=‘female’ AND ge<50; 查詢學號為S_1001,S_1002,S_1003的記錄 SELECT * FROM stu WHERE sid IN (‘S_1001’,‘S_1002’,‘S_1003’);
模糊查詢
當想查詢姓名中包含a字母的學生時就需要使用模糊查詢了。模糊查詢需要使用關鍵字LIKE。其中萬用字元有:
- _ 任意一個字元 ‘張_’
- %:任意0~n個字元 ‘%張%’
欄位控制查詢
- 去重:DISTINCT關鍵字 SELECT DISTINCT sal FROM emp;
- 查詢某幾列的和:這幾列都是數值型別的時候可以相加 SELECT *,sal+comm FROM emp;
- 新增別名: as關鍵字
聚合函式
用來做縱向運算的函式
- COUNT():統計指定列不為NULL的記錄行數; MAX():計算指定列的最大值,如果指定列是字串型別,那麼使用字串排序運算;
- MIN():計算指定列的最小值,如果指定列是字串型別,那麼使用字串排序運算;
- SUM():計算指定列的數值和,如果指定列型別不是數值型別,那麼計算結果為0;
- AVG():計算指定列的平均值,如果指定列型別不是數值型別,那麼計算結果為0;
分組查詢
當需要分組查詢時需要使用GROUP BY子句,例如查詢每個部門的工資和,這說明要使用部門來分組。
- GROUP BY子句 查詢每個部門的部門編號和每個部門的工資和: SELECT deptno, SUM(sal) FROM emp GROUP BY deptno;
- HAVING子句 查詢工資總和大於9000的部門編號以及工資和: SELECT deptno, SUM(sal) FROM emp GROUP BY deptno HAVING SUM(sal) > 9000;
LIMIT
SELECT * FROM emp LIMIT x, y; 從x行起查詢y行記錄。
查詢語句書寫順序:select – from- where- group by- having- order by-limit 查詢語句執行順序:from - where -group by - having - select - order by-limit