《SQL入门经典》学习笔记

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

SQL入门经典

操作符

  • =相等
  • <>, != 不等
  • >, <, >=, <=
  • IS NULL, IS NOT NULL
  • BETWEEN 介于(包含端点) NOT BETWEEN
  • IN 值在列表中, NOT IN
  • LIKE 通配符匹配:%(>0个字符), _(1个字符), NOT LIKE
  • EXISTS, NOT EXISTS
  • UNIQUE, NOT UNIQUE
  • ALL, ANY, SOMEANY的别名)
  • 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, LOWER
  • SUBSTR, SUBSTRING 字符串子串
  • INSTR 查找,返回位置
  • LTRIM, RTRIM 在一侧切除字符串
  • DECODE 在字符串中搜索字符串,如果找到了就显示另一个字符串
  • IFNULL 如果是NULL就用替代值 COALESCE 依次检查,返回第一个非NULL值
  • LPAD, RPAD 在一侧填充
  • ASCII ASCII值
  • 算术函数: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

SQL

上一篇 【实验楼】Redis基础教程——学习笔记
下一篇 使用ipv6 hosts

添加新评论

*
*