數(shù)據(jù)庫常用 SQL 語句大全,從基礎(chǔ)到高級全掌握
在數(shù)據(jù)庫操作中,SQL 語句是必不可少的工具。無論是數(shù)據(jù)查詢、插入、更新,還是表結(jié)構(gòu)的創(chuàng)建與修改,都需要用到 SQL。今天就為大家整理一份全面的 SQL 語句指南,從基礎(chǔ)到高級,助你輕松搞定數(shù)據(jù)庫操作。

一、基礎(chǔ) SQL 語句
1. SELECT 語句
SELECT 語句用于從表中選取數(shù)據(jù),結(jié)果會被存儲在一個結(jié)果集中。
選取特定列:
SELECT 列名稱 FROM 表名稱選取所有列:
SELECT * FROM 表名稱在結(jié)果集中,大多數(shù)數(shù)據(jù)庫軟件系統(tǒng)都允許使用編程函數(shù)進行導航,比如 Move-To-First-Record、Get-Record-Content 等。
2. SELECT DISTINCT 語句
表中可能包含重復值,DISTINCT 關(guān)鍵詞用于返回唯一不同的值。
SELECT DISTINCT 列名稱 FROM 表名稱3. WHERE 子句
WHERE 子句可添加到 SELECT 語句中,用于有條件地從表中選取數(shù)據(jù)。
SELECT 列名稱 FROM 表名稱 WHERE 列 運算符 值運算符包括大于、等于、小于、between、like 等。需要注意的是,SQL 使用單引號環(huán)繞文本值,數(shù)值則不用加引號。
4. AND 和 OR 運算符
AND 和 OR 可在 WHERE 子句中把兩個或多個條件結(jié)合起來,實現(xiàn)更精確的篩選。
5. ORDER BY 語句
ORDER BY 語句用于根據(jù)指定的列對結(jié)果集進行排序,默認按照升序(ASC)排序,若要降序排序,可使用 DESC 關(guān)鍵字。
6. INSERT INTO 語句
INSERT INTO 語句用于向表格中插入新的行。
插入所有列的值:
INSERT INTO 表名稱 VALUES (值 1, 值 2,....)指定插入數(shù)據(jù)的列:
INSERT INTO table_name (列 1, 列 2,...) VALUES (值 1, 值 2,....)7. Update 語句
Update 語句用于修改表中的數(shù)據(jù)。
UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值8. DELETE 語句
DELETE 語句用于刪除表中的行。
刪除特定行:
DELETE FROM 表名稱 WHERE 列名稱 = 值刪除所有行(表結(jié)構(gòu)、屬性和索引保持完整):
DELETE FROM table_name或:
DELETE * FROM table_name二、高級 SQL 語句
1. TOP 子句
TOP 子句用于規(guī)定要返回的記錄數(shù)目,對于大型表非常有用。
SELECT TOP number|percent column_name (s) FROM table_name例子:
選擇前兩個記錄:
SELECT TOP 2 * FROM Persons選擇前 50% 的記錄:
SELECT TOP 50 PERCENT * FROM Persons2. LIKE 操作符
LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。
SELECT column_name (s) FROM table_name WHERE column_name LIKE pattern例子:
從 "Persons" 表中選取居住在以 "N" 開始的城市里的人:
SELECT * FROM Persons WHERE City LIKE 'N%'"%" 可定義通配符,如 '% g'、'% lon%';通過 NOT 關(guān)鍵字,可選取不滿足模式的記錄,如
SELECT * FROM Persons WHERE City NOT LIKE '% lon%'3. SQL 通配符
% 通配符:匹配任意字符序列(包括空序列)。例如,從 "Persons" 表中選取居住在包含 "lond" 的城市里的人:
SELECT * FROM Persons WHERE City LIKE '% lond%'_通配符:匹配單個字符。例如,從 "Persons" 表中選取名字的第一個字符之后是 "eorge" 的人:
SELECT * FROM Persons WHERE FirstName LIKE '_eorge'[charlist] 通配符:匹配字符列表中的任意一個字符。例如,從 "Persons" 表中選取居住的城市以 "A" 或 "L" 或 "N" 開頭的人:
SELECT * FROM Persons WHERE City LIKE '[ALN]%'要選取不以這些字符開頭的,可使用 [!ALN]。
4. IN 操作符
IN 操作符允許在 WHERE 子句中規(guī)定多個值。
SELECT column_name (s) FROM table_name WHERE column_name IN (value1,value2,...)例子:
SELECT * FROM Persons WHERE LastName IN ('Adams','Carter')5. BETWEEN 操作符
BETWEEN ... AND 用于選取介于兩個值之間的數(shù)據(jù)范圍,值可以是數(shù)值、文本或日期。如需選擇范圍之外的,可在前面加 NOT。
6. AS
AS 用于為列名稱和表名稱指定別名。
為表指定別名:
SELECT column_name (s) FROM table_name AS alias_name為列指定別名:
SELECT column_name AS alias_name FROM table_name7. JOIN
JOIN 用于從兩個或更多表中獲取完整結(jié)果,主要有以下幾種類型:
- INNER JOIN:如果表中有至少一個匹配,則返回行。
- LEFT JOIN:即使右表中沒有匹配,也從左表返回所有的行。
- RIGHT JOIN:即使左表中沒有匹配,也從右表返回所有的行。
- FULL JOIN:只要其中一個表中存在匹配,就返回行。
例子:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons INNER JOIN Orders ON Persons.Id_P = Orders.Id_P ORDER BY Persons.LastName8. SQL UNION 操作符
UNION 操作符用于合并兩個或多個 SELECT 語句的結(jié)果集。需注意,UNION 內(nèi)部的 SELECT 語句必須擁有相同數(shù)量的列,列的數(shù)據(jù)類型相似,且列的順序相同。
SELECT column_name (s) FROM table_name1 UNION (ALL) SELECT column_name (s) FROM table_name2默認地,UNION 選取不同的值,允許重復值則用 UNION ALL。例子:列出所有在中國和美國的不同的雇員名:
SELECT E_Name FROM Employees_China UNION SELECT E_Name FROM Employees_USA9. SELECT INTO 語句
SELECT INTO 語句從一個表中選取數(shù)據(jù),插入另一個表中,常用于創(chuàng)建表的備份復件或存檔記錄。
插入所有列到新表:
SELECT * INTO new_table_name [IN externaldatabase] FROM old_tablename插入指定列到新表:
SELECT column_name (s) INTO new_table_name [IN externaldatabase] FROM old_tablename例子:制作 "Persons" 表的備份復件:
SELECT * INTO Persons_backup FROM Persons10. CREATE DATABASE 語句
用于創(chuàng)建數(shù)據(jù)庫:
CREATE DATABASE database_name11. CREATE TABLE 語句
用于創(chuàng)建數(shù)據(jù)庫中的表。
CREATE TABLE 表名稱 (列名稱 1 數(shù)據(jù)類型,列名稱 2 數(shù)據(jù)類型,列名稱 3 數(shù)據(jù)類型,....)12. SQL 約束
約束用于限制加入表的數(shù)據(jù)的類型,可在創(chuàng)建表時或表創(chuàng)建后通過 ALTER TABLE 語句規(guī)定。主要有:
- NOT NULL:強制列不接受 NULL 值。
- UNIQUE:唯一標識數(shù)據(jù)庫表中的每條記錄,每個表可多個 UNIQUE 約束。
- PRIMARY KEY:唯一標識數(shù)據(jù)庫表中的每條記錄,主鍵包含唯一值且不能為 NULL,每個表只能有一個主鍵。
- FOREIGN KEY:一個表中的 FOREIGN KEY 指向另一個表中的 PRIMARY KEY,用于預防破壞表之間連接的動作。
- CHECK:限制列中的值的范圍。
- DEFAULT:向列中插入默認值。
13. CREATE INDEX 語句(索引)
索引使數(shù)據(jù)庫應(yīng)用程序能更快地查找數(shù)據(jù),理想情況是在常被搜索的列上創(chuàng)建索引。
創(chuàng)建簡單索引(允許重復值):
CREATE INDEX index_name ON table_name (column_name)創(chuàng)建唯一索引(兩個行不能有相同的索引值):
CREATE UNIQUE INDEX index_name ON table_name (column_name)例子:在 Person 表的 LastName 列創(chuàng)建名為 "PersonIndex" 的簡單索引:
CREATE INDEX PersonIndex ON Person (LastName)14. DROP 語句
用于刪除索引、表和數(shù)據(jù)庫。
刪除索引:
DROP INDEX index_name ON table_name刪除表(表的結(jié)構(gòu)、屬性及索引也被刪除):
DROP TABLE 表名稱刪除數(shù)據(jù)庫:
DROP DATABASE 數(shù)據(jù)庫名稱僅刪除表內(nèi)數(shù)據(jù),保留表本身:
TRUNCATE TABLE 表名稱15. ALTER TABLE 語句
用于在已有的表中添加、修改或刪除列。
添加列:
ALTER TABLE table_name ADD column_name datatype刪除列:
ALTER TABLE table_name DROP COLUMN column_name16. AUTO INCREMENT 字段(自增)
希望每次插入新記錄時自動創(chuàng)建主鍵字段的值,可創(chuàng)建 auto-increment 字段。
例子:
CREATE TABLE Persons (P_Id int NOT NULL AUTO_INCREMENT,LastName varchar (255) NOT NULL,FirstName varchar (255),Address varchar (255),City varchar (255),PRIMARY KEY (P_Id))默認 AUTO_INCREMENT 開始值是 1,每條新記錄遞增 1,可通過 ALTER TABLE Persons AUTO_INCREMENT=100 修改起始值。
17. SQL CREATE VIEW 語句(視圖)
視圖是基于 SQL 語句的結(jié)果集的可視化的表,可像使用真實表一樣使用。
CREATE VIEW view_name AS SELECT column_name (s) FROM table_name WHERE condition例子:創(chuàng)建視圖 "Current Product List" 列出 Products 表中所有正在使用的產(chǎn)品:
CREATE VIEW [Current Product List] AS SELECT ProductID,ProductName FROM Products WHERE Discontinued=No可通過 CREATE OR REPLACE VIEW 更新視圖,通過 DROP VIEW view_name 刪除視圖。
18. SQL 日期
MySQL 中常用的內(nèi)建日期函數(shù)有 NOW ()、CURDATE ()、CURTIME () 等,存儲日期或日期 / 時間值的數(shù)據(jù)類型有 DATE、DATETIME、TIMESTAMP、YEAR。
19. SQL NULL 值
NULL 用作未知的或不適用的值的占位符,無法用比較運算符測試,必須使用 IS NULL 和 IS NOT NULL 操作符。Oracle 中可用 NVL () 函數(shù)處理 NULL 值。
三、SQL 函數(shù)
1. SQL AVG 函數(shù)
返回數(shù)值列的平均值,NULL 值不計入計算。
SELECT AVG (column_name) FROM table_name2. SQL COUNT () 函數(shù)
返回匹配指定條件的行數(shù)。
- COUNT (column_name):返回指定列的值的數(shù)目(NULL 不計入)。
- COUNT (*):返回表中的記錄數(shù)。
- COUNT (DISTINCT column_name):返回指定列的不同值的數(shù)目。
3. FIRST () 函數(shù)
返回指定字段中第一個記錄的值,可結(jié)合 ORDER BY 語句排序。
SELECT FIRST (column_name) FROM table_name4. LAST () 函數(shù)
返回指定字段中最后一個記錄的值,可結(jié)合 ORDER BY 語句排序。
SELECT LAST (column_name) FROM table_name5. MAX () 函數(shù)
返回一列中的最大值,NULL 值不計入計算,也可用于文本列獲取按字母順序排列的最高值。
6. MIN () 函數(shù)
返回一列中的最小值,NULL 值不計入計算,也可用于文本列獲取按字母順序排列的最低值。
7. SUM () 函數(shù)
返回數(shù)值列的總數(shù)(總額)。
SELECT SUM (column_name) FROM table_name8. GROUP BY 語句
結(jié)合合計函數(shù),根據(jù)一個或多個列對結(jié)果集進行分組。
SELECT column_name, aggregate_function (column_name) FROM table_name WHERE column_name operator value GROUP BY column_name9. HAVING 子句
因 WHERE 關(guān)鍵字無法與合計函數(shù)一起使用,故增加 HAVING 子句。
SELECT column_name, aggregate_function (column_name) FROM table_name WHERE column_name operator value GROUP BY column_name HAVING aggregate_function (column_name) operator value10. UCASE () 函數(shù)
把字段的值轉(zhuǎn)換為大寫。
SELECT UCASE (column_name) FROM table_name11. LCASE () 函數(shù)
把字段的值轉(zhuǎn)換為小寫。
SELECT LCASE (column_name) FROM table_name12. MID () 函數(shù)
從文本字段中提取字符。
SELECT MID (column_name,start [,length]) FROM table_name13. LEN () 函數(shù)
返回文本字段中值的長度。
SELECT LEN (column_name) FROM table_name14. ROUND () 函數(shù)
把數(shù)值字段舍入為指定的小數(shù)位數(shù)。
SELECT ROUND (column_name,decimals) FROM table_name15. NOW () 函數(shù)
返回當前的日期和時間,SQL Server 中用 getdate () 函數(shù)。
16. FORMAT () 函數(shù)
用于對字段的顯示進行格式化。
SELECT FORMAT (column_name,format) FROM table_name掌握這些 SQL 語句,能讓你在數(shù)據(jù)庫操作中更加得心應(yīng)手。無論是日常的數(shù)據(jù)查詢、維護,還是復雜的數(shù)據(jù)分析,這些語句都能發(fā)揮重要作用。趕緊收藏起來,隨時查閱吧!

























