升级了。
来见见中级段位的SQL查询:
视图定义、事务、完整性约束、关于SQL数据定义的更多细节、授权
view definition, transactions, integrity constraints, more details regarding SQL data definition, and authorization.
(英文精编·6版·第四章)
1.Join Expressions
1.1Join….on 可以表达更丰富的语义
- 查询语句简短
- 和where语句结合,使得查询语句可读性好
Select *
From student join takes on student.ID=takes.ID
与下面的查询相同
Select *
From student ,takes
Where student.ID=takes.ID
1.2Outer Joins
在之前写的DMBS第三篇中提及这个外连接:
先来回顾一下natural join的执行结果特点:
- 假设 r1 naturla join r2
如果r1中有tuple不与r2匹配,那么这个tuple就会被drop - 自然连接又叫做内连接(Inner Join)
而外连接,就会保留不匹配的tuple(s)
- 左外连接,保留左边表的nonmatched元组
- 右外连接保留右边。
- 全外连接,全保留。
SQL语句如下:
-- 左外连接
course left outer join prereq on
course.course_id = prereq.course_id
-- 右外连接
course natural right outer join prereq
-- 全外连接
course full outer join prereq using (course_id)
小结:
1.join时,若不用前缀outer join时候,默认都是inner join
2.natural inner join is equivalent to natural join
2.Views
In our examples up to this point,
都是逻辑模型级别上操作
What & Why
- 视图—— 隐藏信息
- 视图提供了一种机制,可以向某些用户的视图隐藏某些数据
- 视图是一种虚表,在数据库中并不实际存在,
- 数据库中只存在视图的定义,
执行视图定义时才从基本表中获得数据。
在某些情况下,不希望所有用户都看到整个逻辑模型——安全考虑
创建一个个性化的关系集合——用户体验
View Definition
- 使用
create view..as..< query expression >
必须要使用视图名,和查询表达式 - 视图关系在概念上包含查询结果中的元组,
但不是预先计算和存储的 - 像一组查询表达式的别名,而不是一个实际的表
访问视图关系,则它的元组都是即时计算查询结果创建的
Example
1.一个不显示薪水的讲师的视图
create view faculty as
select ID, name, dept_name
from instructor;
Faculty是一个虚拟关系
一个View的高级用法:
- 在视图的基础上建立视图
CREATE VIEW physics_fall_2009 AS
SELECT course.course_id, sec_id, building, room_number
FROM course, section
WHERE course