(5)null空值
关系数据库在满足完整性约束的情况下,支持某个tuple的某个属性为null空值,它有一下特性:
算术运算作用于null得到null 聚合函数忽略聚合属性是null的元组 where子句中用is null断言某个属性是null 涉及null的比较,返回一个unknown unknown可以参与逻辑运算,返回值和其逻辑含义保持一致,如unknown and true = true,而unknown and false = unknown 对于unknown的条件P,DBMS认为它是false的 特别注意,count(*)不会忽略unknown的元组 (6)嵌入式子查询
嵌入式子查询是把select语句筛选出的结果当作中间结果,并在此基础上进一步查询的SQL语句
where attr in (subquery)是最常见的用法,比如在dept表中找出是工科院系的系编号d#,在此基础上再来统计个系人数,有以下SQL语句:
select d#, count(student_id) from student where student_id like 'PB12%' and d# in (select d# from dept where type = 'engineering') group by d#;
some和all限定符可以在where从句中配合关系运算符进行筛选,下面是书上最经典的例子:
找出比某些(some)经理工资还高的员工:
select ename from emp where salary > some (select salary from emp where e# in (select mgr from dept));
找出比所有(all)经理工资还高的员工:
select ename from emp where salary > all (select salary from emp where e# in (select mgr from dept));
除此之外,where从句中还可以用exists和unique做存在性和唯一性测试,例子略,配合not还可表示不存在(not exists)以及不唯一/至少两个(not unique)
注:很多DBMS也支持嵌入式子查询出现在select从句中以及from从句中
4.3 修改操作
(1)delete
删除满足条件的元组:
delete from where P;
修改操作的花样不如查询的多,但很多高级查询语法也可以用在修改操作中,如嵌套select的in、比较运用于where子句中等
删除语句会导致数据完整性受到破坏,如删除了jcguo这个学生之后,课程成绩表中照样有jcguo的成绩,这些问题将在完整性约束中阐述
(2)insert
插入一个元组:
insert into values (completed attr list of tuple);
or
insert into (some attrs) values (matched partial attr list of tuple);
insert的值也可以来自于潜逃select子查询语句:
insert into (some attrs) (select ...);
(3)update
更新操作基本SQL语法为:
update set {attr = new attr value}+ where P;
4.4 嵌入式SQL
很多高级语言都支持SQL,多用游标+execute SQL command的接口提供给程序员(见PLSQL一章)
4.5 SQL中的函数
最后,这里简要的复习一下SQL里内置的扩展函数
需要说明的是这些函数基本上都很少用到,因为这些操作大多都交给SQL嵌入的外部高级语言去完成了,这里就列一个表,以供复习查看
(1)字符函数
函数名
函数说明
lower(attr|string value)
把属性attr或字符串字面值value转换为小写
upper(attr|string value)
把属性attr或字符串字面值value转换为大写
initcap(attr|string value)
把属性attr或字符串字面值value的首字母大写(按句处理)
concat(v1,v2)
连接两个属性attr或字符串字面值value
lpad(col|value,n,c)
左补齐v到n个字符,若c不为空则用c填充否则用空格填充
rpad(col|value,n,c)
右补齐v到n个字符,若c不为空则用c填充否则用空格填充
substr(col|value,pos,n)
截取子串,从pos其截取n位
instr(col|value,c,pos,n)
查找字符出现位置,pos是起始查找位,查找第n个出现的字符c
length(col|value)
求字符串长度
(2)数值函数
略
(3)日期函数
略
(4)转换函数
略
注:这一小节感觉不是很有用,就不总结了
数据库复习2――SQL基础(二)
PB12%' group by d# having count(student_id) > 100;
| 评论 |
|
|