首页 > 数据库 >数据库系统概论读书随笔(45-84)

数据库系统概论读书随笔(45-84)

时间:2023-02-22 13:33:06浏览次数:45  
标签:salary 45 dept 84 table 数据库系统 avg where select

char(n)会在字符串后追加空格,补齐位数;而varchar(n)则不会追加空格。且char(n)类型比较时,如果位数不同,会在短值后附加额外的空格使其长度一致。

select、from、where,首先是from,获得所列出关系的笛卡尔积,然后是where用谓词过滤元组,最后是select挑选出合适的列。将第一步和第二步同时进行便是实际执行过程中的SQL优化。

在SQL标准中,相等运算是大小写敏感的,但在mysql和sql server中实际上并不区分大小写。

SQL中的trim()可以去除全角和半角空格。

select * from table where description like "%wxl_"
select * from table where desp like "ab\%cd%" escape '\'
%: 匹配任意子串
_: 匹配任意字符
escape

SQL不存在显式的转义字符,需要使用escape关键字定义。

表名.* 可以选中特定表的所有属性。

DESC:降序排序,ASC:升序排序(默认)

并(union),交(intersect),差(except),并交差运算后加上all,可以保留重复项,默认删除所有重复元组。

table.A+5,如果table.A为null,则该表达式的值也为null;涉及空值的任何比较运算的结果视为unknown。因此sql中的布尔逻辑值有三种,true、false和unknown。unknown和任何逻辑值的逻辑运算都为unknown。

分组聚集中,如果出现混淆的属性,比如一个系的学生成绩平均值,却需要提供ID属性,那么就会引发错误查询。

select stu_id, dept, avg(score) from table group by dept;

where是元组的谓词,而having是分组的谓词。where不能使用聚集函数,而having可以结合聚集函数一起使用,但前提是必须提前进行分组。执行顺序:from->where->group by->having->select。

聚集函数除了count(*)之外,会自动忽略掉值为null的元组。

嵌套子查询中:

  1. in和exists测试集合成员资格;
  2. 比较符则可以额外附加some来比较其中的某一成员;
  3. unique只取出子查询结果中不重复的元组;
  4. from关键词后也可以进行子查询;
  5. with嵌套sql可以像存储变量一样存储表关系,示例如下
select * from table1 where id in (select id from table2 where dept = "xxx")
select name from table where salary > some(select * from xxx where xxx)
# 找出系平均工资总额大于所有人平均工资总额的系
select dept from (select dept, avg(salary) as avg from table group by dept) 
where avg > (select avg(salary) from table)

with dept_avg(dept, value) as (select dept, avg(salary) as avg from table group by dept), 
total_dept_avg(value) as (select avg(salary) from table)
select dept from dept_avg, total_dept_avg where dept_avg.value > total_dept_avg.value;

insert在插入时,如果不需要修改插入的顺序,可以不写values的部分。

增删改的子查询测试出来的关系不会变化,因为子查询执行完后,就不会再执行了,想想子查询的执行过程。增删改对于关系的变化不会应用在子查询中。

case关键字同步更新,解决工资加薪问题,实例如下。

update teacher set salary = case
	when salary < 10000 then salary * 1.05
	when salary between 10000 and 13000 then salary * 1.03
	else salary * 1.01
end

标签:salary,45,dept,84,table,数据库系统,avg,where,select
From: https://www.cnblogs.com/LimeCoder/p/17144033.html

相关文章