《SQL入门经典》学习笔记

本文首发在我的个人博客:https://jlice.top/p/7q0if/。欢迎大家前去参观,么么哒~

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

https://jlice-top.oss-cn-beijing.aliyuncs.com/4621907a002211e994a5509a4c21c90b.jpg

操作符

  • =相等
  • <>, != 不等
  • >, <, >=, <=
  • 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
  • 16
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值