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) 也是一种数据库管理系统,其数据库是根据数据间的关系来组织和访问数据的。