引入记号
• 关系模式R (A1,A2,…,An),t∈R表示R的一个
元组t。t[Ai]表示属性元组t 中相应于属性Ai的分量
• 若A={Ai1,Ai2,…,Aik},其中Ai1,Ai2, …,Aik是A1
,A2,…,An的一部分A称作属性列或域列。
• 元组的连接
• 给定关系R(X,Z), 定义当t[X]=x时,x在R中的象集
为 表示R中属性组X上值
为x的诸元组在Z上分量的集合。
, ,
r s r s
t R t S t t
{ [ ] , [ ] }
x
Z t Z t R t X x
[例5.*] 使用列别名改变查询结果的列标题
SELECT SnameNAME,'Year of Birth: ’ BIRTH,
2000-Sage BIRTHDAY,ISLOWER(Sdept) DEPARTMENT
FROM Student;
输出结果:
NAME BIRTH BIRTHDAY DEPARTMENT
------- ---------------- ------------- ------------------
李勇 Year of Birth: 1976 cs
刘晨 Year of Birth: 1977 is
王名 Year of Birth: 1978 ma
张立 Year of Birth: 1977 is
2.查询满足条件的元组
表 3.3 常用的查询条件
查询 条 件 谓 词
比 较
=,>,<,>=,<=,!=,<>,!>,!<;
NOT + 上述比较运算符
确定范围 BETWEEN AND,NOT BETWEEN AND
确定集合 IN,NOT IN
字符匹配 LIKE,NOT LIKE
空 值 IS NULL,IS NOT NULL
多重条件 AND,OR
WHERE子句常用的查询条件
208.
(1) 比较大小
在WHERE子句的<比较条件>中使用比较运算符
– =,>,<,>=,<=,!=或 <>,!>,!<,
– 逻辑运算符NOT + 比较运算符
[例8] 查询所有年龄在20岁以下的学生姓名及其年龄。
SELECT Sname,Sage
FROM Student
WHERE Sage < 20; 或
SELECT Sname,Sage
FROM Student
WHERE NOT Sage >= 20;
(2) 确定范围
• 使用谓词BETWEEN … (下限) AND …(上限)
NOT BETWEEN … AND …
[例10] 查询年龄在20~23岁(包括20岁和23岁)之间的
学生的姓名、系别和年龄。
SELECT Sname,Sdept,Sage
FROM Student
WHERE Sage BETWEEN 20 AND 23;
(3) 确定集合
使用谓词 IN<值表>, NOT IN <值表>
<值表>:用逗号分隔的一组取值
[例12]查询信息系(IS)、数学系(MA)和计
算机科学系(CS)学生的姓名和性别。
SELECT Sname,Ssex
FROM Student
WHERE Sdept IN ( 'IS','MA','CS' );
一、多值依赖
• 在R(U)的任一关系r中,如果存在元组t,s 使得
t[X]=s[X],那么就必然存在元组w,v r,(w,v可以
与s,t相同),使得w[X]=v[X]=t[X],而w[Y]=t[Y],
w[Z]=s[Z],v[Y]=s[Y],v[Z]=t[Z](即交换s,t元组的Y值
所得的两个新元组必在r中),则Y多值依赖于X,记为
X→→Y。 这里,X,Y是U的子集,Z=U-X-Y。
t x y1 z2
s x y2 z1
w x y1 z1
v x y2 z2
• Define XF
+= closure of X
= set of attributes functionally determined byX
• Basis: XF
+ :=X
• Induction: If Y XF
+, and Y A is a given FD,
then add A to XF
+
• End when XF
+ cannot be changed.
Algorithm
y
X+ New X+
A
334.
U={A, B, C,D}; F={A B, BC D};
• A+ = AB.
• C+ = C.
• (AC)+ = ABCD.
Example
A
C
B
模式的分解(续)
2. SL分解为下面二个关系模式:
NL(Sno, Sloc)
DL(Sdept,Sloc)
分解后的关系为:
NL ──────────── DL ────────────
Sno Sloc Sdept Sloc
──────────── ────────────
95001 A CS A
95002 B IS B
95003 C MA C
95004 B PH B
95005 B ────────────
──────────
模式的分解(续)
ND ──────────── NL──────────
Sno Sdept Sno Sloc
──────────── ──────────
95001 CS 95001 A
95002 IS 95002 B
95003 MA 95003 C
95004 IS 95004 B
95005 PH 95005 B
──────────── ───────────
SQL Server中与封锁有关的命
令
…
DECLARE @ddatetime, @t char(6), @s char(2), @n char(10)
…
BEGIN TRANSACTION
SELECT @n=座位号 FROM R WITH (UPDLOCK)
WHERE 日期 = @d AND 车次 = @t AND 座别 = @s AND 状态 IS
NULL
…
IF …
UPDATE R SET 状态 = "Y"
WHERE 座位号 = @n AND 日期 = @d AND 车次 = @t AND 座别 =
@s
COMMIT TRANSACTION
ELSE
ROLLBACK TRANSACTION
授予对象权限
GRANT { ALL[ PRIVILEGES ] | permission_list }
{[ ( column_list ) ] ON { table | view } |
ON { table | view } [ ( column_list ) ]
| ON stored_procedure | ON
user_defined_function }
TO name_list
[ WITH GRANT OPTION ]
[ AS { group | role } ]
用户定义的安全性措施
CREATE TRIGGER secure_wh
ON仓库
FOR INSERT,DELETE,UPDATE
AS
IF DATENAME(weekday, getdate())='星期六'
OR DATENAME(weekday, getdate())='星期日'
OR (convert(INT,DATENAME(hour, getdate())) NOT
BETWEEN 9 AND 17)
BEGIN
RAISERROR ('只许在工作时间操作!', 16, 1)
ROLLBACK TRANSACTION
END