SQL:DML、DQL、DCL DML:Data Manipulation Language(數據操作語言) DML用來對資料庫中的數據記錄進行增刪改操作。 DML-添加數據 給指定欄位添加數據(一條數據) INSERT INTO 表名(欄位名1,欄位名2,...) VALUES(值1,值2,... ...
SQL:DML、DQL、DCL
DML:Data Manipulation Language(數據操作語言)
DML用來對資料庫中的數據記錄進行增刪改操作。
- DML-添加數據
- 給指定欄位添加數據(一條數據)
INSERT INTO 表名(欄位名1,欄位名2,...) VALUES(值1,值2,...);
- 給全部欄位添加數據(一條數據)
INSERT INTO 表名 VALUES(值1,值2,...);
- 批量添加數據
# 指定欄位
INSERT INTO 表名(欄位名1,欄位名2,...) VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...);
# 所有欄位
INSERT INTO 表名 VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...);
註意:
- 插入數據時,指定的欄位順序需要與值的順序是一一對應的。
- 字元串和日期型數據應該包含在引號中。
- 插入的數據大小,應該在欄位的規定範圍內。
- DML-修改數據
UPDATE 表名 SET 欄位名1=值1,欄位名2=值2,...[WHERE 條件];
-- 若不帶where條件,則修改整張表全部記錄的同一個欄位為同一個值
-- 例子:
update emp set name='youhui',gender='女' where id=10;
- DML-刪除數據
DELETE FROM 表名 [WHERE 條件];
--註意:DELETE語句的條件可以有,也可以沒有,如果沒有條件,則會刪除整張表的所有數據,即表會被清空。
--DELETE語句不能刪除某一個欄位的值(可以使用UPDATE)。
--例子:
delete from emp where id=10;
DQL:Data Query Language(數據查詢語言)
DQL用來查詢資料庫中表的記錄。
查詢關鍵字:SELECT
- DQL-語法(單表查詢)
--編寫順序
SELECT
欄位列表
FROM
表名列表
WHERE
條件列表
GROUP BY
分組欄位列表
HAVING
分組後條件列表
ORDER BY
排序欄位列表
LIMIT
分頁參數
- DQL-基本查詢
- 查詢多個欄位
SELECT 欄位1,欄位2,欄位3... FROM 表名;
SELECT * FROM 表名;
- 設置別名(不是必須)
SELECT 欄位1 [AS 別名1],欄位2[AS 別名2] ... FROM 表名;
- 去除重覆記錄
SELECT DISTINCT 欄位列表 FROM 表名;
- DQL-條件查詢(WHERE)
- 語法
SELECT 欄位列表 FROM 表名 WHERE 條件列表;
- 條件:可以是比較運算符和邏輯運算符
比較運算符 | 功能 |
---|---|
> | 大於 |
>= | 大於等於 |
< | 小於 |
<= | 小於等於 |
= | 等於 |
<> 或 != | 不等於 |
BETWEEN 最小值 AND 最大值 | 在某個範圍之內(含最小、最大值) |
IN(...) | 在IN之後的列表中的值,多選一 |
LIKE 占位符 | 模糊查詢(_匹配單個字元,%匹配任意個字元) |
IS NULL | 是NULL |
邏輯運算符 | 功能 |
---|---|
AND 或 && | 並且(多個條件同時成立) |
OR 或 || | 或者(多個條件任意一個成立) |
NOT 或 ! | 非,不是 |
- 聚合函數(count、max、min、avg、sum)
- 介紹:聚合函數是將一列數據作為一個整體,進行縱向計算。
- 常見聚合函數:都是作用於表中的某一列的
函數 | 功能 |
---|---|
count | 統計數量 |
max | 最大值 |
min | 最小值 |
avg | 平均值 |
sum | 求和 |
- 語法:
SELECT 聚合函數(欄位列表) FROM 表名;
例子:select count(*) from emp;
--註意:null值不參與所有聚合函數運算
- DQL-分組查詢(GROUP BY)
- 語法:
SELECT 欄位列表 FROM 表名 [WHERE 條件] GROUP BY 分組欄位名 [HAVING 分組後過濾條件];
- where與having區別
- 執行時機不同:where是分組之前進行過濾,不滿足where條件,不進行分組;而having是分組之後對結果進行過濾。
- 判斷條件不同:where不能對聚合函數進行判斷,而having可以。
註意:
- 執行順序:where > 聚合函數 > having。
- 分組之後,查詢的欄位一般為聚合函數和分組欄位,查詢其他欄位無任何意義。
- DQL-排序查詢(ORDER BY)
- 語法:
SELECT 欄位列表 FROM 表名 ORDER BY 欄位1 排序方式1, 欄位2 排序方式2;
例子:
select * from emp order by entrytime;
- 排序方式:
- ASC:升序(預設值)
- DESC:降序
註意:如果是多欄位排序,當第一個欄位值相同時,才會根據第二個欄位進行排序。
- DQL-分頁查詢
- 語法:
SELECT 欄位列表 FROM 表名 LIMIT 起始索引,查詢記錄數;
- 註意:
- 起始索引從0開始,起始索引=(查詢頁碼 - 1)*每頁顯示記錄數。
- 分頁查詢是資料庫的方言,不同的資料庫有不同的實現,MySQL中是LIMIT。
- 如果查詢的是第一頁的數據,起始索引可以省略,直接簡寫為limit 查詢記錄數。
- DQL-執行順序
DCL:Data Control Language
DQL是用來管理資料庫用戶、控制資料庫的訪問許可權的。
- DCL-管理用戶:管理哪些用戶可以訪問當前資料庫
- 查詢用戶
USE mysql;
SELECT * FROM user;
- 創建用戶
CREATE USER '用戶名'@'主機名' IDENTIFIED BY '密碼';
- 修改用戶密碼
ALTER USER '用戶名'@'主機名' IDENTIFIED WITH mysql_native_password BY '新密碼';
- 刪除用戶
DROP USER '用戶名'@'主機名';
註意:
- 主機名可以使用 % 通配。
- 這類SQL開發人員操作的比較少,主要是DBA(Database Administrator,資料庫管理員)使用。
- DCL-許可權控制:控制當前用戶連接上MySQL資料庫之後可以訪問哪些資料庫哪些表以及對這些表執行什麼樣的操作。
MySQL中定義了很多種許可權,但是常用的就以下幾種:
許可權 | 說明 |
---|---|
ALL,ALL PRIVILEGES | 所有許可權 |
SELECT | 查詢數據 |
INSERT | 插入數據 |
UPDATE | 修改數據 |
DELETE | 刪除數據 |
ALTER | 修改表 |
DROP | 修改數據表/庫/視圖 |
CREATE | 創建資料庫/表 |
- 查詢許可權
SHOW GRANTS FOR '用戶名'@'主機名';
- 授予許可權
GRANT 許可權列表 ON 資料庫名.表名 TO '用戶名'@'主機名';
- 撤銷許可權
REVOKE 許可權列表 ON 資料庫名.表名 FROM '用戶名'@'主機名';
- 註意:
- 多個許可權之間,使用逗號分隔。
- 授權時,資料庫名和表名可以使用 * 進行通配,代表所有。