数据库基础day02

~~我来了~~

1、自然连接
自然连接是找多个关系中共同部分,并建立属性的并集到新关系中。

select 属性1,属性2
from 表1 natural join 表2 natural join 表3…;

高级形式:
select 属性1,属性2
from (表1 natural join 表2) join 表3 using (属性1,属性2);
#与自然连接类似,寻找join前后表的共同属性1和属性2

2、更名运算

old-name as new-name

#as子句既可出现在select子句中,也可出现在from子句中。
#as可以适用于重命名关系,可以比较同一个关系中的元组的情况,此时需要把一个关系跟它自身进行笛卡尔积运算。
#用来重命名关系的标识符被乘坐“表别名”。

3、字符串运算
#用一对单引号来表示字符串,字符串大小写敏感。然而在MySQL和SQL Server中匹配字符串时不区分大小写。

用两个特殊字符描述模式:
%:匹配任意子串
_:匹配任意一个字符

例如 ‘Intro%’ 匹配任何以“Intro”开头的字符串
%Comp% 匹配任何包含Comp子串的字符串。
_ _ _匹配只含有3个字符的字符串
_ _ _%匹配至少含有3个字符的字符串

使用like来表达模式:
select dept_name
from department
where building like ’ %Waston%’;

转义字符的使用:
使用escape来定义转义字符:
like ‘ab%cd%’ escape’’
#上式将匹配所有以ab%cd开头的字符串,其中\是转义字符。

4、select子句 * 属性
*星号可以用在select子句中表示“所有的属性”
select instructor .*
表示instructor中的所有属性都被选中。

5、排列元组的显示次序
order by子句可以让查询结果中元组按排列顺序显示。默认是升序。

使用desc表示降序,asc表示升序。
可以同时对多个属性排序,例如:
select *
from instructor
order by salary desc, name asc;
#首先对工资降序排列,工资相同时对姓名升序排列。

6、where子句谓词
between 比较运算符

where salary between 9000 and 10000
#找出工资在9000到10000的。

此外还有not between 运算符。

可以对n维元组运用比较运算符,例如
(a1,a2) <= (b1,b2) #在a1<=b1且a2<=b2时为真。

集合运算

1、并运算 union

查询1
union
查询2

#union运算自动去除重复。
#要想保留所有重复,用union all 替代union

2、交运算 intersect

查询1
intersect
查询2

#intersect运算自动去除重复。
#要想保留所有重复,用intersect all 替代intersect

3、差运算 except

查询1
except
查询2

#从查询1中输出所有不出现在查询2中的结果。即查询1-(查询1交查询2),输出的是查询1剩下的结果

#except运算自动去除重复。
#要想保留所有重复,用except all 替代except

7、空值
#若一算术表达式的输入为空,则结果为空。
#使用“unknown”作为介于true 和 false 中的第三个逻辑值。

and:true和unknown返回unknown,false和unknown返回false
or:true和unknown返回true,false和unknown返回unknown
not:not unknown 返回 unknown

#如果where子句中对一个元组计算出false或者unknown,则该元组不能加入到结果集中。

#在谓词中使用 null 测试空值。
where salary is null;
where salary is not null;

#在谓词中 null=null 会返回unknown而不是true

#如果元组在所有属性上取值相等,那么被当做相同元祖,即使某些值为空。

聚集函数
avg、min、max、sum、count。
sum和avg应用于数字集,其他三个可以用在非数字集,比如字符串。

1、基本聚集
select avg(salary) as avg_salary
#取平均工资,取名为avg_salary
#在计算平均值是,保留重复元组是很重要的。

经常使用count计算一个关系中元组的个数,该函数写法是count()
select count(
)
from course;
#不允许在count(*)时使用distinct。

2、分组聚集
group by子句。所有属性上取值相同的元组将被分在一个组中。

select dept_name , avg(salary) as avg_salary
from instructor
group by dept_name;
#会把dept_name相同的首先聚集起来。

3、having子句
用来对 分组 限定条件。
having子句中的谓词在形成分组后才起作用。

select dept_name , avg(salary) as avg_salary
from instructor
group by dept_name
having avg(salary) >42000;
#平均工资超过42000的分组才会显示出来。

4、对空值和布尔值的聚集
聚集函数,对除了count(*)外所有的聚集函数都忽略输入集合中的空值。
规定空集的count运算之为0。

##未完待续。。。

猜你喜欢

转载自blog.csdn.net/weixin_43782979/article/details/86605030
今日推荐