第三章 关系数据库标准语言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、视图的作用

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

相关推荐
catoop2 小时前
API Key 设计与安全生成方案:结构拆解、数据库设计与 Java 实现
java·数据库·安全
Web极客码2 小时前
我用 Claude 分析 Redis 哨兵日志,实现跨机房数据不一致自动对齐
数据库·redis·php
库库的数据库笔记3 小时前
国产信创数据库的MySQL兼容性深度对比解析
大数据·数据库·mysql·oceanbase·政务
姚远Oracle ACE3 小时前
为什么无法连接到 PostgreSQL?
数据库·postgresql
ss2733 小时前
AI时代首先数据库-PostgreSQL实战笔记 | 22 PostgreSQL实例与集群
数据库·笔记·postgresql
ss2733 小时前
AI时代首先数据库-PostgreSQL实战笔记 | 21 PostgreSQL进程与内存架构介绍
数据库·笔记·postgresql
Henry-SAP5 小时前
SAP PP模块全景概览
数据库
喜欢吃豆5 小时前
Better Auth 深度解析:从用户认证到企业级身份基础设施
数据库·架构·权限·多租户
其实防守也摸鱼6 小时前
Cylab在线靶场——CTF中的通用技能
linux·数据库·学习·算法·靶场·ctf·学习网络安全