这几天复习了一下SQL,简单总结一下吧!
SQL的分类
DDL(数据定义语言)
SELECT
UPDATE
DELETE
INSERT INTO
DML(数据操作语言)
CREATE/ALTER DATABASE
CREATE/ALTER/DROP TABLE
CREATE/DROP INDEX
基本语法
SELECT
SELECT (DISTINCT) 列名称
FROM 表名称
WHERE {列 运算符 值} AND/OR {列 运算符 值}
ORDER BY 列名称 ASC/DESC, 列名称 ASC/DESC
DISTINCT
:返回不重复的值
AND/OR
:条件
ORDER BY
:排序
ASC/DESC
:升序/降序,默认升序,多个列时,先按靠前的列排序
INSERT
INSERT INTO 表名称 (列1, 列2,...)
VALUES (值1, 值2,....)
不写(列1, 列2,...)时讲填写所有值
写(列1, 列2,...)时为赋值的给空值
UPDATE
UPDATE 表名称
SET 列名称 = 新值
WHERE 列名称 = 某值
DELETE
DELETE FROM 表名称
WHERE 列名称 = 值
修饰词
TOP
规定返回的记录条数,不同数据库语法不同,下面是SQL Server的:
SELECT TOP number|percent 列名称
FROM 表名称
例子:
SELECT TOP 2 * FROM Persons
SELECT TOP 50 PERCENT * FROM Persons
LIKE
用在WHERE
中,寻找匹配的模式
SELECT 列名称
FROM 表名称
WHERE 列 LIKE 模式
模式用通配符来表示:
%
:一个或多个字符
_
:一个字符
[字符列表]
:字符列表中的一个字符
[^字符列表]
:不在字符列表中的一个字符,也可以用[!字符列表]
例子:
Ne%
:以Ne开头的串
%lond%
:包含lond的串
_eorge
:第一个字符后面是eorge的串
[ALN]%
:以A或L或N开头的串
IN
用于WHERE
中,规定多个值的范围
SELECT 列名称
FROM 表名称
WHERE 列 IN (value1,value2,...)
BETWEEN...AND
用于WHERE
中,规定一段范围
SELECT 列名称
FROM 表名称
WHERE 列
(NOT) BETWEEN value1 AND value2
AS
别名
SELECT 列名称
FROM 表名称
AS 列的别名
SELECT 列名称 AS 列的别名
FROM 表名称
JOIN
JOIN
/INNER JOIN
: 如果表中有至少一个匹配,则返回行(交集)LEFT JOIN
: 即使右表中没有匹配,也从左表返回所有的行RIGHT JOIN
: 即使左表中没有匹配,也从右表返回所有的行FULL JOIN
: 只要其中一个表中存在匹配,就返回行(并集)
SELECT 列名称
FROM 表名称
INNER JOIN 表名称
ON 列名称1=列名称2
UNION
合并两个或多个 SELECT
语句的结果集,结果集列必须相同
UNION ALL
允许重复值
SELECT 列名称1 FROM 表名称1
UNION (ALL)
SELECT 列名称2 FROM 表名称2
SELECT INTO
把SELECT
的结果集插入另一个表
SELECT 列名称
INTO 新表名称 (IN 外部数据库名称)
FROM 旧表名称
数据库操作
CREATE DATABASE
CREATE DATABASE 数据库名
CREATE TABLE
CREATE TABLE 表名称
(
列名称1 数据类型 约束,
列名称2 数据类型 约束,
列名称3 数据类型 约束,
....
)
约束:
NOT NULL
:不接受空值UNIQUE
:唯一值PRIMARY KEY
:主键,唯一值,每个表只能有一个主键FOREIGN KEY
:外键,指向另一个表中的主键CHECK
:限制值的范围DEFAULT
:默认值AUTO INCREMENT
:自增或自减
例子:
CREATE TABLE Persons
(
Id_P int NOT NULL UNIQUE AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT 'Sandnes'
PRIMARY KEY (Id_P)
FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
CHECK (Id_P>0)
)
有自增的属性在INSERT
时可以不用赋值。
CREATE INDEX
创建索引,索引是看不到的,但是可以加快查询的速度。
CREATE (UNIQUE) INDEX 索引名称
ON 表名称 (列名称)
UNIQUE
用来创建唯一的索引,即两个行不能有相同的索引值
ALTER TABLE
在已经存在的表中修改表结构
添加列:
sql
ALTER TABLE 表名称
ADD 列名称 数据类型
删除列:
sql
ALTER TABLE 表名称
DROP COLUMN 列名称
修改列:
sql
ALTER TABLE 表名称
ALTER COLUMN 列名称 数据类型
VIEW
VIEW是一个虚拟的表,是基于SQL语句的结果集。
CREATE VIEW VIEW名称 AS
SELECT 列名称
FROM 表名称
WHERE 条件
修改VIEW
sql
CREATE (REPLACE) VIEW VIEW名称 AS
SELECT 列名称
FROM 表名称
WHERE 条件
重要的函数
GROUP BY
SELECT 列名称
FROM 表名称
GROUP BY 列名称
返回的结果会根据GROUP BY
的列来分组,其他的列进行合并
HAVING
GROUP BY
子句不能和WHERE
一起使用,因此要用HAVING
关键字
SELECT 列名称
FROM 表名称
GROUP BY 列名称
HAVING 条件