【SQL基礎】三種類別語句


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM