第三章 关系数据库标准语言SQL

一、概述

特点

**1)综合统一:**数据定义语言(DDL)、操作语言(DML)、控制语言(DCL)功能于一体。

2)高度非过程化:只需提出做什么,无需了解存储路径。

3)SQL采用集合操作方式

**4)提供多种实现方式:**独立语言(可独立用于联机交互)、嵌入式语言(嵌入到高级语言)

5)支持三级模式:视图(外模式)、基本表(模式)、存储文件(内模式)

二、数据定义

模式的定义与删除

定义

删除

sql 复制代码
drop schema <模式名> <cascade|restrict>

cascade(级联):删除模式的同时把里面所有的数据对象都给删除

restrict(限制):若模式内有内容,则拒绝执行。

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

定义表:

sql 复制代码
create table <表名>(
属性名1 数据类型 列完整性约束,
属性名2 数据类型 列完整性约束,
属性名3 数据类型 列完整性约束,
表完整性约束);

定义表所属模式:

修改表

sql 复制代码
alter table <表名>
  add 新列名 类型 约束 | alter 列名 类型 | drop 完整性约束名

删除表

sql 复制代码
drop table 表名 [cascade|restrict]

cascade:删除表没限制,与之相关的视图、索引、触发器啥的都一起删除。

restrict:有关联无法删除。

索引的建立与删除

相关内容:DBMS一般自动建立主键和非空的索引,DBMS自动维护索引、DBMS自动选择是否使用哪些索引。

是内部实现技术(属于内模式范畴

建立索引

sql 复制代码
create [unique][cluster] index 索引名 on 表名(属性<顺序:desc|asc>...);

一个表只能有一个聚簇索引,建立在经常查询的列上。

删除索引

sql 复制代码
drop index 索引名

数据查询

1、单表查询

sql 复制代码
select distinct sname from student

distinct去掉重复的行。

查询条件

1、比较大小

2、确定范围:between and not between and

3、确定集合:in (集合) not in

4、字符匹配:like not like _:单个字符 %:任意字符

5、涉及空值的查询:is null is not null (is不能用=代替)

6、多重条件查询:and or

7、排序关键词: order by 属性 asc | desc

8、聚集函数:count、sun、avg、max、min

9、group by子句 Having 条件

having短语作用于组,从中选择满足条件的组,而where是选择满足条件的列。

2、连接查询

等值查询

自身连接:

一个表与自己连接(需要给表起别名)

外连接:

将主体表中不满足连接条件的元组也一并输出。

sql 复制代码
select student.sno
from student left out join sc on student.sno=sc.sno;

左外连接、右外连接、全外连接

**复合条件连接:**where有多个条件

3、嵌套查询

子查询:不能用order by语句

不相关子查询:子查询的查询条件不依赖于父查询。

相关子查询:依赖父查询。

**带有比较运算符的子查询:**子查询一定要在运算符之后

带有ANY或ALL谓词的子查询:

**带有exists谓词的子查询:**exists谓词的子查询不返回任何数据,只产生逻辑真值(true)和假值(false),子查询的目标列通常都用*

用exists或not exists实现全称量词(难点)

4、集合查询

union:并操作

intersect:交操作

except:差操作

查询结果的列数和对应的数据类型必须相同。

union:将多个查询结果合起来后自动去除重复元组

union all:保留重复元组。

数据更新

1、插入数据

普通插入元组:

sql 复制代码
insert into 表名(列名1,列名2...)
values (值1,值2,...)

子查询插入数据

sql 复制代码
insert into 表名(列名1,列名2...)
子查询;

2、修改数据

sql 复制代码
update 表名
set 列名1=新值1,列名2=新值2...
where 条件表达式

3、删除数据

删除指定表中满足where子句条件的元组。

sql 复制代码
delete from 表名
where 条件表达式

视图

虚表:从基本表中导出的表,基表的数据发生变化,视图查询的数据也会改变

视图的操作

1、创建视图
sql 复制代码
create view 视图名 (列名1,列名2...)
as 子查询
[with check option]

子查询不允许有order by或distinct短语

执行create view时并不执行select语句,只是将视图的定义存入数据字典,查询视图时也是查询基本表中的数据。

with check option的作用:在修改、删除、插入操作时自动加上where中的条件。

基于视图的视图、带表达式的视图、分组视图(group by)、

不指定属性列:

2、删除视图
sql 复制代码
drop view 视图名 [cascade | restrict]

cascade:将该视图和由他导出的所有视图一起删除。

restrict:有对视图的依赖,则不允许删除。

3、更新视图

允许对行列子集视图进行更新。

但一些视图是不可更新的,因为这些视图不能唯一地有意义地转为对相应基本表的更新。

4、视图的作用

简化用户操作、提供了一定的逻辑独立性、提供安全保护、更清晰的表达查询。

相关推荐
m0_7482540914 分钟前
【MySQL 的数据目录】
数据库·mysql·adb
m0_7482349028 分钟前
【MySQL】表的基本操作
数据库·mysql·oracle
若云止水1 小时前
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_conf_t
数据库·nginx·ubuntu
hzj61 小时前
极简Redis速成学习
数据库·redis·学习
m0_748248231 小时前
SpringBoot集成Flink-CDC,实现对数据库数据的监听
数据库·spring boot·flink
小猪咪piggy1 小时前
【MySQL】(1) 数据库基础
数据库·mysql
青云交2 小时前
大数据新视界 -- 大数据大厂之 Hive 函数库:丰富函数助力数据处理(上)(11/ 30)
大数据·数据库·sql·数据处理·自定义函数·函数分类·常用函数·hive 函数库
kunkun_12302 小时前
django app中的models迁移问题根治方法
数据库·django
胡歌12 小时前
分布式主键生成方案
数据库
m0_748245172 小时前
oracle使用PLSQL导出表数据
数据库·oracle