数据库学习笔记(第三章)

第三章:SQL

3.1 概述
1.SQL: Structured Query Language

2.特点
一体化
①集DDL,DML,DCL于一体
②单一的结构----关系,带来了数据操作符的统一
面向集合的操作方式:一次一集合
高度非过程化:用户只需提出“做什么”,无须告诉“怎么做”,不必了解存取路径
两种使用方式,统一的语法结构:SQL既是自含式语言,又是嵌入式语言
语言简洁,易学易用

3.SQL组成:
①数据定义语言(DDL)
②数据操纵语言 (DML)
③数据控制语言(DCL)
④事务控制(Transaction Control)
⑤嵌入式SQL和动态SQL(Embedded SQL and Dynamic SQL)

4.在这里插入图片描述SQL语言对大小写不敏感!

3.2 SQL数据定义功能
1.在这里插入图片描述
2.基本数据类型:
在这里插入图片描述

3.基本表的定义:
在这里插入图片描述
格式:
在这里插入图片描述
比如:
在这里插入图片描述

接下来这个例子是将外键和主键进行了重命名,如果不这样做的话编译能过但是用起来会很麻烦,DBMS会自动为其分配名字(比较奇怪):
在这里插入图片描述

这里的pk_sc和fk_scs就是重命名了

4.常用完整性约束:
在这里插入图片描述

PRIMARY KEY与 UNIQUE的异同?
→PRIMARY KEY:约束数据唯一和非空
UNIQUE:约束数据唯一

5.表空间:
→表空间是数据库的逻辑划分,一个表空间只能属于一个数据库,一个数据库可以拥有多个表空间,表空间分为系统表空间和用户定义的表空间
一个表空间可以包含多个表,一个表只能属于一个表空间
注意这两点的区别!

Example:

在这里插入图片描述

6.表的属主(Owner):
→每个数据库对象都有自己的属主(Owner),表也有自己的属主(Owner) 。数据库对象的默认属主(Owner)是创建该对象的用户。
→属主(Owner)拥有表的所有权限。

在这里插入图片描述

7.修改表:
在这里插入图片描述
(注意:修改列的长度时,只能改长,不能改短)

Attention:alter table T add location char(30) not null;
这个语句在执行的时候,只有空表没报错QAQ

8.删除属性列:
在这里插入图片描述

9.删除表中的约束:
alter table 表名 drop constraint 约束名

10.索引:
目的:大部分的查询只涉及数据库中的少量数据,建立索引是加快查询速度的有效手段

基本格式:
在这里插入图片描述

索引的删除:
在这里插入图片描述
索引的有关说明:
①可以动态地定义索引,即可以随时建立和删除索引
②不允许用户在数据操作中指定索引,索引如何使用完全由DBMS决定
③应该在使用频率高的、经常用于连接的列上建索引
④索引实现:B+树,散列(hash)
⑤一个表上可建多个索引。索引可以提高查询效率,但索引过多耗费空间,且降低了插入、删除、更新的效率

3.3 SQL数据查询基本结构

1.基本结构:
在这里插入图片描述
等价于:
在这里插入图片描述

语句格式:
在这里插入图片描述其中,
SELECT子句:指定要显示的属性列
FROM子句:指定查询对象(基本表或视图)
WHERE子句:指定查询条件
GROUP BY子句:对查询结果按指定列的值分组,该属性列值相等的元组为一个组。通常会在每组中作用聚集函数。
HAVING短语:筛选出只有满足指定条件的组
ORDER BY子句:对查询结果按指定列值的升序或降序排序

2.目标列形式:
可以为列名,* ,算术表达式,聚集函数
*就是“所有的信息”

3.select语句:
在这里插入图片描述执行这个语句后,表的属性名就是tname和sal*0.95

4.重复元组的处理:
若要去掉重复元组,可用关键字distinct或unique指明

5.from语句:
from子句列出查询的对象表,当目标列取自多个表时,在不混淆的情况下可以不用显式指明来自哪个关系
相当于表的笛卡尔积,不是自然连接

6.常用查询条件:
在这里插入图片描述
7.更名运算:
在这里插入图片描述

8.元组变量:
在这里插入图片描述
9.匹配规则:
在这里插入图片描述如果想匹配\,则可以用\

10.SQL正则表达式:
REGEXP_LIKE(匹配)
REGEXP_INSTR (包含)
REGEXP_REPLACE(替换)
REGEXP_SUBSTR(提取)

示例:
在这里插入图片描述
11.元组显示顺序:
order by 列名 [asc | desc]

当元组中含有空值时:
ASC:排序列为空值的元组最后显示
DESC:排序列为空值的元组最先显示

12.集合操作:
集合并:union
集合交:intersect
集合差: except(minus)

集合操作自动去除重复元组,如果要保留重复元组的话,必须用all关键词指明

13.聚集函数:
在这里插入图片描述

14.分组命令:
group by 列名 [having 条件表达式]

group by将表中的元组按指定列上值相等的原则分组,然后在每一分组上使用聚集函数,得到单一值

having则对分组进行选择,只将聚集函数作用到满足条件的分组上,从关系代数角度来看,having是在分组之后进行的选择运算

在这里插入图片描述

15.where和having的异同:
相同:二者均是选择运算
不同:二者的作用对象不同,where的作用对象是元组,having的作用对象是分组

16.空值测试:
在这里插入图片描述
注意事项
①除is [not] null之外,空值不满足任何查找条件
②如果null参与算术运算,结果为null
③如果null参与比较运算,结果为null,按照false处理
④如果null参与聚集运算,除count(*)之外其它聚集函数都忽略null

3.4嵌套子查询
1.成员资格判断:

在这里插入图片描述
2.子查询不能使用order by语句

3.不相关子查询和相关子查询的区别在于,元组变量的作用域不同

4.当能确切知道内层查询返回单值时,可用比较运算符。

5.some/all子查询(每次都忘!)
感觉会用这个子查询能减少很多SQL语句和临时视图的出现,而且SQL语句也更加直观!
some——表达式的值至少与子查询结果中的一个值相比满足
all——表达式的值与子查询结果中的所有的值相比都满足

6.SOME与ALL与聚集函数的对应关系
在这里插入图片描述

7.测试是否为空关系
在这里插入图片描述

in和exists的区别:in后的子查询与外层查询无关,每个子查询执行一次,而exists后的子查询与外层查询有关,需要执行多次,称之为相关子查询

8.对于EXISTS而言:
若子查询结果非空集,exists返回真值
若子查询结果为空集,exists返回假值

9.首先取外层查询中关系的第一个元组,根据它与内层查询相关的属性值处理内层查询,若WHERE子句返回值为真,则取此元组放入结果集合中;然后再取外层关系的下一个元组;重复这一过程,直至外层关系全部检查完为止。

10.“全部” 的概念在sql中的三种书写方法:
在这里插入图片描述
11.测试集合是否存在重复元组
在这里插入图片描述
如果子查询结果中没有重复元组,则返回true

12.With子句提供定义一个临时视图的方法,这个定义只对于with子句出现的那条查询有效。(挺少用的感觉)

3.5SQL的数据修改功能
1.插入
在这里插入图片描述
2.在这里插入图片描述
3.删除操作
在这里插入图片描述
从表中删除符合条件的元组,如果没有where语句,则删除所有元组。

4.更新操作
在这里插入图片描述
老师PPT比之前发的这版多一些内容……

END

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值