1. 程式人生 > 實用技巧 >SQL語言

SQL語言

一、SQL語言

1.基本查詢

#建立一個數據庫
CREATE DATABASES 庫名 CHARACTER SET utf8;

#基本查詢 (執行查詢語句返回的結果集是一張虛擬表。)
SELECT 列名1,列名2,列名3... FROM 表名;
SELECT * FROM 表名; #查詢所有列

#對列中資料進行運算(+、-、*、/)以及別名
SELECT 列名+-*/n AS 別名 FROM 表名;

#查詢結果去重
SELECT DISTINCT 列名 FROM 表名;

2.排序查詢

#排序查詢 ASC升序 DESC降序
SELECT 列名1,列名2,列名3... FROM 表名 ORDER BY 列名1 ASC/DESC;#依據單列排序
SELECT 列名1,列名2,列名3... FROM 表名 ORDER BY 列名1 ASC/DESC,列名2 ASC/DESC;#依據多列排序,在列名1排序相等的情況下,依據列名2進行排序

3.條件查詢

#條件查詢
SELECT 列名1,列名2,列名3... FROM 表名 WHERE 條件
SELECT 列名1,列名2,列名3... FROM 表名 WHERE 列名1 = n; #等值判斷(=)
SELECT 列名1,列名2,列名3... FROM 表名 WHERE 列名1 = n1 AND 列名2 = n2; #邏輯判斷(與或非,and、or、not)
SELECT 列名1,列名2,列名3... FROM 表名 WHERE 列名1 >= n1 AND 列名1 <= n2;#不等值判斷(<、>、>=、<=、!=、<>)
#區間判斷(between and)
SELECT 列名1,列名2,列名3... FROM 表名 WHERE 列名1 BETWEEN n1 AND n2;#閉區間,包含兩個邊界值
#NULL值判斷
SELECT 列名1,列名2,列名3... FROM 表名 WHERE 列名1 IS NULL /IS NOT NULL;
#列舉查詢 IN(n1,n2,n3...)
SELECT 列名1,列名2,列名3... FROM 表名 WHERE 列名1 IN(n1,n2,n3...);
#模糊查詢
SELECT 列名1,列名2,列名3... FROM 表名 WHERE 列名1 LIKE '張_';#'_'代表單個任意字元,可填入多個
SELECT 列名1,列名2,列名3... FROM 表名 WHERE 列名1 LIKE '張%'; ##任意字元長度

#分支結構查詢CASE-WHEN-END
SELECT 列名1,列名2,列名3... ,
CASE
WHEN ...
WHEN ...
WHEN ...
ELSE ...
END 
FROM 表名;

4.時間查詢

#時間查詢
SELECT SYSDATE();#當前系統時間(年月日時分秒)
SELECT CURDATE();#獲取當前日期(年月日)
SELECT CURTIME();#獲取當前時間(時分秒)
SELECT WEEK(DATE);#獲取指定日期為一年中的第幾周
SELECT YEAR(DATE);#獲取指定日期的年份
SELECT HOUR(TIME);#獲得指定時間的小時值
SELECT MINUTE(TIME);#獲得時間的分鐘值
SELECT DATEDIFF(DATE 1,DATE 2);#獲得兩個日期相隔的天數
SELECT ADDDATE(DATE,n);#計算DATE加上n天后的日期

5.字串查詢

#字串查詢
SELECT CONCAT(str1,str2,...);#將多個字串連線
SELECT INSERT(str,pos,len,newStr);#將str中指定pos位置開始len長度的內容替換為newStr
SELECT LOWER(str);#將指定字串轉換為小寫
SELECT UPPER(str);#將指定字串轉化為大寫
SELECT SUBSTRING(str,num,len);#將str字串指定num位置開始擷取len長度的內容

6.聚合函式

#聚合函式 SUM()求單列結果的總和、AVG()平均值、MAX()/MIN()最大值/最小值、COUNT()求總行數
SELECT SUM(列名1,列名2,列名3...) FROM 表名;

7.分組查詢、分組過濾查詢

#分組查詢 GROUP BY 分組依據必須在WHERE之後生效
SELECT 列名 FROM 表名 WHERE 條件 GROUP BY 分組依據(列);#注:分組查詢中,select顯示的只能是分組依據列,或者聚合函式列,不能出現其他列
#分組過濾查詢
SELECT 列名 FROM 表名 WHERE 條件 GROUP BY 分組依據 HAVING 過濾規則;#過濾規則定義對分組後的資料進行過濾

8.限定查詢

#限定查詢 LIMIT 起始行,查詢行數 注:起始行是從0開始
SELECT * FROM 表名 LIMIT 0,5;
#典型應用
#分頁查詢:一頁顯示10行,一共查詢三頁
#思路:第一頁從0行開始,顯示10條
SELECT * FROM 表名 LIMIT 0,10;
#第二頁從10行開始,顯示10條
SELECT * FROM 表名 LIMIT 10,10;
#第三頁從20行開始,顯示10條
SELECT * FROM 表名 LIMIT 20,10;

查詢總結

SQL語言編寫順序:SELECT 列名 FROM 表名 WHERE 條件 GROUP BY 分組依據 HAVING 過濾規則 ORDER BY 排序列(ASC/DESC) LIMIT 起始行,查詢行數;

9.進階查詢

#子查詢
SELECT 列名 FROM 表名 WHERE 條件(子查詢結果);#子查詢結果為一行一列
SELECT 列名 FROM 表名 WHERE 列名 IN(子查詢結果);#子查詢結果為多行一列
SELECT 列名 FROM 子查詢結果集 WHERE 條件;#子查詢結果為多行多列可視為表

#合併查詢 將兩個表的查詢結果合併在一起!!!列數必須相同
SELECT * FROM 表1 UNION SELECT * FROM 表2;#去除重複資料
SELECT * FROM 表1 UNION ALL SELECT * FROM 表2;#不去除重複資料。顯示所有

#表連線查詢 將表連線起來再查詢!!!
#內連線
SELECT 列名 FROM 表1 INNER JOIN 表2 ON 連線條件;#兩表連線
SELECT 列名 FROM 表1 INNER JOIN 表2 ON 連線條件 INNER JOIN 表3 ON 連線條件;#三表連線
#左外連線 注:以左表為主
SELECT 列名 FROM 表1 LEFT JOIN 表2 ON 連線條件;
#右外連線 注:以右表為主
SELECT 列名 FROM 表1 RIGHT JOIN 表2 ON 連線條件;

#DML操作
#新增 INSERT
INSERT INTO 表名 (列名1,列名2,列名3...) VALUES (值1,值2,值3,...); 
#修改 UPDATE 不加WHERE語句則整表更新
UPDATE 表名 SET 列1=新值1,列2=新值2... WHERE 條件;
#刪除 DELETE 不加WHERE語句則刪除整張表 對錶中資料做操作
DELETE FROM 表名 WHERE 條件;
#清空整張表,對錶做操作
TRUNCATE TABLE 表名;

#資料表操作
#資料表的建立
CREATE TABLE 表名(
列名 資料型別 [約束],
列名 資料型別 [約束],
...
列名 資料型別 [約束]#最後一列的末尾不加逗號!
)[CHARSET = utf8];#可根據需要制定字元編碼集

#資料表的修改(ALTER)
ALTER TABLE 表名 ADD 列名 資料型別;#向表中新增列
ALTER TABLE 表名 MODIFY 列名 VARCHAR(10);#修改表中列的長度
ALTER TABLE 表名 DROP 列名;#刪除表中此列
ALTER TABLE 表名 CHANGE 舊列名 新列名 資料型別;#修改別名

#資料表的刪除
DROP TABLE 表名;

#約束
#實體完整性約束 標識每一行資料不重複,實體唯一
#主鍵約束 PRIMARY KEY 
#唯一約束 UNIQUE
#自動增長列 AUTO_INCREMENT
CREATE TABLE 表名(
列名 資料型別 PRIMARY KEY,#標識唯一,不可重複且不能為NULL
列名 資料型別 UNIQUE,#標識唯一,不可重複可以為NULL
...
列名 資料型別 PRIMARY KEY AUTO_INCREMENT#不可單獨使用,和主鍵配合,給主鍵數值列新增自動增長!!!
)CHARSET = utf8;
#域完整性約束 限制列的單元格的資料正確性。
#非空約束 NOT NULL
#預設值約束 DEFAULT N
#引用完整性約束 CONSTRAINT 引用名 FOREIGN KEY (列名) REFERENCES 被引用表名(列名)
CREATE TABLE 表名(
列名 資料型別 PRIMARY KEY,
列名 資料型別 UNIQUE NOT NULL,#非空,必須有值
列名 INT DEFAULT 20,#為列賦予預設值
...
列名 資料型別 PRIMARY KEY AUTO_INCREMENT#不可單獨使用,和主鍵配合,給主鍵數值列新增自動增長!!!
)CHARSET = utf8;

#事務
#事務特性 Atomicity(原子性)、Consistency(一致性)、Isolation(隔離性)、Durability(永續性)
START TRANSACTION;
...#事務內資料操作語句
COMMIT;#事務內資料操作語句成功,執行COMMIT提交
ROLLBACK;#事務內資料操作語句失敗,執行ROLLBACK回滾

#許可權管理
#建立使用者
CREATE USER 使用者名稱 IDENTIFIED BY 密碼;
#授權
GRANT ALL ON 資料庫.表 TO 使用者名稱;
#撤銷許可權
REVOKE ALL ON 資料庫.表 FROM 使用者名稱;#使用者重新連線客戶端之後才會生效
#刪除使用者
DROP USER 使用者名稱;#使用者重新連線客戶端之後才會生效

#檢視 檢視的操作不會影響源表
CREATE VIEW 檢視名 AS 查詢資料來源表語句;