《SQL入门经典》学习笔记
· 阅读需 4 分钟
这本书总体上来讲还是比较简单的,SQL入门还是不难的。使用了三种数据库,语法有所不同,有点混乱。在看书的过程中记录了一些笔记,以便查阅吧。就是下面这本:

操作符
=相等<>,!=不等>,<,>=,<=IS NULL,IS NOT NULLBETWEEN介于(包含端点)NOT BETWEENIN值在列表中,NOT INLIKE通配符匹配:%(>0个字符),_(1个字符),NOT LIKEEXISTS,NOT EXISTSUNIQUE,NOT UNIQUEALL,ANY,SOME(ANY的别名)AND,OR+,-,*,/算术运算
汇总查询
COUNT, SUM, MAX, MIN, AVG
数据排序与分组
GROUP BY, ORDER BY
CUBE, ROLLUP
WHERE子句设定SELECT选择字段的条件;HAVING子句设定GROUP BY子句形成分组的条件。
字符函数
- 拼接字符串:
||(Oracle),+(SQL Sever),CONCAT(MySQL) TRANSLATE对应替换(类似于tr命令)REPLACE替换UPPER,LOWERSUBSTR,SUBSTRING字符串子串INSTR查找,返回位置LTRIM,RTRIM在一侧切除字符串DECODE在字符串中搜索字符串,如果找到了就显示另一个字符串IFNULL如果是NULL就用替代值COALESCE依次检查,返回第一个非NULL值LPAD,RPAD在一侧填充ASCIIASCII值- 算术函数:
ABS,ROUND,SQRT,SIGN(符号函数),POWER,CEIL,FLOOR,EXP - 与数字转换(有的可以隐式转换):
TO_NUMBER,STR,TO_CHAR
日期和时间
不同的实现有所差别
MySQL:NOW, DATE_ADD, STR_TO_DATE
在查询里结合表
等值结合/内部结合:利用通用字段(一般是主键)结合两个表
SELECT TABLE1.COLUMN1, TABLE2.COLUMN2...
FROM TABLE1, TABLE2
WHERE TABLE1.COLUMN_NAME = TABLE2.COLUMN_NAME
将上面的=改为!=就是不等值结合、
外部结合的一般语法:
FROM TABLE1
{RIGHT | LEFT | FULL} [OUTER] JOIN TABLE2
ON TABLE1.COLUMN_NAME = TABLE2.COLUMN_NAME
使用子查询
子查询就是在另一个查询里执行的查询,用于进一步设置查询的条件。子查询不能使用ORDER BY。
关联子查询是依赖主查询里的信息的子查询,即子查询里能引用主查询里的表(类似于闭包)。
组合多个查询
组合查询:有两个或多个SELECT语句
组合操作符(位于两个SELECT语句之间):
UNION结合,不包含重复UNION ALL结合,包含重复INTERSECT返回前一个SELECT语句里与后一个SELECT语句里一样的记录EXCEPT返回前一个SELECT语句里有但后一个SELECT语句里没有的记录
ORDER BY可以用于组合查询,但只能用于对全部查询结果的排序;GROUP BY可以用于组合查询中每个SELECT语句,也可以用于全部查询结果;HAVING可以用于组合查询里每个SELECT语句。
SELECT COLUMN1
FROM TABLE1
WHERE
GROUP BY
HAVING
{UNION | UNION ALL | EXCEPT | INTERSECT}
SELECT COLUMN1
FROM TABLE1
WHERE
GROUP BY
HAVING
ORDER BY
高级SQL主题
【存储过程】
存储过程是一组相关联的SQL语句,通常被称为函数和子程序,利用存储过程可以实现过程化编程
MySQL创建存储过程:
CREATE PROCEDURE PROCEDURE_NAME
(ARGUMENT1 {IN | OUT | IN OUT} TYPE, ARGUMENT2 {IN | OUT | IN OUT} TYPE)
AS
BEGIN
PROCEDURE_BODY
END;
【触发器】
MySQL创建触发器:
CREATE TRIGGER TRIGGER_NAME
{BEFORE | AFTER}
{INSERT | UPDATE | DELETE}
ON TABLE_NAME
AS
SQL_STATEMENTS
MySQL里,FOR EACH ROW可以在每条影响的记录时均执行一次触发器:
CREATE TRIGGER TRIGGER_NAME
ON TABLE_NAME
FOR EACH ROW
SQL_STATEMENTS
删除触发器:
DROP TRIGGER TRIGGER_NAME