数据库学习笔记(持续更新4.18)


第一章:绪论

第二章:关系型数据库

1、一些概念

关系:实体与实体之间的联系(可以看做一张二维表)、

候选码:若关系中的一个属性或属性组的值能够唯一地标识一个元组,且他的真子集不能唯一的标识一个元组,则称这个属性或属性组做候选码。

主码:若一个关系有多个候选码,则选定其中一个为主码

主属性:候选码的各个属性成为主属性

全码:表中的所有属性都是这个表的候选码,则称为全码

外键(外码)如果公共关键字在一个关系中是主键,那么这个公共关键字被称为另一个关系的外键。

关系三种类型:①基本表(基本关系)②查询表③视图表

关系模式:关系的描述称为关系模式(即为表头)

2、关系完整性

  1. 实体完整性:实体完整性要求每个数据表都必须有主键,而作为主键的所有字段,其属性必须是独一及非空值
  2. 参照完整性:参照的关系中的属性值必须能够在被参照关系找到或者取空值
  3. 用户定义完整性

3、列级完整性约束和表级完整性约束

列级约束有六种:Primary key(主键)、foreign key(外键) 、 unique(唯一)、 check (检查)、default (默认)、not null/ null(非空/空值 )
表级约束有四种:Primary key(主键)、foreign key(外键) 、 unique(唯一)、 check (检查)

只能是列级完整性约束:default (默认)、not null/ null(非空/空值 )

第三章:SQL语句

1、数据类型

数据类型1

数据类型2

2、基本表的定义、修改与删除

基本操作语句
表的定义
create table student (
    列名 数据类型 列级完整性约束
    sno char(9) unique,
    ssex char(2),
    primary KEY(sno),
    foreing key(sno) refferences student(sno)
);
表的修改

修改表

[]:可以出现,可以不出现

<>:一定会出现 drop是删除

注:上述

表的删除

3、数据查询

数据查询是数据库的核心操作

查询的一般格式(块)为:

select  目标列表达式
from 表明或视图名
where 条件表达式
group by 列名 having 选择组的条件
order by 列名 asc/desc(升降序)

执行顺序为:from→where→select

一、单表查询:

  1. 选择表中的若干列

    (1)查询指定列

    select Sname,Sno,Sdept
    from Student;
    

    (2)查询所有列

    select *
    from Student;
    

    (3)查询经过计算的值

    select语句中的目标表达式可以是表中的属性列,也可以是表达式,还可以是字符串常量函数

    例:查询全体学生的姓名及其出生年份

    select Sname,'Year of Birth' birth,2021-Sage   /*当前年份-年龄*/
    from Student;
    

    输出结果为:

    Sname birth 2021-Sage
    李勇 Year of Birth 1994
    李晨 Year of Birth 1995

    注意:上方代码块中的 'Year of Birth' birth表示将’Year of Birth’列命名为birth,中间用空格号分隔开


  2. 选择表中的若干元组

(1)消除取值重复的行

distinct:消除取值重复的行 select distinct Sno

若没有指定distinct关键字则默认为all

(2)查询满足条件的元组

where:查询满足条件的元组

常用查询条件

①比较大小
where Sdept='cs'
where Sage<20

②确定范围
where Sage between 20 and 23

③确定集合
where Sedpt in('CS','MA','IS')

④字符分配
  %:代表任意长度(可以为0)的字符串。
  _:代表任意单个字符
where Sname like'_阳%'(查询第二个字为阳的学生)

⑤涉及空值的查询
where Grade is null

⑥多充条件查询
使用 and 或者 or,通常 and的优先级高于 or,可以使用括号改变优先级
where Sdept='CS'and Sage<20
注:实际上 in是多个 or运算符的缩写

3.order by语句

升序:ASC

降序:DESC

默认为升序

例:查询结果按所在的系的系号升序排列,同一系中的学生按年龄降序排列:

order by Sdept,Sage desc


  1. 聚集函数

聚集函数

查询学生总人数:select count(distinct Sno)

计算平均成绩:select avg(Grade)


  1. group by 语句

group by子句将查询结果按某一列或多列的值分组,值相等的为一组。

求各个课程号及相应选课人数
select Con,count(Sno)
from sc
group by Con

***查询选修了三门以上课程的学生学号
select Sno
from sc
group by Sno
having count()

***求选课在三门以上(包括三门)且各门课程均及格的学生的学号及其总成绩,查询结果按总成绩降序列出
select sno,sum(score)
from sc
where score>=60
group by sno
having count(*)>=3
order by sum(score)desc

执行过程:
1.from   取出整个sc
2.where  筛选score>=60的元组
3.group by  将选出的元组按sno分组
4.having  筛选选课三门以上的分组
5.select  将选中的组中提取学号和总成绩
6.order by  将选取结果排序
先用where语句查询效率更高,如果直接用group则将会在sc表中的所有元组进行分组,若先用where则group将在筛选出来的元组中进行分组,提高了查询效率。

执行顺序为:where→group by→having

辨析:where作用于基本表或者视图,having作用于


二、连接查询

1.等值于非等值连接查询

where student.sno = sc.sno

以上比较运算符‘ = ’可以有:=、>、<、>=、<=

此时连接查询的where句子用来连接两个表的条件称为连接条件或者*连接谓词

*连接谓词中的列名称为连接字段(student.sno)


2.自身连接


3.外连接

定义:有时想以学生标student为主体,列出每个学生的基本情况及选课情况,如果某个学生没有选课,仍把该学生的记录留在结果关系中,而在sc表中的属性值加上NULL,这时就需要外连接。

  

文章作者: Yuukyou
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Yuukyou !
评论
  目录