SQL的复习

2016/9/6 posted in  Database  

这几天复习了一下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 条件