数据库系统概念

关系模型术语:关系-->表 元组-->行 属性-->列
关系模式、关系实例-->类、变量
码的指定代表被建模事物在现实世界中的约束
超码:一个或多个属性的集合,在一个关系中可以唯一标识一个元组
候选码:最小的超码,它们的任意真子集都不能成为超码
主码:数据库设计者选中的、主要用来在一个关系中区分不同元组的候选码
外码:关系模式A在它的属性中含有关系模式B的主码,这个属性在A上称为参照B的外码,关系A是外码
依赖的参照关系,关系B是外码的被参照关系

SQL
DDL:数据定义语言,对数据库内部的对象进行创建/删除/修改的操作语言,create/drop/alter,一般是数据库管理员DBA使用
DML:数据操纵语言,对表内部数据的操作,insert/delete/update/select
create table department
(dept_name varchar(20),
building varchar(15),
budget int,
primary key(dept_name));
添加外键:alter table course add foreign key(dept_name) references department(dept_name));
drop course/delete course后者保留关系, 删除所有元组

MySQL的多表查询(笛卡尔积原理)
先确定数据要用到哪些表。
将多个表先通过笛卡尔积变成一个表。
然后去除不符合逻辑的数据(根据两个表的关系去掉)。

自然连接只考虑那些在两个关系模式中都出现的属性上取值相同的元组对
select name, course_id from instructor natural join teaches;
select name, title from (instructor natural join teaches) join course using (course_id);
只需course_id值相同即可;教师讲授课程不属于本系的也会查询出来

更名运算
select distinct T.name from instructor as T, instrutor as S where T.salary>S.salary and S.dept_name='Biology';

字符串运算
select dept_name from department where building like '%Watson%';

显示次序
select * from instructor where dept_name='Physics' order by name;

where字句谓语
select name from instructor where salary between 90000 and 10000;
select name from instructor where salary<=10000 and salary>=9000;
select name ,course_id from instructor ,teaches where (instructor.ID, dept_name) = (teaches.ID, 'Biology');

聚集函数
avg/min/max/sum/count
select avg(salary) as avg_salary from instructor where dept_name = 'Comp.Sci. ';
分组聚集
错误查询
select dept_name, ID, avg(salary)
from instructor
group by dept_name;
任何没有在group by出现的属性如果出现在select子句的话,它只能出现在聚集函数内部,否则出错
having子句:对分组限定条件
select dept_name, avg(salary) as avg_salary
from instructor
group by dept_name
having avg(salary)>4200;

中级SQL
连接表达式
select * from student join takes on student.ID = takes.ID;
外连接
select * from student natural left outer join takes;
一门课都没修的学生id
select ID
from student natural left outer join takes
where course_id is null
全外连接(MySQL不支持全外连接,所以只能采取关键字UNION来联合左、右连接的方法)
select
from(select
from student where dept_name='Comp.Sci')
natural full outer join
(select *
from takes
where semester='Spring' and year=2009);

什么是视图?
视图实际上是在数据库中通过Select查询语句从多张表中提取的多个表字段所组成的虚拟表。
视图并不占据物理空间,所以通过视图查询出的记录并非保存在视图中,而是保存在原表中。
通过视图可以对指定用户隐藏相应的表字段,起到保护数据的作用。
在满足一定条件时,可以通过视图对原表中的记录进行增删改操作。
创建视图时,只能使用单条select查询语句

视图关系是在需要时才被创建的
create view departments_total_salary(dept_name, total_salary) as
select dept_name, sum(salary)
from instructor
group by dept_name;
select * from departments_total_salary;//使用视图名指代该视图生成的虚关系

完整性约束
1.单个关系上的约束:not null/unique/check
create table sectionl
(course_id varchar(8),
semester varchar(8),
check(semester in('Fall', 'Winter', 'Spring', 'Summer')));
check子句允许以有力的方式对属性域加以限制
2.参照完整性
断言:数据库总能满足的一个条件

SQL数据类型和模式
SQL中的日期和时间类型
date: 年月日
time: 小时分秒
timestamp: date+time

默认值
create table student
(ID varchar(5),
tot_cred numeric(3,0) default 0);

创建索引
create index studentID_index on student(ID);

大对象类型
book_review clob (10KB) //clob字符数据的大对象数据类型
image blob (10MB) //blob二进制数据的大对象数据类型

自定义类型
create type Dollars as numeric(12,2) final; //final标准要求

create table扩展
create table t1 as //as或like
(select *
from instructor
where dept_name = 'Music')
with data;

授权
grant select on department to Amit, Tyson;
grant update(budget) on department to Tyson;
revoke select on department from Amit restrict; //restrict防止级联收回,cascade级联收回

角色
create role instructor;
grant select on takes
to instructor;

触发器:触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。
它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。
在学生表中拥有字段学生姓名,字段学生总数,每当添加一条学生信息时,学生的总数就必须同时更改。
在学生表中还会有学生姓名的缩写,学生住址等字段,添加学生信息时,往往需要检查电话、邮箱等格式是否正确。

在takes表上定义一个before insert触发器,插入一条记录时,假设所插入的分数的值为空白则表明该分数发生缺失,所以定义此触发器在分数值条件满足时触发用null值代替空白。
delimiter //定界符
create trigger setnull before insert
on takes for each row
begin
if(NEW.grade = ' ')
then
set NEW.grade = null;
end if;
end

数据库设计
实体-联系模型(E-R模型)

关系模型术语:关系--》表 元组-》行 属性--》列
关系模式、关系实例--》类、变量
码的指定代表被建模事物在现实世界中的约束
超码:一个或多个属性的集合,在一个关系中可以唯一标识一个元组
候选码:最小的超码,它们的任意真子集都不能成为超码
主码:数据库设计者选中的、主要用来在一个关系中区分不同元组的候选码
外码:关系模式A在它的属性中含有关系模式B的主码,这个属性在A上称为参照B的外码,关系A是外码
依赖的参照关系,关系B是外码的被参照关系

SQL
DDL:数据定义语言,对数据库内部的对象进行创建/删除/修改的操作语言,create/drop/alter,一般是数据库管理员DBA使用
DML:数据操纵语言,对表内部数据的操作,insert/delete/update/select
create table department
(dept_name varchar(20),
building varchar(15),
budget int,
primary key(dept_name));
添加外键:alter table course add foreign key(dept_name) references department(dept_name));
drop course/delete course后者保留关系, 删除所有元组

MySQL的多表查询(笛卡尔积原理)
先确定数据要用到哪些表。
将多个表先通过笛卡尔积变成一个表。
然后去除不符合逻辑的数据(根据两个表的关系去掉)。

自然连接只考虑那些在两个关系模式中都出现的属性上取值相同的元组对
select name, course_id from instructor natural join teaches;
select name, title from (instructor natural join teaches) join course using (course_id);
只需course_id值相同即可;教师讲授课程不属于本系的也会查询出来

更名运算
select distinct T.name from instructor as T, instrutor as S where T.salary>S.salary and S.dept_name='Biology';

字符串运算
select dept_name from department where building like '%Watson%';

显示次序
select * from instructor where dept_name='Physics' order by name;

where字句谓语
select name from instructor where salary between 90000 and 10000;
select name from instructor where salary<=10000 and salary>=9000;
select name ,course_id from instructor ,teaches where (instructor.ID, dept_name) = (teaches.ID, 'Biology');

聚集函数
avg/min/max/sum/count
select avg(salary) as avg_salary from instructor where dept_name = 'Comp.Sci. ';
分组聚集
错误查询
select dept_name, ID, avg(salary)
from instructor
group by dept_name;
任何没有在group by出现的属性如果出现在select子句的话,它只能出现在聚集函数内部,否则出错
having子句:对分组限定条件
select dept_name, avg(salary) as avg_salary
from instructor
group by dept_name
having avg(salary)>4200;

中级SQL
连接表达式
select * from student join takes on student.ID = takes.ID;
外连接
select * from student natural left outer join takes;
一门课都没修的学生id
select ID
from student natural left outer join takes
where course_id is null
全外连接(MySQL不支持全外连接,所以只能采取关键字UNION来联合左、右连接的方法)
select
from(select
from student where dept_name='Comp.Sci')
natural full outer join
(select *
from takes
where semester='Spring' and year=2009);

什么是视图?
视图实际上是在数据库中通过Select查询语句从多张表中提取的多个表字段所组成的虚拟表。
视图并不占据物理空间,所以通过视图查询出的记录并非保存在视图中,而是保存在原表中。
通过视图可以对指定用户隐藏相应的表字段,起到保护数据的作用。
在满足一定条件时,可以通过视图对原表中的记录进行增删改操作。
创建视图时,只能使用单条select查询语句

视图关系是在需要时才被创建的
create view departments_total_salary(dept_name, total_salary) as
select dept_name, sum(salary)
from instructor
group by dept_name;
select * from departments_total_salary;//使用视图名指代该视图生成的虚关系

完整性约束
1.单个关系上的约束:not null/unique/check
create table sectionl
(course_id varchar(8),
semester varchar(8),
check(semester in('Fall', 'Winter', 'Spring', 'Summer')));
check子句允许以有力的方式对属性域加以限制
2.参照完整性
断言:数据库总能满足的一个条件

SQL数据类型和模式
SQL中的日期和时间类型
date: 年月日
time: 小时分秒
timestamp: date+time

默认值
create table student
(ID varchar(5),
tot_cred numeric(3,0) default 0);

创建索引
create index studentID_index on student(ID);

大对象类型
book_review clob (10KB) //clob字符数据的大对象数据类型
image blob (10MB) //blob二进制数据的大对象数据类型

自定义类型
create type Dollars as numeric(12,2) final; //final标准要求

create table扩展
create table t1 as //as或like
(select *
from instructor
where dept_name = 'Music')
with data;

授权
grant select on department to Amit, Tyson;
grant update(budget) on department to Tyson;
revoke select on department from Amit restrict; //restrict防止级联收回,cascade级联收回

角色
create role instructor;
grant select on takes
to instructor;

触发器:触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。
它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。
在学生表中拥有字段学生姓名,字段学生总数,每当添加一条学生信息时,学生的总数就必须同时更改。
在学生表中还会有学生姓名的缩写,学生住址等字段,添加学生信息时,往往需要检查电话、邮箱等格式是否正确。

在takes表上定义一个before insert触发器,插入一条记录时,假设所插入的分数的值为空白则表明该分数发生缺失,所以定义此触发器在分数值条件满足时触发用null值代替空白。
delimiter //定界符
create trigger setnull before insert
on takes for each row
begin
if(NEW.grade = ' ')
then
set NEW.grade = null;
end if;
end

数据库设计
实体-联系模型(E-R模型)

关系模型术语:关系--》表 元组-》行 属性--》列
关系模式、关系实例--》类、变量
码的指定代表被建模事物在现实世界中的约束
超码:一个或多个属性的集合,在一个关系中可以唯一标识一个元组
候选码:最小的超码,它们的任意真子集都不能成为超码
主码:数据库设计者选中的、主要用来在一个关系中区分不同元组的候选码
外码:关系模式A在它的属性中含有关系模式B的主码,这个属性在A上称为参照B的外码,关系A是外码
依赖的参照关系,关系B是外码的被参照关系

SQL
DDL:数据定义语言,对数据库内部的对象进行创建/删除/修改的操作语言,create/drop/alter,一般是数据库管理员DBA使用
DML:数据操纵语言,对表内部数据的操作,insert/delete/update/select
create table department
(dept_name varchar(20),
building varchar(15),
budget int,
primary key(dept_name));
添加外键:alter table course add foreign key(dept_name) references department(dept_name));
drop course/delete course后者保留关系, 删除所有元组

MySQL的多表查询(笛卡尔积原理)
先确定数据要用到哪些表。
将多个表先通过笛卡尔积变成一个表。
然后去除不符合逻辑的数据(根据两个表的关系去掉)。

自然连接只考虑那些在两个关系模式中都出现的属性上取值相同的元组对
select name, course_id from instructor natural join teaches;
select name, title from (instructor natural join teaches) join course using (course_id);
只需course_id值相同即可;教师讲授课程不属于本系的也会查询出来

更名运算
select distinct T.name from instructor as T, instrutor as S where T.salary>S.salary and S.dept_name='Biology';

字符串运算
select dept_name from department where building like '%Watson%';

显示次序
select * from instructor where dept_name='Physics' order by name;

where字句谓语
select name from instructor where salary between 90000 and 10000;
select name from instructor where salary<=10000 and salary>=9000;
select name ,course_id from instructor ,teaches where (instructor.ID, dept_name) = (teaches.ID, 'Biology');

聚集函数
avg/min/max/sum/count
select avg(salary) as avg_salary from instructor where dept_name = 'Comp.Sci. ';
分组聚集
错误查询
select dept_name, ID, avg(salary)
from instructor
group by dept_name;
任何没有在group by出现的属性如果出现在select子句的话,它只能出现在聚集函数内部,否则出错
having子句:对分组限定条件
select dept_name, avg(salary) as avg_salary
from instructor
group by dept_name
having avg(salary)>4200;

中级SQL
连接表达式
select * from student join takes on student.ID = takes.ID;
外连接
select * from student natural left outer join takes;
一门课都没修的学生id
select ID
from student natural left outer join takes
where course_id is null
全外连接(MySQL不支持全外连接,所以只能采取关键字UNION来联合左、右连接的方法)
select
from(select
from student where dept_name='Comp.Sci')
natural full outer join
(select *
from takes
where semester='Spring' and year=2009);

什么是视图?
视图实际上是在数据库中通过Select查询语句从多张表中提取的多个表字段所组成的虚拟表。
视图并不占据物理空间,所以通过视图查询出的记录并非保存在视图中,而是保存在原表中。
通过视图可以对指定用户隐藏相应的表字段,起到保护数据的作用。
在满足一定条件时,可以通过视图对原表中的记录进行增删改操作。
创建视图时,只能使用单条select查询语句

视图关系是在需要时才被创建的
create view departments_total_salary(dept_name, total_salary) as
select dept_name, sum(salary)
from instructor
group by dept_name;
select * from departments_total_salary;//使用视图名指代该视图生成的虚关系

完整性约束
1.单个关系上的约束:not null/unique/check
create table sectionl
(course_id varchar(8),
semester varchar(8),
check(semester in('Fall', 'Winter', 'Spring', 'Summer')));
check子句允许以有力的方式对属性域加以限制
2.参照完整性
断言:数据库总能满足的一个条件

SQL数据类型和模式
SQL中的日期和时间类型
date: 年月日
time: 小时分秒
timestamp: date+time

默认值
create table student
(ID varchar(5),
tot_cred numeric(3,0) default 0);

创建索引
create index studentID_index on student(ID);

大对象类型
book_review clob (10KB) //clob字符数据的大对象数据类型
image blob (10MB) //blob二进制数据的大对象数据类型

自定义类型
create type Dollars as numeric(12,2) final; //final标准要求

create table扩展
create table t1 as //as或like
(select *
from instructor
where dept_name = 'Music')
with data;

授权
grant select on department to Amit, Tyson;
grant update(budget) on department to Tyson;
revoke select on department from Amit restrict; //restrict防止级联收回,cascade级联收回

角色
create role instructor;
grant select on takes
to instructor;

触发器:触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。
它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。
在学生表中拥有字段学生姓名,字段学生总数,每当添加一条学生信息时,学生的总数就必须同时更改。
在学生表中还会有学生姓名的缩写,学生住址等字段,添加学生信息时,往往需要检查电话、邮箱等格式是否正确。

在takes表上定义一个before insert触发器,插入一条记录时,假设所插入的分数的值为空白则表明该分数发生缺失,所以定义此触发器在分数值条件满足时触发用null值代替空白。
delimiter //定界符
create trigger setnull before insert
on takes for each row
begin
if(NEW.grade = ' ')
then
set NEW.grade = null;
end if;
end

数据库设计
实体-联系模型(E-R模型)

关系模型术语:关系--》表 元组-》行 属性--》列
关系模式、关系实例--》类、变量
码的指定代表被建模事物在现实世界中的约束
超码:一个或多个属性的集合,在一个关系中可以唯一标识一个元组
候选码:最小的超码,它们的任意真子集都不能成为超码
主码:数据库设计者选中的、主要用来在一个关系中区分不同元组的候选码
外码:关系模式A在它的属性中含有关系模式B的主码,这个属性在A上称为参照B的外码,关系A是外码
依赖的参照关系,关系B是外码的被参照关系

SQL
DDL:数据定义语言,对数据库内部的对象进行创建/删除/修改的操作语言,create/drop/alter,一般是数据库管理员DBA使用
DML:数据操纵语言,对表内部数据的操作,insert/delete/update/select
create table department
(dept_name varchar(20),
building varchar(15),
budget int,
primary key(dept_name));
添加外键:alter table course add foreign key(dept_name) references department(dept_name));
drop course/delete course后者保留关系, 删除所有元组

MySQL的多表查询(笛卡尔积原理)
先确定数据要用到哪些表。
将多个表先通过笛卡尔积变成一个表。
然后去除不符合逻辑的数据(根据两个表的关系去掉)。

自然连接只考虑那些在两个关系模式中都出现的属性上取值相同的元组对
select name, course_id from instructor natural join teaches;
select name, title from (instructor natural join teaches) join course using (course_id);
只需course_id值相同即可;教师讲授课程不属于本系的也会查询出来

更名运算
select distinct T.name from instructor as T, instrutor as S where T.salary>S.salary and S.dept_name='Biology';

字符串运算
select dept_name from department where building like '%Watson%';

显示次序
select * from instructor where dept_name='Physics' order by name;

where字句谓语
select name from instructor where salary between 90000 and 10000;
select name from instructor where salary<=10000 and salary>=9000;
select name ,course_id from instructor ,teaches where (instructor.ID, dept_name) = (teaches.ID, 'Biology');

聚集函数
avg/min/max/sum/count
select avg(salary) as avg_salary from instructor where dept_name = 'Comp.Sci. ';
分组聚集
错误查询
select dept_name, ID, avg(salary)
from instructor
group by dept_name;
任何没有在group by出现的属性如果出现在select子句的话,它只能出现在聚集函数内部,否则出错
having子句:对分组限定条件
select dept_name, avg(salary) as avg_salary
from instructor
group by dept_name
having avg(salary)>4200;

中级SQL
连接表达式
select * from student join takes on student.ID = takes.ID;
外连接
select * from student natural left outer join takes;
一门课都没修的学生id
select ID
from student natural left outer join takes
where course_id is null
全外连接(MySQL不支持全外连接,所以只能采取关键字UNION来联合左、右连接的方法)
select
from(select
from student where dept_name='Comp.Sci')
natural full outer join
(select *
from takes
where semester='Spring' and year=2009);

什么是视图?
视图实际上是在数据库中通过Select查询语句从多张表中提取的多个表字段所组成的虚拟表。
视图并不占据物理空间,所以通过视图查询出的记录并非保存在视图中,而是保存在原表中。
通过视图可以对指定用户隐藏相应的表字段,起到保护数据的作用。
在满足一定条件时,可以通过视图对原表中的记录进行增删改操作。
创建视图时,只能使用单条select查询语句

视图关系是在需要时才被创建的
create view departments_total_salary(dept_name, total_salary) as
select dept_name, sum(salary)
from instructor
group by dept_name;
select * from departments_total_salary;//使用视图名指代该视图生成的虚关系

完整性约束
1.单个关系上的约束:not null/unique/check
create table sectionl
(course_id varchar(8),
semester varchar(8),
check(semester in('Fall', 'Winter', 'Spring', 'Summer')));
check子句允许以有力的方式对属性域加以限制
2.参照完整性
断言:数据库总能满足的一个条件

SQL数据类型和模式
SQL中的日期和时间类型
date: 年月日
time: 小时分秒
timestamp: date+time

默认值
create table student
(ID varchar(5),
tot_cred numeric(3,0) default 0);

创建索引
create index studentID_index on student(ID);

大对象类型
book_review clob (10KB) //clob字符数据的大对象数据类型
image blob (10MB) //blob二进制数据的大对象数据类型

自定义类型
create type Dollars as numeric(12,2) final; //final标准要求

create table扩展
create table t1 as //as或like
(select *
from instructor
where dept_name = 'Music')
with data;

授权
grant select on department to Amit, Tyson;
grant update(budget) on department to Tyson;
revoke select on department from Amit restrict; //restrict防止级联收回,cascade级联收回

角色
create role instructor;
grant select on takes
to instructor;

触发器:触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。
它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。
在学生表中拥有字段学生姓名,字段学生总数,每当添加一条学生信息时,学生的总数就必须同时更改。
在学生表中还会有学生姓名的缩写,学生住址等字段,添加学生信息时,往往需要检查电话、邮箱等格式是否正确。

在takes表上定义一个before insert触发器,插入一条记录时,假设所插入的分数的值为空白则表明该分数发生缺失,所以定义此触发器在分数值条件满足时触发用null值代替空白。
delimiter //定界符
create trigger setnull before insert
on takes for each row
begin
if(NEW.grade = ' ')
then
set NEW.grade = null;
end if;
end

数据库设计
实体-联系模型(E-R模型)

猜你喜欢

转载自www.cnblogs.com/tyson03/p/9501081.html