嗨,我又来啦。
多夸夸我好吗?我会很——开心的噢~♪
新的一天,从一场美妙的邂逅开始。
让我们先从关系代数开始吧♪
一、关系代数的运算
关系代数分为两类:集合运算符,专门的关系运算符。
并(∪)、交(∩)、差(-)、笛卡尔积(×)
选择(σ)、投影(π)、自然连接(⨝)、除(÷)
别急嘛♪让我们一个一个来♪
首先,先确定两个集合
A | B | C |
---|---|---|
a1 | b1 | c1 |
a1 | b2 | c2 |
a2 | b2 | c1 |
表1
A | B | C |
---|---|---|
a1 | b2 | c2 |
a1 | b3 | c2 |
a2 | b2 | c1 |
表2
这里的集合运算符就是做集合运算的,让我们先来把上面表格抽象成集合吧♪
1.集合运算符:
(1)并 (∪)
图1.1
图1.2
A | B | C |
---|---|---|
a1 | b1 | c1 |
a1 | b2 | c2 |
a2 | b2 | c1 |
a1 | b3 | c2 |
表3
(2)交(∩)
图1.3
图1.4
A | B | C |
---|---|---|
a1 | b2 | c2 |
a2 | b2 | c1 |
表4
(3)差(-)
图1.5
图1.6
A | B | C |
---|---|---|
a1 | b1 | c1 |
表5
(4)笛卡尔积(×)
啊拉~,笛卡尔积的文氏图咱可不会画哦~♪
不会吧?你不会真的在期待爱莉绘出这个笛卡尔积的文氏图吧♪
好了,不逗你了,我们接着讲吧♪
接下来的表6可能会有一点点大哦♪
但是爱莉会好好进行解释的~♪
R.A | R.B | R.C | S.A | S.B | S.C |
---|---|---|---|---|---|
a1 | b1 | c1 | a1 | b2 | c2 |
a1 | b1 | c1 | a1 | b3 | c2 |
a1 | b1 | c1 | a2 | b2 | c1 |
a1 | b2 | c2 | a1 | b2 | c2 |
a1 | b2 | c2 | a1 | b3 | c2 |
a1 | b2 | c2 | a2 | b2 | c1 |
a2 | b2 | c1 | a1 | b2 | c2 |
a2 | b2 | c1 | a1 | b3 | c2 |
a2 | b2 | c1 | a2 | b2 | c1 |
表6
是不看花眼了♪别急嘛~
让我们来简化一下上面抽象过了的集合吧♪
然后再用这个简化过的集合再进行笛卡尔积试试吧♪
怎么样?是不是很好懂了呢♪
什么?还是不太明白。
好吧,那我再细讲一下哦♪可要认真看哦。
图1.7
R×S 时,R上的元素分别乘上S上的元素。
然后将乘上的元素并入集合中,就是上面的R×S集合了。
这下能看懂了吗♪
2.专门的关系运算符:
(1)选择(σ)
唔~这样好像不太好描述呢♪那我们先来举个例子吧♪相信聪明的你看了这个例子就能学会了呢♪
我们再来个表7吧♪
name | sex | age | department |
---|---|---|---|
Kiana Kaslana | female | 16 | St. Freya's Lyceum |
Raiden Mei | female | 17 | St. Freya's Lyceum |
Natasha Cioara | female | 21 | World Snake |
表7
就把这个表9叫character表吧♪
例:
让我猜猜,那么聪明的你肯定知道这是什么意思了吧♪
没错♪这就是在character表中选择department是St. Freya's Lyceum的元组。
选择后的结果就是接下来的这个表8了♪
name | sex | age | department |
---|---|---|---|
Kiana Kaslana | female | 16 | St. Freya's Lyceum |
Raiden Mei | female | 17 | St. Freya's Lyceum |
表8
(2)投影(π)
而这个投影就更简单啦,当然还是要借用一下表9啦♪
例:
唔~我想已经不用再考你了吧♪投影就是把那一列选出来,单独成表哦♪
表9
(3)自然连接(⨝)
这里,我们也要再先给定两个表哦♪
A | B | C |
---|---|---|
a1 | b1 | 5 |
a1 | b2 | 6 |
a2 | b3 | 8 |
a2 | b4 | 12 |
表10
B | E |
---|---|
b1 | 3 |
b2 | 7 |
b3 | 10 |
b3 | 2 |
b5 | 2 |
表11
这里用的表是表10和表11哦,不要搞混了♪
先来讲一下概念吧♪
自然连接是一种特殊的等值连接,两个关系进行比较的分量必须是同名的属性组,并且在结果中把重复的属性列去掉♪红色的字一定要注意了哦♪
A | R.B | C | S.B | E |
---|---|---|---|---|
a1 | b1 | 5 | b2 | 7 |
a1 | b1 | 5 | b3 | 10 |
a1 | b2 | 6 | b2 | 7 |
a1 | b2 | 6 | b3 | 10 |
a2 | b3 | 8 | b3 | 10 |
表12
A | R.B | C | S.B | E |
---|---|---|---|---|
a1 | b1 | 5 | b1 | 3 |
a1 | b2 | 6 | b2 | 7 |
a2 | b3 | 8 | b3 | 10 |
a2 | b3 | 8 | b3 | 2 |
表13
A | B | C | E |
---|---|---|---|
a1 | b1 | 5 | 3 |
a1 | b2 | 6 | 7 |
a2 | b3 | 8 | 10 |
a2 | b3 | 8 | 2 |
表13
(4)除(÷)
哎呀♪是不是看了这么多的表,已经眼花缭乱了呢♪
接下来是一个很解压的运算符哦,当然还是要给两个表格啦♪
A | B | C |
---|---|---|
a1 | b1 | c2 |
a2 | b3 | c7 |
a3 | b4 | c6 |
a1 | b2 | c3 |
a4 | b6 | c6 |
a2 | b2 | c3 |
a1 | b2 | c1 |
表14
B | C | D |
---|---|---|
b1 | c2 | d1 |
b2 | c1 | d1 |
b2 | c3 | d2 |
表15
表14和表15里面共同的属性列是B、C
R÷S就是R里面满足S的,且去掉S的元素♪这里的满足是全部满足哦♪
看了接下来的图和表就知道了哦♪
图1.8
能看的吗♪需要爱莉再解释一下吗?
为什么没有a2呢,因为a2没有全部满足S表的内容哦♪
A |
---|
a1 |
表16
怎么样?是不是一下子就清爽了呢♪
二、Microsoft SqlServer的基本语法(关系型)
建表:
Create table <表名>
(
<列名> <数据类型> <列级完整性约束>
<列名> <数据类型> <列级完整性约束>
......
)
完整性约束:
表级约束:
主码:
Primary key ( <属性1> ,<属性2>) 属性即列名
外码:
Foreign key <此表格的属性> references <被参照表的表名> <被参照表中的属性名,即前面的列名>
列级约束:
主码:<属性名> <数据类型> primary key
示例:
create table student
(
Sno char(9) primary key,
Sname char(20) unique,
Ssex char(2),
Sage smallint,
Sdept char(20)
)
Smallint 短整型(2字节)
修改数据:
Update<表名>
Set <列名>=<>
[Where<条件>]
插入数据:
insert into <表名>[<属性列1>.....]
Values()
修改基本表:
Alter table <表名>
增:add column <新列名> <数据类型>
删:drop column <列名> [cascade \ restrict]
改:alter column <列名> <数据类型>
删除表时:若选择cascade,则该表无限制条件。删除基本表同时删除相关对象
若选择restrict,则该表有限制条件,不能存在依赖该表的对象,否则无法删除
建立索引:
Create [unique\cluster] index <索引名> on <表名>(<列名> <次序>)
ASC:升序 (默认值)
DESC:降序
数据查询:
选择全表:select*
Select [all\distinct] <目标列名> distinct 消除重复行
From <表名>
Where <条件表达式>
或\且 Group by <列名1> [having <条件表达式>] 一般跟在聚集函数后sum avg max min
又如:
查询平均成绩大于大于90的学生号码和平均成绩
Select sno,avg(grade)
From sc
Group by sno
Having avg(grade)>=90
或\且 Order by <列名2>[ASC\DESC]
Where 表达式
确定范围:
between and | Not between and |
确定集合:
in | not in |
字符匹配:
like | not like |
字符匹配时,like’_%’
_表示第一个字为任意字符
%表示任意长度
空值:
is null | is not null |
逻辑运算:
and | or | not |
删除数据
Delete
From <表名>
Where <条件>
定义视图
Create view <视图名> (<列名1>,<列名2>)
As <子查询>
With check option、
子查询可以是任意的select语句
创建角色:
create role <角色名>
授权:
Grant <权限>
On <对象类型>,<对象名>
To <用户名>
With grant option
回收权限:
Revoke <权限>
On <对象类型>
From <角色>