关系代数
关系代数是一种对数据集的抽象,定义了一个或多个的集合以及针对这些集合的一套运算规则。是sql语言的理论基础。其发明本身为解决运算问题。
集合运算
运算符 | 含义 | 英文 |
---|---|---|
∪ | 并 | Union |
− | 差 | Difference |
∩ | 交 | Intersection |
× | 笛卡尔积 | Cartesian Product |
比较运算
>大于 ≥大于 =等于 <小于 ≤小于 ≠不等于
关系运算符
运算符 | 含义 | 英文 |
---|---|---|
σ | 选择 | Selection |
π | 投影 | Projection |
⋈ | 链接 | Join |
÷ | 除 | Division |
关系代数运算
- 并 full join
- 差
- 广义笛卡尔积
- 投影(筛选列并去重)
- 选择
外连接
left/right join
SELECT * FROM tb left join ta on ta.a=tb.x;
full join
SELECT * FROM tb full join ta on ta.a=tb.x;
full join:Oracle 支持,Mysql 不支持但可以通过过左外连接 + union + 右外连接来间接实现(注意是union不是union all)
inner join
取交集,等同于left join 去掉右表为空的,或 right join 去掉左表为空的
SELECT * FROM tb inner join ta on ta.a=tb.x;
cross join
笛卡尔积(在不加条件的情况下)
SELECT * FROM tb cross join ta;
- 相等关系
FROM tb,ta
==cross join
= 笛卡尔积FROM tb,ta where 条件
==cross join on 条件
==inner join
full join
==left join union right join
from left join on 和 from where 条件的区别
- left join on
- 条件是用来生成临时表的。以左表为主表(结果可能会重复)根据 on 条件去找作为从表的右表里符合条件的值合在一起。
- 如果右表出现 on 条件中的字段值重复会出现,左表的列为了对应右表重复的值,而出现多条拷贝来对应右表中条件相同的记录。这个时候可以通过在 on 条件中用 and 来增加筛选条件。
- where
- 条件是在生成临时表(笛卡尔积)之后,再对临时表进行约束。
- cross join
- 等同于 where
SQL语言执行顺序
1 from
2 join
3 on
4 where(约束声明。不能使用列别名,Mysql 会报:1054 - Unknown column)
5 group by(可以开始使用列别名)
6 avg/ sum/ count/ max/ min/
7 having(过滤声明。having的原理是先select 然后从select出来的进行筛选。而where是先筛选在select。)
8 select(特指 select 层的操作,如 select if(battery >= 50, 1, 0) 是先得到结果再进行 if 判断)
9 distinct
10 order by
11 limit
SQL语言的分类
SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL。