一、DDL 語句(Data Definition Languages,數(shù)據(jù)定義語言)
這些語句定義了不同的數(shù)據(jù)段、數(shù)據(jù)庫、表、列、索引等數(shù)據(jù)庫對象。
1.創(chuàng)建數(shù)據(jù)庫
CREATE DATABASE db_name;
2.刪除數(shù)據(jù)庫
DROP DATABASE db_name;
3.創(chuàng)建表
CREATE TABLE tb_name (
column_name_1 column_type_1 constraints,
column_name_2 column_type_2 constraints,
column_name_3 column_type_3 constraints,
...
column_name_n column_type_n constraints)
column_name 為列的名字, column_type 為列的數(shù)據(jù)類型, constraints 為列的約束條件。
4.查看表定義
DESC tb_name;
5.查看創(chuàng)建表的SQL語句
SHOW CREATE TABLE db_name;
6.刪除表
DROP TABLE tb_name
7.修改表
修改表的數(shù)據(jù)類型
ALTER TABLE tb_name MODIFY [COLUMN] column_name column_definition [FIRST | AFTER column_name];
增加表字段
ALTER TABLE tb_name ADD [COLUMN] column_name column_definition [FIRST | AFTER column_name];
刪除表字段
ALTER TABLE tb_name DROP [COLUMN] column_name;
修改字段名
ALTER TABLE tb_name CHANGE [COLUMN] old_column_name column_name column_definition [FIRST | AFTER column_name];
修改字段順序
[FIRST | AFTER column_name];
修改字段順序主要是通過 FIRST 和 AFTER,在其后指定字段名則是調(diào)整至該字段前一位或后一位,不指定字段名則是調(diào)整至最前或者最后。
更改表名
ALTER TABLE tb_name RENAME [TO] new_tb_name;
二、DML 語句(Data Manipulation Language,數(shù)據(jù)操縱語句)
1.插入記錄
INSERT INTO tb_name (field1, field2, ..., fieldn) VAULES(value1, value2, ...,valuen);
可空字段、非空但是含有默認值的字段、自增字段可以不列在字段列表中。
INSERT INTO tb_name VAULES(value1, value2, ...,valuen);
也可以不指定字段名稱,VALUES 順序和字段排列順序一致。
INSERT INTO tb_name (field1, field2, ..., fieldn)
VAULES
(record1_value1, record1_value2, ...,record1_valuen),
(record2_value1, record2_value2, ...,record2_valuen),
...
(recordn_value1, recordn_value2, ...,recordn_valuen);
也可以同時插入多行的記錄。
2.更新記錄
UPDATE tb_name SET field1=value1, field2=value2, ..., fieldn=valuen [WHERE condition];
3.更新多個表中的數(shù)據(jù)
UPDATE tb_name1, tb_name2, ..., tb_namen SET tb_name1.field=value, ..., tb_namen.field=value [WHERE condition];
4.刪除記錄
DELETE FROM tb_name [WHERE condition];
5.刪除多個表中的數(shù)據(jù)
DELETE tb_name1, tb_name2, ..., tb_namen FROM tb_name1, tb_name2, ..., tb_namen [WHERE condition];
真正要刪除的記錄在 FROM 前的 tb_name 中,F(xiàn)ROM 后的 tb_name 是用于 WHERE 中的條件判斷。
6.查詢記錄
SELECT column_name FROM tb_name;
查詢不重復(fù)的記錄
在要查詢的 column_name 前添加字段 distinct
SELECT distinct column_name FROM tb_name;
條件查詢
SELECT column_name FROM tb_name WHERE condition;
排序
SELECT * FROM tb_name [WHERE condition] [ORDER BY field1 [DESC|ASC], field2 [DESC|ASC], ..., fieldn [DESC|ACS]];
DESC 表示按照字段進行降序排序, ASC 表示升序排序,不指定默認升序排序。
限制
SELECT * FROM tb_name [LIMIT offset_start, row_count];
offset_start 表示偏移量, row_conut 表示顯示的行數(shù)。
SELECT * FROM tb_name [LIMIT row_count];
只指定一個參數(shù)時,默認偏移量為0。
聚合
很多情況下,需要對一些數(shù)據(jù)進行匯總。
SELECT [field1, field2, ..., fieldn] function_name
FROM tb_name
[WHERE condition]
[GROUP BY field1, field2, ..., fieldn
[WITH ROLLUP]
[HAVING condition]];
function_name 表示要做的聚合操作,又稱聚合函數(shù)。常用的有 sum()、 count(*)、 max() 和 min()。
GROUP BY 關(guān)鍵字表示要進行分類聚合的字段。
WITH ROLLUP 表明是否對分類聚合后的結(jié)果進行再匯總。
HAVING 關(guān)鍵字表示對分類后的結(jié)果再進行條件的過濾。
注意:HAVING 和 WHERE 的區(qū)別在于,HAVING 是對聚合后的結(jié)果進行條件的過濾,而 WHERE 是對聚合前的記錄進行過濾。
表連接
需要同時顯示多個表中的字段的時候,通過表連接可以實現(xiàn),表連接分為內(nèi)連接和外連接兩種。
內(nèi)連接選出兩張表中互相匹配的記錄。外連接會選出其它的記錄。
內(nèi)連接
SELECT field1, field2, ...,fieldn FROM tb_name1, tb_name2, ..., tb_namen [WHERE condition];
外連接
外連接分為左連接和右連接
左連接:包含左邊表中的所有記錄,左邊表中某些字段的記錄在右邊表中有沒有匹配項會被顯示為空。
右連接:包含右邊表中的所有記錄,右邊表中某些字段的記錄在左邊表中有沒有匹配項會被顯示為空。
SELECT left_field, right_field FROM left_tb_name
LEFT JOIN right_tb_name ON condition;
SELECT left_field, right_field FROM right_tb_name
LEFT JOIN left_tb_name ON condition;
子查詢
查詢的時候,condition 需要的條件是另外一個 SELECT 語句的結(jié)果,稱為子查詢。
子查詢的關(guān)鍵字主要包括:IN、 NOT IN、 =、 !=、 EXISTS 和
NOT EXISTS 等。
記錄聯(lián)合
將兩個表的數(shù)據(jù)按照一定的查詢條件查詢出來后,將結(jié)果合并到一起顯示出來。關(guān)鍵字是 UNION 和 UNION ALL。
SELECT * FROM tb_name1 [WHERE condition]
UNION | UNION ALL
SELECT * FROM tb_name2 [WHERE condition]
...
UNION | UNION ALL
SELECT * FROM tb_namen [WHERE condition]
UNION ALL 是表示全部記錄,包括了多個查詢結(jié)果的重復(fù)記錄。如果希望去掉多個查詢結(jié)果的重復(fù)記錄,使用 UNION 關(guān)鍵字。
三、DCL 語句(Data Control Language,數(shù)據(jù)控制語句)
這些語句主要是 DBA 用于管理系統(tǒng)中的對象權(quán)限
1.權(quán)限控制
GRANT all ON db_name.tb_name TO 'user_name'@'host_name';
REVOKE all ON db_name.tb_name FROM 'user_name'@'host_name';