SQL等实际查询语言是基于关系代数的,然后加入了一些其他的语法。可以利用这个关系代数计算器帮助理解:RelaX - relational algebra calculator

一、原始运算(6种)

集合运算:
1.并集(υ):select A1 from R union A2 form S
2.补集(-):select A1 from r where A1 not in (select A2 from S)
3.笛卡尔积(×):select * from R , S
![图像 3_lim[256-low].png][1]

选择 (σ):select * from R where P
![图像 21_lim[256-low].png][2]

投影(π):select A1, A2, …, An from R
![图像 2_lim[256-low].png][3]

重命名 (ρ):重命名关系的属性或关系自身。

二、连接

student 表

id          name         class_name
1           张三          一年级
2           李四          二年级
3           王五          三年级
4           黄大          四年级

teacher 表

id          name          class_name
1           李老师         一年级
2           宋老师         二年级
3           王老师         三年级
4           刘老师         六年级

自然连接(⋈):R ⋈ S,相当于先做叉乘,再选择公共属性一样的关系实例。如果没有公共属性的话,那么结果就是叉乘。

SELECT * FROM student INNER JOIN teacher on student.class_name=teacher.class_name;
idnameclass_nameidnameclass_name
1张三一年级1李老师一年级
2李四二年级2宋老师二年级
3王五三年级3王老师三年级

半连接 (⋉)(⋊):R ⋉ S,半连接的结果只是在S中有在公共属性名字上相等的元组所有的R中的元组。

SELECT * FROM student LEFT JOIN teacher on student.class_name=teacher.class_name;
idnameclass_nameidnameclass_name
1张三一年级1李老师一年级
2李四二年级2宋老师二年级
3王五三年级3王老师三年级
4黄大四年级NULLNULLNULL

反连接(▷):R ▷ S,反连接的结果是在S中没有在公共属性名字上相等的元组的R中的那些元组。

SELECT * FROM student RIGHT JOIN teacher on student.class_name=teacher.class_name;
idnameclass_nameidnameclass_name
1张三一年级1李老师一年级
2李四二年级2宋老师二年级
3王五三年级3王老师三年级
NULLNULLNULL4刘老师六年级

除法(÷):R ÷ S,其结果由R中元组到唯一于R的属性名字(就是说只在R表头中而不在S表头中的属性)的限制构成,并且它们与S中的元组的所有组合都存在于R中。
![图像 5_lim[256-low].png][5]

三、外连接

外连接是将左侧关系中与右侧公共属性不等的元组值补填到结果元组集的左侧部分,结果元组集的右侧部分则为填null。
外连接也有三种:

  • 左外连接 (⟕):select * from R left outer join S on <连接条件>
  • 右外连接 (⟖):select * from R right outer join S on <连接条件>
  • 全外连接 (⟗):select * from R full outer join S on <连接条件>

左右外连接是对称的,只是结果的属性顺序不同。全外连接是左右外连接的组合。

四、聚集函数

多数数据库包括五个聚集函数:Sum、Count、Average、Maximum和Minimum。
select <函数名>(column_name) from table_name;

注意:
sqlite中是不支持右外连接和完全外链接。