关系数据库标准语言SQL之空值的处理和视图

关系数据库标准语言SQL之空值的处理和视图

考研党持续复习中,只能利用晚上时间更新,不多排版,希望大家都上岸

3.6空值的处理

3.6.1空值的产生

例如
Update Student
Set Sdept=NULL
Where Sno=‘201202152’;

3.6.2空值的判断

//用IS NULL或IS NOT NULL判断属性值是否为空值
例如:从Student表中找出漏填的数据
Select *
From Student
Where Sname IS NULL or Ssex IS NULL or Sage IS NULL or Sdept IS NULL;

3.6.3 空值的约束条件

//属性定义中有 NOT NULL 约束条件的不能取空值;
加了UNIQUE限制的属性不能取空值;
码属性不能取空值

3.6.4 空值的算术运算符比较运算和逻辑运算

注意
*T表示true,F表示false,U表示unknown
*在查询语句中,只有是where和having子句中的选择条件为true时才能输出
例如:选出选修1号课程的不及格学生以及缺考的学生
Select Sno
From Student
Where Cno=‘1’and Grade <60
Union
Select Sno
From SC
Where Grade IS NULL and Cno=‘1’;
//union此时表示并操作

3.7视图

3.7.1定义视图:从一个或几个基本表导出的表,是一个虚表。

(1)建立视图
Create view <视图名>[(<列名>)…]
As <子查询>
[with check option];
例如:建立信息系的学生视图,并要求进行修改和插入操作时仍需保证该视图只有信息系的学生
Create view IS_Student
As
Select Sno,Sname,Sage from Student where Sdept=‘IS’
With check option;
//由于在定义视图的时候加上了with check option子句,以后对该视图进行插入修改和删除操作的时候,关系数据库管理系统会自动加上Sdept=‘IS’的条件
例如:建立信息系选修了1号课程的学生视图(包括学号,姓名,成绩)
Create view IS_S1(Sno,Sname,Grade)
As
Select Student.Sno,Sname,Grade From Student,SC
Where Sdept=’IS’ and Student.Sno=SC.Sno and SC.Cno=’1’;
例如:建立信息系选修了1号课程且成绩在90分以上的学生视图
Create view IS_S2
As
Select Sno,Sname,Grade from IS_S1 where Grade>90;
//这里的S2建立在S1上,属于级联
例如:定义一个反映学生出生年份的视图
Create view B_S(Sno,Sname,Sbirth)
As
Select Sno,Sname,2014-Sage from Student;
例如:将学生的学号及平均成绩定义为一个视图
Create view B_S(Sno,Gradeavg)
As
Select Sno,AVG(Grade) from SC Group by Sno;

(2)删除视图
Drop view <视图名>[cascade];
//cascade级联:删除视图后如果该视图上还导出了其他视图,则使用cascade级联删除语句把该视图和由它导出的所有视图一起删除
例如
Drop view IS_Student cascade;

3.7.2查询视图

例如:在信息系学生的视图找出年龄小于20岁的学生
Select Sno,Sage
From IS_Student
Where Sage<20;
//此处需注意:在查询视图时,首先会进行有效性检查,然后转换为等价的对基本表的查询后行查询,这就是视图消解
本例转换后的查询语句为:
Select Sno,Sage
From IS_Student
Where Sdept=‘IS’and Sage<20;
例如
Select Sno,avg(Grade)
From SC
Where avg(Grade>0)
Group by Sno;
//此处需注意:where子句是不能用聚集函数作为条件表达式的,因此执行修正后的查询将会出现语法错误
本例转换后的查询语句为:
Select Sno,avg(Grade)
From SC
Group by Sno
Having avg(Grade>0);
//视图与派生表的区别:视图一旦定义,其定义将永远保存在数据字典中且可引用;派生表只是在语句执行时临时定义,语句执行后该定义被删除

3.7.3更新视图

例如:将信息系的学生视图IS_Student中学号为‘111111’的学生姓名改为“XX”
Update IS_Student
Set Sname=‘XX’
Where Sno=‘111111’;
更新后的语句:
Update Student
Set Sname=‘XX’
Where Sno=‘111111’ and Sdept=‘IS’;
例如:向信息系学生视图IS_Student中插入一个学生记录,其中……
Insert
Into IS_Student
Value(‘111’,‘张三’,‘19’,);
更新后的语句
Insert
Into Student
Value(‘111’,‘张三’,‘19’,‘IS’);

//视图中规定:
*若表是由两个以上基本不导出,则不允许更新
*视图的字段来自聚集函数,则不允许更新
*视图定义中有group by子句,distinct短语,嵌套查询,则不允许更新
*不可更新的视图与不允许更新的视图是两个不同的概念

3.7.4视图的作用

1.视图能够简化用户的操作
2.视图用户能以多种角度看待统一数据
3.视图对重构数据库提供了一定程度的逻辑独立性
4.视图能够对机密数据提供安全保护
5.适当利用视图可以更清晰的表达

发布了11 篇原创文章 · 获赞 3 · 访问量 322

猜你喜欢

转载自blog.csdn.net/weixin_44367041/article/details/103690780