数据库常用 SQL 语句大全,从基础到高级全掌握
在数据库操作中,SQL 语句是必不可少的工具。无论是数据查询、插入、更新,还是表结构的创建与修改,都需要用到 SQL。今天就为大家整理一份全面的 SQL 语句指南,从基础到高级,助你轻松搞定数据库操作。
一、基础 SQL 语句
1. SELECT 语句
SELECT 语句用于从表中选取数据,结果会被存储在一个结果集中。
选取特定列:
SELECT 列名称 FROM 表名称
选取所有列:
SELECT * FROM 表名称
在结果集中,大多数数据库软件系统都允许使用编程函数进行导航,比如 Move-To-First-Record、Get-Record-Content 等。
2. SELECT DISTINCT 语句
表中可能包含重复值,DISTINCT 关键词用于返回唯一不同的值。
SELECT DISTINCT 列名称 FROM 表名称
3. WHERE 子句
WHERE 子句可添加到 SELECT 语句中,用于有条件地从表中选取数据。
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
运算符包括大于、等于、小于、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,....)
指定插入数据的列:
INSERT INTO table_name (列 1, 列 2,...) VALUES (值 1, 值 2,....)
7. Update 语句
Update 语句用于修改表中的数据。
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
8. DELETE 语句
DELETE 语句用于删除表中的行。
删除特定行:
DELETE FROM 表名称 WHERE 列名称 = 值
删除所有行(表结构、属性和索引保持完整):
DELETE FROM table_name
或:
DELETE * FROM table_name
二、高级 SQL 语句
1. TOP 子句
TOP 子句用于规定要返回的记录数目,对于大型表非常有用。
SELECT TOP number|percent column_name (s) FROM table_name
例子:
选择前两个记录:
SELECT TOP 2 * FROM Persons
选择前 50% 的记录:
SELECT TOP 50 PERCENT * FROM Persons
2. 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 关键字,可选取不满足模式的记录,如
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 子句中规定多个值。
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 用于选取介于两个值之间的数据范围,值可以是数值、文本或日期。如需选择范围之外的,可在前面加 NOT。
6. AS
AS 用于为列名称和表名称指定别名。
为表指定别名:
SELECT column_name (s) FROM table_name AS alias_name
为列指定别名:
SELECT column_name AS alias_name FROM table_name
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.LastName
8. SQL UNION 操作符
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。需注意,UNION 内部的 SELECT 语句必须拥有相同数量的列,列的数据类型相似,且列的顺序相同。
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_USA
9. SELECT INTO 语句
SELECT INTO 语句从一个表中选取数据,插入另一个表中,常用于创建表的备份复件或存档记录。
插入所有列到新表:
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 Persons
10. CREATE DATABASE 语句
用于创建数据库:
CREATE DATABASE database_name
11. CREATE TABLE 语句
用于创建数据库中的表。
CREATE TABLE 表名称 (列名称 1 数据类型,列名称 2 数据类型,列名称 3 数据类型,....)
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)
创建唯一索引(两个行不能有相同的索引值):
CREATE UNIQUE INDEX index_name ON table_name (column_name)
例子:在 Person 表的 LastName 列创建名为 "PersonIndex" 的简单索引:
CREATE INDEX PersonIndex ON Person (LastName)
14. DROP 语句
用于删除索引、表和数据库。
删除索引:
DROP INDEX index_name ON table_name
删除表(表的结构、属性及索引也被删除):
DROP TABLE 表名称
删除数据库:
DROP DATABASE 数据库名称
仅删除表内数据,保留表本身:
TRUNCATE TABLE 表名称
15. ALTER TABLE 语句
用于在已有的表中添加、修改或删除列。
添加列:
ALTER TABLE table_name ADD column_name datatype
删除列:
ALTER TABLE table_name DROP COLUMN column_name
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))
默认 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 condition
例子:创建视图 "Current Product List" 列出 Products 表中所有正在使用的产品:
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 中常用的内建日期函数有 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_name
2. SQL COUNT () 函数
返回匹配指定条件的行数。
- COUNT (column_name):返回指定列的值的数目(NULL 不计入)。
- COUNT (*):返回表中的记录数。
- COUNT (DISTINCT column_name):返回指定列的不同值的数目。
3. FIRST () 函数
返回指定字段中第一个记录的值,可结合 ORDER BY 语句排序。
SELECT FIRST (column_name) FROM table_name
4. LAST () 函数
返回指定字段中最后一个记录的值,可结合 ORDER BY 语句排序。
SELECT LAST (column_name) FROM table_name
5. MAX () 函数
返回一列中的最大值,NULL 值不计入计算,也可用于文本列获取按字母顺序排列的最高值。
6. MIN () 函数
返回一列中的最小值,NULL 值不计入计算,也可用于文本列获取按字母顺序排列的最低值。
7. SUM () 函数
返回数值列的总数(总额)。
SELECT SUM (column_name) FROM table_name
8. GROUP BY 语句
结合合计函数,根据一个或多个列对结果集进行分组。
SELECT column_name, aggregate_function (column_name) FROM table_name WHERE column_name operator value GROUP BY column_name
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 value
10. UCASE () 函数
把字段的值转换为大写。
SELECT UCASE (column_name) FROM table_name
11. LCASE () 函数
把字段的值转换为小写。
SELECT LCASE (column_name) FROM table_name
12. MID () 函数
从文本字段中提取字符。
SELECT MID (column_name,start [,length]) FROM table_name
13. LEN () 函数
返回文本字段中值的长度。
SELECT LEN (column_name) FROM table_name
14. ROUND () 函数
把数值字段舍入为指定的小数位数。
SELECT ROUND (column_name,decimals) FROM table_name
15. NOW () 函数
返回当前的日期和时间,SQL Server 中用 getdate () 函数。
16. FORMAT () 函数
用于对字段的显示进行格式化。
SELECT FORMAT (column_name,format) FROM table_name
掌握这些 SQL 语句,能让你在数据库操作中更加得心应手。无论是日常的数据查询、维护,还是复杂的数据分析,这些语句都能发挥重要作用。赶紧收藏起来,随时查阅吧!