SQL 語句主要可以劃分為以下 3 個類別。 DDL(Data Definition Languages)語句:數據定義語言,這些語句定義了不同的數據段、資料庫、表、列、索引等資料庫對象的定義。常用的語句關鍵字主要包括 create、drop、alter等。 就是對資料庫內部的對象進行創建、刪除、修 ...
SQL 語句主要可以劃分為以下 3 個類別。
DDL(Data Definition Languages)語句:數據定義語言,這些語句定義了不同的數據段、資料庫、表、列、索引等資料庫對象的定義。常用的語句關鍵字主要包括 create、drop、alter等。
就是對資料庫內部的對象進行創建、刪除、修改的操作語言
DML(Data Manipulation Language)語句 :數據操縱語句,用於添加、刪除、更新和查詢資料庫記錄,並檢查數據完整性,常用的語句關鍵字主要包括 insert、delete、udpate 和select 等。
對資料庫中表記錄的操作
DCL(Data Control Language)語句:數據控制語句,用於控制不同數據段直接的許可和訪問級別的語句。這些語句定義了資料庫、表、欄位、用戶的訪問許可權和安全級別。主要的語句關鍵字包括 grant、revoke 等。
主要是DBA用來管理系統中的對象許可權時所使用,一般的開發人員很少使用
安裝MySQL 時系統自動創建的,其各自功能如下。
information_schema:主要存儲了系統中的一些資料庫對象信息。比如用戶表信息、列信息、許可權信息、字元集信息、分區信息等。
cluster:存儲了系統的集群信息。
mysql:存儲了系統的用戶許可權信息。
test:系統自動創建的測試資料庫,任何用戶都可以使用。
1.DDL
(1).創建資料庫
create database dbname;
可以用 show databases; 來查看有哪些資料庫
選擇資料庫 ;
use dbname;
(2).刪除資料庫
drop database dbname;
(3).創建表
create table tablename (column_name_1 column_type_1 constraints,column_name_2 column_type_2 constraints , ……column_name_n column_type_n constraints);
可以用 下麵的語法查看表的定義:
desc tablename;
(4).刪除表
drop table tablename;
(5).修改表
修改表類型:
ALTER TABLE tablename MODIFY [COLUMN] column_definition [FIRST | AFTER col_name];
增加表欄位:
ALTER TABLE tablename ADD [COLUMN] column_definition [FIRST | AFTER col_name];
刪除欄位:
ALTER TABLE tablename DROP [COLUMN] col_name;
欄位改名:
ALTER TABLE tablename CHANGE [COLUMN] old_col_name column_definition [FIRST|AFTER col_name];
註意:change 和 modify都可以修改表的定義,不同的是 change 後面需要寫兩次列名,不方便。但是 change 的優點是可以修改列名稱,modify則不能。
修改欄位排列順序:
前面介紹的的欄位增加和修改語法(ADD/CNAHGE/MODIFY)中,都有一個可選項 [first|aftercolumn_name],這個選項可以用來修改欄位在表中的位置,預設 ADD 增加的新欄位
是加在表的最後位置,而 CHANGE/MODIFY 預設都不會改變欄位的位置。
註意:CHANGE/FIRST|AFTER COLUMN 這些關鍵字都屬於 MySQL 在標準 SQL 上的擴展,在其他資料庫上不一定適用。
(6).表改名
ALTER TABLE tablename RENAME [TO] new_tablename;
2.DML
(1).插入記錄
一條記錄:
INSERT INTO tablename (field1,field2,……fieldn) VALUES(value1,value2,……valuesn); /*field和value一一對應,field可以省略*/
多條記錄:
INSERT INTO tablename (field1, field2,……fieldn) VALUES (record1_value1, record1_value2,……record1_valuesn), (record2_value1, record2_value2,……record2_valuesn), …… (recordn_value1, recordn_value2,……recordn_valuesn) ; /*field可以省略*/
(2).更新記錄
更新一個表中的數據:
UPDATE tablename SET field1=value1,field2.=value2,……fieldn=valuen [WHERE CONDITION];
更新多個表中的數據:
UPDATE t1,t2…tn set t1.field1=expr1,tn.fieldn=exprn [WHERE CONDITION]; /*t為表名*/
(3).刪除記錄
刪除一個表中記錄:
DELETE FROM tablename [WHERE CONDITION];
刪除多個表中記錄:
DELETE t1,t2…tn FROM t1,t2…tn [WHERE CONDITION];
註意:不管是單表還是多表,不加 where 條件將會把表的所有記錄刪除,所以操作時一定要小心。
(4).查詢記錄
基本的語法:
SELECT * FROM tablename [DISTINCT] [WHERE CONDITION]; /*distinct是消除重覆的記錄,where條件查詢*/
排序和限制:
SELECT * FROM tablename [WHERE CONDITION] [ORDER BY field1 [DESC|ASC],field2 [DESC|ASC],……fieldn [DESC|ASC]]; /* DESC 和 ASC 是排序順序關鍵字,DESC 表示按照欄位進行降序排列,ASC 則表示升序排列,如果不寫此關鍵字預設是升序排列。ORDER BY 後面可以跟多個不同的排序欄位,並且每個排序欄位可以有不同的排序順序。*/
限制顯示:
SELECT ……[LIMIT offset_start,row_count];
註意:limit 屬於 MySQL 擴展 SQL92 後的語法,在其他資料庫上並不能通用。limit 經常和 order by 一起配合使用來進行記錄的分頁顯示。
聚合:
SELECT [field1,field2,……fieldn] fun_name FROM tablename [WHERE where_contition] [GROUP BY field1,field2,……fieldn [WITH ROLLUP]] [HAVING where_contition]
對其參數進行以下說明。
fun_name 表示要做的聚合操作,也就是聚合函數,常用的有 sum(求和)、count(*)(記錄數)、max(最大值)、min(最小值)。
GROUP BY 關鍵字表示要進行分類聚合的欄位,比如要按照部門分類統計員工數量,部門就應該寫在 group by 後面。
WITH ROLLUP 是可選語法,表明是否對分類聚合後的結果進行再彙總。
HAVING 關鍵字表示對分類後的結果再進行條件的過濾
註意:having 和 where 的區別在於 having 是對聚合後的結果進行條件的過濾,而 where 是在聚合前就對記錄進行過濾,如果邏輯允許,我們儘可能用 where 先過濾記錄,
這樣因為結果集減小,將對聚合的效率大大提高,最後再根據邏輯看是否用 having 進行再過濾。
(5).子查詢:
記錄聯合:
SELECT * FROM t1 UNION|UNION ALL SELECT * FROM t2 …… UNION|UNION ALL SELECT * FROM tn;
註意:UNION 和 UNION ALL 的主要區別是 UNION ALL 是把結果集直接合併在一起,而 UNION 是將UNION ALL 後的結果進行一次 DISTINCT,去除重覆記錄後的結果。
3.DCL
略