Sql介紹 與 Sql基礎查詢 SQL SQL也稱為結構化查詢語言(Structure Query Language),是一種用於管理和操作關係型資料庫的標準化電腦語言,SQL語言廣泛應用於各種關係型資料庫系統(RDBMS)如Mysql,Oracle,Microsoft SQL Server等等 ...
Sql介紹 與 Sql基礎查詢
SQL
SQL也稱為結構化查詢語言(Structure Query Language),是一種用於管理和操作關係型資料庫的標準化電腦語言,SQL語言廣泛應用於各種關係型資料庫系統(RDBMS)如Mysql,Oracle,Microsoft SQL Server等等
SQL對資料庫的操作
- 數據查詢:通過
SELECT
語句從資料庫中檢索數據 - 數據定義(DDL):其中包括
CREATE,ALTER,DROP
對資料庫進行定義和修改資料庫結構 - 數據操控(DML):包括
INSERT,UPDATE,DELETE
語句插入,更新,刪除數據 - 數據控制:通過
GRANT,REVOKE
語句管理用戶許可權和範圍控制
SQL的特點
- 標準化:SQL是一個標準化的語言,各大資料庫廠商都支持SQL語言
- 高度非過程化:與過程化的與語言不同,SQL不需要指定特點演算法或步驟完成任務.SQL語句更專註描述所需結果,而非如何得到所需結果
- 集合操作:SQL支持集合操作,即一次可以處理多行數據.一個
SELECT
語句就可以返回多條記錄,INSERT,UPDATE
也可以一次影響多行數據 - 事務支持:SQL支持事務處理,允許將一組相關數據,作為一個完整的單元來執行.事務具有:原子性(Atomicity),一致性(Consistency),隔離性(Isolation),持久性(Durability)(關於這些性質在之後的事務章節會詳細講解),ACID,這四個性質確保了數據的一致性與可靠性
- 集成能力:SQL可以與其他 編程語言相互集成,使得開發者能夠在應用程式中嵌入SQL代碼,實現高效操作,其中典型的屬Java開發者可以使用JDBC來執行SQL查詢
SQL基礎查詢
語法結構
SELECT 查詢列表 FORM 表名
其中查詢列表可以是表中的欄位,常量值,表達式,函數等等
如SELECT * FORM emplyees;
其中*
表示查詢表中所有數據
查詢表中單個欄位
-
SELECT 欄位名 FORM 表名
eg:查詢員工的所有姓名
SELECT e_name FORM emplyees;
查詢表中多個欄位
使用逗號將每個欄位分隔開來
-
SELECT 欄位1,欄位2,欄位3 FORM 表名;
eg:示例:查詢所有員工的姓名,郵箱,電話號碼
SELECT e_name,e_email,e_phone_num FORM emplyees;
為欄位起別名
在實際的資料庫表結構中,有些欄位名過長,或者不好理解,我們可以對欄位名起個表明,在後續調用中直接使用其別名即可,在多表查詢中,有些欄位名會出現重覆,這時我們可以對相應的欄位其別名,不宜混淆
- 使用AS關鍵字
- 在將要其別名欄位後使用
AS
關鍵字SELECT 欄位名 AS 別名 FORM 表名;
- 在將要其別名欄位後使用
- 直接使用空格隔開
- 即在欄位和別名之間用空格隔開即可
SELECT 欄位名 別名 FORM 表名;
- 即在欄位和別名之間用空格隔開即可
去重
對查詢出的語句可能會出先欄位名重覆的結果,這時,我們可以使用去重功能
-
使用
DISTINCT
關鍵字:SELECT DISTINCT 要去重的欄位 ,其他欄位… FORM 表名;
eg:查詢部門表中的部門ID,對於每個部門ID出現一次即可,因此我們可以使用去重
SELECT DISTINCT d_id FORM department;
+號操作
Mysql中
+
號只有一個功能:作為運算符,不能作為連接符
- 若
+
號兩側都是數值型,視為正常的加法運算 - 若
+
號兩側出現了字元,這嘗試將字元轉化為數值類型,若轉化成功,則繼續執行加法操作,失敗則轉化為數值0;轉化規則為:從首部開始將所有數值型字元進行轉化直到遇到字元型字元,如’11’⇒11;’1a’⇒1;’abc’⇒0;’11a1’⇒11 - null值與任何數值類型進行
+
操作都為null
SELECT 1 + 1; //2
SELECT '1' + '1';//2
SELECT 'a' + 1;//1
SELECT 'a' + 'b';//0
SELECT '1a' + '1b';//2
SELECT '11a11' + '11b11'//22;
SELECT 1 + null;//null
CONCAT()操作
既然
+
號只能作為運算符,那如何連接字元呢?→CONCAT()
函數
-
CONCAT()
:使用SELECT調用CONCAT();SELECT CONCAT(str1,str2,…);
eg:查詢員工姓名和郵箱,按固定格式(姓名[[email protected]])要求輸出,比如:張三[[email protected]]
SELECT CONCAT(e_name,’[’,e_email,’]’)FORM employees;
IFNULL()函數
-
IFNULL():若查詢出的值存在NULL值,使用替代值替代
SELECT IFNULL(欄位名,代替值) FROM 表名;
eg:查詢員工的姓名和部門ID,如果該員工沒有部門信息,顯示未知
SELECT e_name,IFNULL(d_id,’未知’) FORM employees;
條件查詢
條件查詢,允許在查詢數據時,指定某些條件,從而篩選出符合條件的記錄
WHERE關鍵字
WHERE關鍵字是條件查詢的核心;
-
語法結構:
SELECT 查詢列表 //執行順序3 FORM 表名 //執行順序 1 WHERE 條件表達式;//執行順序2
eg:查詢 d_id 為 10 的所有員工
SELECT d_id FORM employees WHERE d_id=10;
表達式篩選
SQL中包含了條件運算符:>, <,>=,<=, =, !=,<>;<>與!=的作用相同都表示不等於,條件運算符是應用於條件表達式中的
-
eg.1:查詢工資大於8000的員工信息
SELECT *FROM employees WHERE salary>8000;
-
eg.2查詢部門編號不等於3的員工信息
SELECT *FORM employees WHERE d_id ! =3;
邏輯運算
邏輯運算符也是一般在WHERE表達式中使用,可幫助在查詢中指定多個條件或改變條件邏輯關係
-
邏輯運算符包括:
&&,||,!
,分別對應and,or,not
-
eg1:查詢工資在8000到10000之間的員工信息→使用AND運算符連接
SELECT * FORM employees WHERE salary>8000 AND salary<100000;
-
eg2:查詢工資大於8000或者部門3的員工信息→使用OR運算符連接
SELECT * FORM employees WHERE salary >8000 OR d_id=3;
模糊查詢
LIKE關鍵字
SQL中常用的是
LIKE
關鍵字,其配合通配符來實現模糊查詢
-
常用通配符
-
%
:代表可匹配度多個字元,包括0個,1個 -
_
:代表只能匹配一個字元SELECT 查詢列表 FROM 表名 WHERE 列名 LIKE '模式';
-
-
eg1:查詢姓名中包含【微】字的員工信息
SELECT * FORM employees WHERE e_name LIKE ‘%微%’;
-
eg2:查詢姓名中第二個字是【可】字的員工信息
SELECT * FORM employees WHERE e_name LIKE ’_微%’;
BETEWEEN…AND
查詢在某段範圍值內的數據,包含臨界值,即BETEWEEN 8000 AND 100000⇒[8000,10000]
-
eg1:查詢工資在8000到10000之間的員工信息
SELECT * FORM employees WHERE salary BETWEEN 8000 AND 10000;
-
eg2:查詢入職時間在2018-01-01到2022-01-01之間的員工信息
SELECT * FORM employees WHERE hiredate BETWEEN ‘2018-01-01’ AND ’2022-01-01’;
IN關鍵字
IN運算符用於檢測欄位值是否在一個指定的值列表中,使用IN運算符可以簡化查詢語句,特別在需要處理多個值情況下
-
eg:查詢在部門2或者部門3的員工信息
SELECT *FORM employees WHERE d_id IN(2,3);
等價於SELECT * FORM employees WHERE d_id=2 OR d_id=3;
IS NULL/IS not NULL
用於檢測一個值是否NULL的運算符
-
eg1:查詢沒有部門的員工信息
SELECT * FORM employees WHRER d_id is NULL;
-
eg2:查詢有部門的員工信息
SELECT * FROM emplyees WHERE d_id is not NULL;
排序查詢
查詢出來的數據預設按照表格的保存順序查詢,我們如果需要修改查詢結果展示的順序,可以使用排序查詢,
ORDER BY關鍵字
在SQL中ORDER BY實現排序,ASC代表升序,DESC代表降序
-
語法結構
SELECT 查詢列表 FROM 表 [WHERE 篩選列表] ORDER BY 排序列表 [ASC升序|DESC降序] -- ASC|DESC不寫預設是ASC
實現單欄位排序
-
ORDER BY 排序欄位 [ASC升序|DESD降序];
-
eg:查詢員工信息按工資高低排序
- 按照工資升序 SELECT * FROM emplyees ORDER BY salary ASC -- ASC可以不寫 - 按照工資降序 SELECT * FROM emplyees ORDER BY salary DESC -- DESC不能省略
使用多個欄位排序
-
eg:查詢員工信息,先按部門ID降序,再按工資升序
SELECT * FROM emplyees ORDER BY department_id DESC,salary ASC;