数据库常用 SQL 语句大全,从基础到高级全掌握

在数据库操作中,SQL 语句是必不可少的工具。无论是数据查询、插入、更新,还是表结构的创建与修改,都需要用到 SQL。今天就为大家整理一份全面的 SQL 语句指南,从基础到高级,助你轻松搞定数据库操作。

一、基础 SQL 语句

1. SELECT 语句

SELECT 语句用于从表中选取数据,结果会被存储在一个结果集中。

选取特定列:

复制
SELECT 列名称 FROM 表名称1.

选取所有列:

复制
SELECT * FROM 表名称1.

在结果集中,大多数数据库软件系统都允许使用编程函数进行导航,比如 Move-To-First-Record、Get-Record-Content 等。

2. SELECT DISTINCT 语句

表中可能包含重复值,DISTINCT 关键词用于返回唯一不同的值。

复制
SELECT DISTINCT 列名称 FROM 表名称1.

3. WHERE 子句

WHERE 子句可添加到 SELECT 语句中,用于有条件地从表中选取数据。

复制
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值1.

运算符包括大于、等于、小于、between、like 等。需要注意的是,SQL 使用单引号环绕文本值,数值则不用加引号。

4. AND 和 OR 运算符

AND 和 OR 可在 WHERE 子句中把两个或多个条件结合起来,实现更精确的筛选。

5. ORDER BY 语句

ORDER BY 语句用于根据指定的列对结果集进行排序,默认按照升序(ASC)排序,若要降序排序,可使用 DESC 关键字。

6. INSERT INTO 语句

INSERT INTO 语句用于向表格中插入新的行。

插入所有列的值:

复制
INSERT INTO 表名称 VALUES (1,2,....)1.

指定插入数据的列:

复制
INSERT INTO table_name (1,2,...) VALUES (1,2,....)1.

7. Update 语句

Update 语句用于修改表中的数据。

复制
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值1.

8. DELETE 语句

DELETE 语句用于删除表中的行。

删除特定行:

复制
DELETE FROM 表名称 WHERE 列名称 = 值1.

删除所有行(表结构、属性和索引保持完整):

复制
DELETE FROM table_name1.

或:

复制
DELETE * FROM table_name1.
二、高级 SQL 语句

1. TOP 子句

TOP 子句用于规定要返回的记录数目,对于大型表非常有用。

复制
SELECT TOP number|percent column_name (s) FROM table_name1.

例子:

选择前两个记录:

复制
SELECT TOP 2 * FROM Persons1.

选择前 50% 的记录:

复制
SELECT TOP 50 PERCENT * FROM Persons1.

2. LIKE 操作符

LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。

复制
SELECT column_name (s) FROM table_name WHERE column_name LIKE pattern1.

例子:

从 "Persons" 表中选取居住在以 "N" 开始的城市里的人:

复制
SELECT * FROM Persons WHERE City LIKE N%1.

"%" 可定义通配符,如 % g、% lon%;通过 NOT 关键字,可选取不满足模式的记录,如 

复制
SELECT * FROM Persons WHERE City NOT LIKE % lon%1.

3. SQL 通配符

% 通配符:匹配任意字符序列(包括空序列)。例如,从 "Persons" 表中选取居住在包含 "lond" 的城市里的人:

复制
SELECT * FROM Persons WHERE City LIKE % lond%1.

_通配符:匹配单个字符。例如,从 "Persons" 表中选取名字的第一个字符之后是 "eorge" 的人:

复制
SELECT * FROM Persons WHERE FirstName LIKE _eorge1.

[charlist] 通配符:匹配字符列表中的任意一个字符。例如,从 "Persons" 表中选取居住的城市以 "A" 或 "L" 或 "N" 开头的人:

复制
SELECT * FROM Persons WHERE City LIKE [ALN]%1.

要选取不以这些字符开头的,可使用 [!ALN]。

4. IN 操作符

IN 操作符允许在 WHERE 子句中规定多个值。

复制
SELECT column_name (s) FROM table_name WHERE column_name IN (value1,value2,...)1.

例子:

复制
SELECT * FROM Persons WHERE LastName IN (Adams,Carter)1.

5. BETWEEN 操作符

BETWEEN ... AND 用于选取介于两个值之间的数据范围,值可以是数值、文本或日期。如需选择范围之外的,可在前面加 NOT。

6. AS

AS 用于为列名称和表名称指定别名。

为表指定别名:

复制
SELECT column_name (s) FROM table_name AS alias_name1.

为列指定别名:

复制
SELECT column_name AS alias_name FROM table_name1.

7. JOIN

JOIN 用于从两个或更多表中获取完整结果,主要有以下几种类型:

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.LastName1.

8. SQL UNION 操作符

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。需注意,UNION 内部的 SELECT 语句必须拥有相同数量的列,列的数据类型相似,且列的顺序相同。

复制
SELECT column_name (s) FROM table_name1 UNION (ALL) SELECT column_name (s) FROM table_name21.

默认地,UNION 选取不同的值,允许重复值则用 UNION ALL。例子:列出所有在中国和美国的不同的雇员名:

复制
SELECT E_Name FROM Employees_China UNION SELECT E_Name FROM Employees_USA1.

9. SELECT INTO 语句

SELECT INTO 语句从一个表中选取数据,插入另一个表中,常用于创建表的备份复件或存档记录。

插入所有列到新表:

复制
SELECT * INTO new_table_name [IN externaldatabase] FROM old_tablename1.

插入指定列到新表:

复制
SELECT column_name (s) INTO new_table_name [IN externaldatabase] FROM old_tablename1.

例子:制作 "Persons" 表的备份复件:

复制
SELECT * INTO Persons_backup FROM Persons1.

10. CREATE DATABASE 语句

用于创建数据库:

复制
CREATE DATABASE database_name1.

11. CREATE TABLE 语句

用于创建数据库中的表。

复制
CREATE TABLE 表名称 (列名称 1 数据类型,列名称 2 数据类型,列名称 3 数据类型,....)1.

12. SQL 约束

约束用于限制加入表的数据的类型,可在创建表时或表创建后通过 ALTER TABLE 语句规定。主要有:

NOT NULL:强制列不接受 NULL 值。UNIQUE:唯一标识数据库表中的每条记录,每个表可多个 UNIQUE 约束。PRIMARY KEY:唯一标识数据库表中的每条记录,主键包含唯一值且不能为 NULL,每个表只能有一个主键。FOREIGN KEY:一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY,用于预防破坏表之间连接的动作。CHECK:限制列中的值的范围。DEFAULT:向列中插入默认值。

13. CREATE INDEX 语句(索引)

索引使数据库应用程序能更快地查找数据,理想情况是在常被搜索的列上创建索引。

创建简单索引(允许重复值):

复制
CREATE INDEX index_name ON table_name (column_name)1.

创建唯一索引(两个行不能有相同的索引值):

复制
CREATE UNIQUE INDEX index_name ON table_name (column_name)1.

例子:在 Person 表的 LastName 列创建名为 "PersonIndex" 的简单索引:

复制
CREATE INDEX PersonIndex ON Person (LastName)1.

14. DROP 语句

用于删除索引、表和数据库。

删除索引:

复制
DROP INDEX index_name ON table_name1.

删除表(表的结构、属性及索引也被删除):

复制
DROP TABLE 表名称1.

删除数据库:

复制
DROP DATABASE 数据库名称1.

仅删除表内数据,保留表本身:

复制
TRUNCATE TABLE 表名称1.

15. ALTER TABLE 语句

用于在已有的表中添加、修改或删除列。

添加列:

复制
ALTER TABLE table_name ADD column_name datatype1.

删除列:

复制
ALTER TABLE table_name DROP COLUMN column_name1.

16. AUTO INCREMENT 字段(自增)

希望每次插入新记录时自动创建主键字段的值,可创建 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))1.

默认 AUTO_INCREMENT 开始值是 1,每条新记录递增 1,可通过 ALTER TABLE Persons AUTO_INCREMENT=100 修改起始值。

17. SQL CREATE VIEW 语句(视图)

视图是基于 SQL 语句的结果集的可视化的表,可像使用真实表一样使用。

复制
CREATE VIEW view_name AS SELECT column_name (s) FROM table_name WHERE condition1.

例子:创建视图 "Current Product List" 列出 Products 表中所有正在使用的产品:

复制
CREATE VIEW [Current Product List] AS SELECT ProductID,ProductName FROM Products WHERE Discontinued=No1.

可通过 CREATE OR REPLACE VIEW 更新视图,通过 DROP VIEW view_name 删除视图。

18. SQL 日期

MySQL 中常用的内建日期函数有 NOW ()、CURDATE ()、CURTIME () 等,存储日期或日期 / 时间值的数据类型有 DATE、DATETIME、TIMESTAMP、YEAR。

19. SQL NULL 值

NULL 用作未知的或不适用的值的占位符,无法用比较运算符测试,必须使用 IS NULL 和 IS NOT NULL 操作符。Oracle 中可用 NVL () 函数处理 NULL 值。

三、SQL 函数

1. SQL AVG 函数

返回数值列的平均值,NULL 值不计入计算。

复制
SELECT AVG (column_name) FROM table_name1.

2. SQL COUNT () 函数

返回匹配指定条件的行数。

COUNT (column_name):返回指定列的值的数目(NULL 不计入)。COUNT (*):返回表中的记录数。COUNT (DISTINCT column_name):返回指定列的不同值的数目。

3. FIRST () 函数

返回指定字段中第一个记录的值,可结合 ORDER BY 语句排序。

复制
SELECT FIRST (column_name) FROM table_name1.

4. LAST () 函数

返回指定字段中最后一个记录的值,可结合 ORDER BY 语句排序。

复制
SELECT LAST (column_name) FROM table_name1.

5. MAX () 函数

返回一列中的最大值,NULL 值不计入计算,也可用于文本列获取按字母顺序排列的最高值。

6. MIN () 函数

返回一列中的最小值,NULL 值不计入计算,也可用于文本列获取按字母顺序排列的最低值。

7. SUM () 函数

返回数值列的总数(总额)。

复制
SELECT SUM (column_name) FROM table_name1.

8. GROUP BY 语句

结合合计函数,根据一个或多个列对结果集进行分组。

复制
SELECT column_name, aggregate_function (column_name) FROM table_name WHERE column_name operator value GROUP BY column_name1.

9. HAVING 子句

因 WHERE 关键字无法与合计函数一起使用,故增加 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 value1.

10. UCASE () 函数

把字段的值转换为大写。

复制
SELECT UCASE (column_name) FROM table_name1.

11. LCASE () 函数

把字段的值转换为小写。

复制
SELECT LCASE (column_name) FROM table_name1.

12. MID () 函数

从文本字段中提取字符。

复制
SELECT MID (column_name,start [,length]) FROM table_name1.

13. LEN () 函数

返回文本字段中值的长度。

复制
SELECT LEN (column_name) FROM table_name1.

14. ROUND () 函数

把数值字段舍入为指定的小数位数。

复制
SELECT ROUND (column_name,decimals) FROM table_name1.

15. NOW () 函数

返回当前的日期和时间,SQL Server 中用 getdate () 函数。

16. FORMAT () 函数

用于对字段的显示进行格式化。

复制
SELECT FORMAT (column_name,format) FROM table_name1.

掌握这些 SQL 语句,能让你在数据库操作中更加得心应手。无论是日常的数据查询、维护,还是复杂的数据分析,这些语句都能发挥重要作用。赶紧收藏起来,随时查阅吧!

阅读剩余
THE END