关系代数与SQL
关系代数与SQL
关系代数
LeetCode Practice
关系代数是一种过程话查询语言,它包含一个运算的集合,这些运算以一个后两个关系为输入,产生一个新的关系作为结果,关系代数的基本运算有:选择,投影,并,集合差,笛卡尔积,更名,集合交,自然连接,赋值
选择运算(select)- 运算选出给定的谓词的元组,小写希腊字母sigma(σ)来表示选择
谓词比较 ¬,∨,∧,=,
关系代数中的 select 对应 SQl 语言中的 where
投影运算(Projection)- 它返回作为参数的关系,但把某些属性排除在外。由大写希腊字母pi(Π)表示
并运算(union)- 两个关系的并集
集合差运算(set-difference)- 两个关系的差集
笛卡尔积运算(Cartesian-product)- 运算使得我们可以将任意两个关系的信息结合在一起
更名运算(rename)-表达式 Px(E)
集合交运算(intersection)
自然连接(⋈)- (R ⋈ S)的二元运算,这里的R和S是关系。自然连接的结果是在R和S中的在它们的公共属性名字上相等的所有元组的组合
θ-连接和相等连接
半连接 (⋉)(⋊) - 半连接的结果只是在S中有在公共属性名字上相等的元组所有的R中的元组
外连接 - 尽管连接(或内连接)的结果是由组合两个操作数的匹配元组而形成的元组组成,外连接由这些元组加上通过向一个操作数的未匹配元组扩展上另一个操作数的每个属性的“填充”值而形成的元组组成。
左外连接 (⟕) - 外连接写成R ⟕ S,其中R与S为关系。[4]左外连接的结果包含R中所有元组,对每个元组,若在S中有在公共属性名字上相等的元组,则正常连接,若在S中没有在公共属性名字上相等的元组,则依旧保留此元组,并将对应其他列设为NULL。
右外连接 (⟖) - 右外连接写成R ⟖ S,其中R与S为关系。[5]右外连接的结果包含S中所有元组,对每个元组,若在R中有在公共属性名字上相等的元组,则正常连接,若在R中没有在公共属性名字上相等的元组,则依旧保留此元组,并将对应其他列设为NULL。
聚集运算 - 多数数据库包括五个聚集函数。这些运算是Sum、Count、Average、Maximum和Minimum。在关系代数中被写为Exp1,Exp2,Exp3...Gfunc1,func2,func3...(关系)。必须指定要用的函数,而表达式是可选的。假定有一个叫Account的表有两列,分别是Branch_Name和Balance,并希望找到有最高结余的分部的名字,我们可以写Branch_NameGMax(Balance)(Account)。要找到最高余额我们可以简单的写GMax(Balance)(Account)。
2. LeetCode Practice
Big Countries
select name, population, area from world where population > 25000000 or area > 3000000;
Swap Salary
UPDATE salary SET sex = IF(sex='m','f','m');
Not Boring Movies
select * from cinema where description != 'boring' and MOD(id, 2) != 0 order by rating desc;+
select * from cinema where description != 'boring' and id % 2 != 0 order by rating desc;
Classes More Than 5 Students
select class from courses group by class having count(distinct student) >= 5;