SQL基础总结

SQL即Structed Query Language(结构化查询语言),是用于访问和处理数据库的标准的计算机语言.

我们可以通过SQL从数据库中查询、取回、插入、删除、更新数据,也可以创建新的数据库,创建新的表,创建新的存储过程与视图等,并可对表、存储过程和视图进行权限管理等操作.

注意! 产品经理是需要掌握基础的SQL语句的 .


SQL语言

SQL语言分为两部分,数据操作语言(DML)与数据定义语言(DDL)

注意! SQL语句对大小写不敏感.

注意! 只是SQL语句对大小写不敏感,但是数据中的大小写必须对应才能查询到.

几个重要的数据操作语言(DML) :

SELECT - 从数据库表中获取数据

UPDATE - 更新数据库表中的数据

DELETE - 从数据库表中删除数据

INSERT INTO - 向数据库表中插入数据


几个重要的数据定义语言(DDL) :

CREATE DATABASE - 创建新数据库

ALTER DATABASE - 修改数据库

CREATE TABLE - 创建新表

ALTER TABLE - 变更(改变)数据库表

DROP TABLE - 删除表

CREATE INDEX - 创建索引(搜索键)

DROP INDEX - 删除索引


1. SELECT 语句

1-1 SELECT 列名称 FROM 表名称

选取某个表中的某些列.

1-2 SELECT * FROM 表名称

选取某个表中的所有列.“ * ”是所有列的快捷表达方式.


2. DISTINCT 关键词

2-1 SELECT DISTINCT 列名称 FROM 表名称

选取某个表中的某些列中的唯一值(列内去除重复值后输出).


3. WHERE 子句

3-1 SELECT 列名称 FROM 表名称 WHERE 条件语句

选取某个表中符合某些条件的列.


4. 运算符

条件语句中可能含有以下运算符 :

4-1    列名称 = 字段值                                              等于

4-2    列名称 < 字段值                                              小于

4-3    列名称 > 字段值                                              大于

4-4    列名称 >= 字段值                                            大于等于

4-5    列名称 <= 字段值                                            小于等于

4-6    列名称 <> 字段值                                            不等于

4-7    列名称 != 字段值                                             不等于(某些版本中)

4-8    列名称 BETWEEN 字段值 AND 字段值          在某个范围内

4-9    列名称 LIKE 正则表达式                                 符合某种形式


5. 引号

注意! SQL中提到字段值要用单引号或双引号圈起来,但当字段值数据类型为数值时则不要用引号圈起来.


6. AND 和 OR 运算符

用于链接WHERE子句中的多个条件语句

6-1 条件语句 AND 条件语句 

如果AND链接的所有条件全部成立,则显示记录.

6-2 条件语句 OR 条件语句

如果OR链接的所有条件有至少一个成立,则显示记录.

注意! AND 和 OR 运算符的运算顺序为从左到又,可以使用括号来改变运算优先级.


7. ORDER BY 子句

根据指定的列对结果进行排序.

注意! ORDER BY子句默认按照升序顺序进行排列,如果需要降序排列需添加关键字 DESC .

注意! ORDER BY子句的排序顺序为英文字母表顺序,如果排序字段的数据类型为数字则为大小顺序.

注意! 当同时以多个逻辑进行排列时,优先级顺序为从左到右,当第一排序条件的值相同时才会按照第二排序条件对应的规则排序.

7-1 列名称 ASC          按照列中字段值升序排列

7-2 列名称 DESC       按照列中字段值降序排列


8. INSERT INTO 语句

INSERT INTO语句用于向某个表中插入新的行.

8-1 INSERT INTO 表名称 VALUES ( 列A对应的插入值, 列B对应的插入值, 列C对应的插入值, .... )

8-2 INSERT INTO 表名称 ( 列A名称, 列B名称, ... ) VALUES ( 列A对应的插入值, 列B对应的插入值, 列C对应的插入值, .... )

用于向某些特定的列插入值.

注意! 新插入的行如果有未填写的列,则该值为空(null).


9. UPDATE 语句

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

9-1 UPDATE 表名称 SET 列名称 = 字段值 WHERE 列名称 = 某值


10. DELETE 语句

10-1 DELETE FROM 表名称 WHERE 列名称 = 某值

用于删除表中的行.

10-2 DELETE FROM 表名称    或    DELETE * FROM 表名称

删除表中的所有行.


第二阶段

11. TOP 子句

TOP 子句用于限制返回的记录数.

11-1 SELECT TOP 数量/百分比 列名称 FROM 表名                                (SQL Server 语法)

11-2 SELECT 列名称 FROM 表名称 LIMIT 数量                                      (MySQL 语法)

11-3 SELECT 列名称 FROM 表名称 WHERE ROWNUM <= 数量          (Oracle 语法)


12. LIKE 操作符

LIKE 操作符用于搜索某列中格式符合特定模式的字段

12-1 SELECT 列名称 FROM 表名称 WHERE 列名称 LIKE 某格式(该格式需用单引号引出)

12-2 NOT LIKE 操作符

可使用 NOT LIKE 操作符搜索某列中格式不符合特定模式的字段


13. SQL 通配符

SQL 通配符用于在匹配数据项时指代一个或多个字符.

注意! SQL 通配符必须与 LIKE 操作符一起使用.

13-1 通配符 “%” 

通配符 “%” 用于指代一个或多个字符.

13-2 通配符 “_”

通配符 “_” 仅可指代一个字符

13-3 通配符 “[字符列表]”

通配符 “[字符列表]” 可指代字符列表中的一个字符.

13-2 通配符 “[^字符列表]”

或 通配符 “[!字符列表]”

上述通配符可指代非上述字符列表中的一个字符.


14. IN 操作符

IN 操作符用于在 WHERE 子句中描述多个匹配项.

14-1 SELECT 列名称 FROM 表名称 WHERE 列名称 IN ( '值A', '值B', 值C', ... ) 


15. BETWEEN 操作符

BETWEEN 操作符用于在 WHERE 子句中选取两个值中间的部分.

15-1 SELECT 列名称 FROM 表名称 WHERE 列名称 BETWEEN ‘值A’ AND “值B”

注意! 某些数据库会列出值A与值B在内的两者之间的全部值,而某些数据库会列出不包括值A与值B在内的两者之间的全部值,还有些数据库会列出包括值A但不包括值B在内的两者之间的全部值.

注意! 可以使用 NOT 操作符来选择某范围之外的值.


16. Alias (AS) 操作符

Alias (AS) 操作符用于为列或表名称制定别名.

16-1 SELECT 列名称 FROM 表名称 AS 别名

给某个表指定别名.

16-2 SELECT 列名称 AS 别名 FROM 表名称

给某个列指定别名.

注意! 使用 AS 操作符会改变输出后的列名称.


17. JOIN 操作符

JOIN 操作符用于根据某些条件连接多个表实现跨表查询.

17-1 Key

数据库中的表可通过键(Key)来连接起来, 主键(Primary Key)是一个列.

注意! 主键的值是唯一的, 这样才能不重复地将多个表间的数据连接在一起.

17-2 JOIN (INNER JOIN)

存在至少一个匹配项时返回匹配的行.

SELECT 列名称 FROM 表名称 INNER JOIN 表名称 ON 表名称.列名称 = 表名称.列名称

注意! INNER JOIN 和 JOIN 是相同的.

17-4 LEFT JOIN

返回左表中的所有行,右表中无匹配项则相应的列缺省.

SELECT 列名称 FROM 表名称 LEFT JOIN 表名称 ON 表名称.列名称 = 表名称.列名称

17-5 RIGHT JOIN

返回右表中的所有行,左表中无匹配项则相应的列缺省.

SELECT 列名称 FROM 表名称 RIGHT JOIN 表名称 ON 表名称.列名称 = 表名称.列名称

17-6 FULL JOIN

只要有一项匹配成功就返回所有的行.

注意! 多个表连接时只要有一个匹配则返回全部行.

SELECT 列名称 FROM 表名称 FULL JOIN 表名称 ON 表名称.列名称 = 表名称.列名称


18. UNION 操作符

UNION操作符用于合并多个 SELECT 语句的查询结果.

18-1 SELECT 列名称 FROM 表名称 UNION 对应的列名称 FROM 表名称

注意! UNION 操作符会将结果集中的重复项删除只保留一个唯一值, 如果不需要删除重复的值需要使用 UNION ALL 指令.

18-2 SELECT 列名称 FROM 表名称 UNION ALL 对应的列名称 FROM 表名称


19. SELECT INTO 语句

SELECT INTO 语句用于从一个表中选取某几行数据, 然后将其插入其他表中.

19-1 SELECT 列名称 INTO 表名称 FROM 表名称

注意! 可选择某些列的数据插入新表或者全部列的数据插入新表.

注意! 如果插入的表不存在则会自动创建对应的表.

注意! 可选取多个表中的值进行拷贝.

19-2 SELECT 列名称 INTO 表名称 IN 数据库名称 FROM 表名称

可通过 IN 子句向其他数据库中拷贝表.


20. CREAT DATABASE 语句

CREATE DATABASE 语句用于创建数据库

20-1 CREATE DATABASE 数据库名


21. CREAT TABLE 语句

CREATE TABLE 语句用于创建数据库中的表

21-1 CREATE TABLE 表名称 ( 列名称 数据类型, 列名称 数据类型, 列名称 数据类型, ... )

数据类型规定了该列可容纳的数据类型

21-2 数据类型

a. integer(size), int(size), smallint(size), tinyint(size)        整数,括号内“size”为数字最大位数.

b. decimal(size,d), numeric(size,d)        小数,括号内“size”为数字最大位数,“d”为小数最大位数.

c. char(size)        固定长度的字符串(字母、数字以及特殊字符),括号内“size”为字符串的长度.

d.varchar(size)        可变长度的字符串(字母、数字以及特殊自负),括号内“size”为字符串的最大长度.

e.date(yyyymmdd)        日期.


22. SQL 约束

约束用于限制加入表的数据的类型.

注意! 可在创建表(CREATE TABLE)时规定约束, 也可在创建表后(ALTER TABLE)再加入约束 .

22-1 NOT NULL

NOT NULL 约束用于规定列中不接受空值(NULL) , 即不向该列添加值时无法插入或修改记录.

22-2 UNIQUE

UNIQUE 用于规定列中每一个值均不重复.

注意! PRIMARY KEY 拥有自动定义的 UNIQUE 约束, 每个表只可有一个PRIMARY KEY, 却可有多个UNIQUE 约束.

注意! 使用 ALTER 表名称 ADD UNIQUE (列名称) 来为已创建表中的列加入UNIQUE限制.

注意! 使用 CONSTRAINT 约束名称 UNIQUE ( 列名称, 列名称, ... ) 来为多个列添加约束并命名.

注意! 使用 ALTER TABLE 表名称 DROP CONSTRAINT 约束名称 (SQL Server / Oracle / MS Access )

或 ALTER TABLE 表名称 DROP INDEX 约束名称 来撤销约束.

22-3 PRIMARY KEY

PRIMARY KEY 为主键, 用来唯一标识表中的每条记录. 

注意! 主键必须包含唯一的值. ( 满足 UNIQUE 约束)

注意! 主键不能包含空值(NULL).

22-4 FOREIGN KEY

FOREIGN KEY 约束用于预防破坏表之间连接的动作.

FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一.

FOREIGN KEY (列名称) REFERENCES 表名称(列名称)  

用于新建表时指定 FOREIGN KEY .

ADD FOREIGN KEY (列名称) REFERENCES 表名称(列名称)

用于在已建好的表中指定 FOREIGN KEY .

22-5 CHECK

CHECK 约束用于限制列中的数值的范围.

ADD CHECK (限制条件)

22-6 DEFAULT

DEFAULT 约束用于向列中插入固定的值.

ALTER 列名称 SET DEFAULT ‘默认值’

ALTER 列名称 DROP DEFAULT


23. CREATE INDEX

创建索引以提升查找速度 .

注意! 在更新数据时, 包含索引会带来更高的成本, 因此只在查询频率高的地方创建索引. 

23-1 CREATE INDEX 索引名称 ON 表名称 (列名称)


24. DROP

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

ALTER TABLE 表名称 DROP INDEX 索引名称

DROP DATABASE 数据库名称

DROP TABLE 表名称

TRUNCATE TABLE 表名称

清空表中数据但不删除表.


25. ALTER

用于增加、删除或修改已有的表中的列 .

25-1 ALTER TABLE 表名称 ADD 列名称 数据类型

25-2 ALTER TABLE 表名称 DROP COLUMN 列名称

25-3 ALTER TABLE 表名称 COLUMN 列名称 数据类型


26. AUTO INCREMENT

用于插入新纪录时自动生成主键值 .

ALTER TABLE 表名称 AUTO_INCREMENT=初始值


27. SQL VIEW

视图是选取部分数据集构成的可视化的表 .

注意! 视图不会影响数据库中的数据 .

CREATE VIEW 视图名称 AS SELECT 列名称 FROM 表名称 WHERE 筛选条件

用于新建视图并添加查询条件 .

注意! 每次用户查询视图时, 数据库将根据SQL语句对视图数据进行更新 .

DROP VIEW 视图名称

用于删除视图 .


28. DATE函数

28-1 NOW()

返回当前的日期和时间

28-2 CURDATE()

返回当前的日期

28-3 CURTIME()

返回当前的时间

28-4 DATE()

提取日期或日期/时间表达式的日期部分

28-5 EXTRACT()

返回日期/时间按的单独部分

28-6 DATE_ADD()

给日期添加指定的时间间隔

28-7 DATE_SUB()

从日期减去指定的时间间隔

28-8 DATEDIFF()

返回两个日期之间的天数

28-9 DATE_FORMAT()

用不同的格式显示日期/时间

28-10 DATE 格式

DATE - 格式 YYYY-MM-DD

DATETIME - 格式: YYYY-MM-DD HH:MM:SS

TIMESTAMP - 格式: YYYY-MM-DD HH:MM:SS

YEAR - 格式 YYYY 或 YY

注意! 当DATE中存储了时间时, 若查询对应的日期会查询不到 . 如果希望构建简单易维护的查询, 就尽量不要使用时间 .


29. NULL值

NULL值是遗漏的未知数据, 当某个可选填的字段未被填充时, 则默认为NULL .

NULL值与其他值的处理方式不同, 通常用作未知或不适用的值的占位符.

注意! NULL值不等价于 0 , 两者无法进行比较.

29-1 IS NULL运算符

用于判断某个值是否为NULL.

29-2 IS NOT NULL运算符

用于判断某个值是否不是NULL.

29-3 IFNULL()

可在值为NULL时将NULL值临时替换成某个值.

如 IFNULL(price,0)


30. 数据类型

MYSQL分为三大类数据类型: 文本、数字和日期/时间 .


31. 数据库

31-1 数据库管理系统——DBMS(Database Management System)

数据库管理系统是一种可以访问数据库中数据的计算机程序。

DBMS 使我们有能力在数据库中提取、修改或者存贮信息。

不同的 DBMS 提供不同的函数供查询、提交以及修改数据。

31-2 关系型数据库管理系统——RDBMS(Relational Database Management System)

关系数据库管理系统 (RDBMS) 也是一种数据库管理系统,其数据库是根据数据间的关系来组织和访问数据的。

你可能感兴趣的:(SQL基础总结)