3.SQL

一、思维导图

在这里插入图片描述

二、基础梳理

  • 视图:视图是一个虚表,其本质就是一条SELECT语句,而查询结果被赋予了一个名字,也即视图名字。或者说视图本身不包含任何数据,它只包含映射到基表的一个查询语句,当基表数据发生变化时,视图数据也随之变化。其目的就是在于方便,简化数据操作

查询

  • 优先级
    在这里插入图片描述

多表查询

在这里插入图片描述

在这里插入图片描述
表别名:自身连接|表名过长等
在这里插入图片描述

在这里插入图片描述

  • 子查询
    在这里插入图片描述
    ①[NOT] IN(子查询)
    确定集合:查找属性值属于指定集合的的元组
    在这里插入图片描述

老朋友了,第二种查询的是除了只上过李明老师课的人,不符合要求
[NOT] IN(子查询)
②有的系统用some 有的系统用any(王老师)
在这里插入图片描述

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
not in() & <> all():不等于XX
<> some():不全等于XX
③[NOT] EXISTS(子查询)
子查询结果中有无元组存在(不反悔数据,只产生true或false)

  • not exists(子查询)可通过否定之否定,解决sql中无全称量词
    在这里插入图片描述
    在这里插入图片描述

结果运算

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

  • 分组聚集& 分组过滤
    在这里插入图片描述
    注意where子句不能用聚集函数作为条件表达式
    在这里插入图片描述
    having子句 vs where子句
    在这里插入图片描述

空值处理

空格是特殊的字符,不属于空值
(空值:无法确定)
在这里插入图片描述
检测
在这里插入图片描述

处理
在这里插入图片描述

视图

视图是否可更新
在这里插入图片描述

三、习题

1.选

2.填

2002

3.SQL是关系数据库系统的标准语言,集( 查询 ),(DDL ),(DML )和(DCL )功能于一体,它操作的对象和结果都是( 集合)。

3.判

2002

3.试图机制把数据对象限制在一定的范围内,可以提供对机密数据的安全保护功能。(对)

2004

在这里插入图片描述

(错 视图是虚表)

4.简答

5.计算

四、课后题答案

1.sql特点

(1)综合统一。
SQL 语言集数据定义语言 DDL 、数据操纵语言 DML 和数据控制语言 DCL 的功能于一体。

(2)高度非过程化。
用 SQL 语言进行数据操作,只要提出“做什么”,而无需指明“怎么做”,因此无需了解存取路径,存取路径的选择以及 sQL 语句的操作过程由系统自动完成。
(3)面向集合的操作方式。
SQL 语言采用集合操作方式,不仅操作对象、查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。

(4)以同一种语法结构提供两种使用方式。
SQL 语言既是自含式语言,又是嵌入式语言。
作为自含式语言,它能够独立地用于联机交互的使用方式;
作为嵌入式语言,它能够嵌入到高级语言程序中,供程序员设计程序时使用。
(5)语言简捷,易学易用。

2.在DROP TABLE时RESTRICT和CASCADE的区别。

RESTRICT表示表的删除是有限制条件的。要删除的基本表不能被其他表的约束所引州,不能有视图,不能有触发器,不能有存储过程或函数等。如果存在这些依赖该表的对象,则表不能被删除。(限制,是有点子限制在的,不能想删就删)
   CASCADE表示表的删除没有限制条件,在删除基本表的同时,相关的依赖对象(如视图)都将被删除。(级联,像瀑布一样一删全删爱谁谁)

3.关系代数转SQL

在这里插入图片描述

(1) select * from S where A=‘10’;
(别忘了英文双引号)
(2) select distinct A,B from S;
(若未指明distinct关键字,则默认为all(保留结果中取值重复的元组))
(3) select A,B,S.C,S.D,E,F from S ,T where S.C=T.C and S.D=T.D;
(若 属性名在参加连接的表中唯一,则可省略表名前缀;否则需要加上表名前缀,防混)
(4) select * from S ,T where S.C=T.C;
(5) select * from S ,T where S.A<T.E;
SELECT * FROM S,T WHERE A<E;
(6) select S.C,S.D,T.* from S ,T ;
(注意连接和笛卡尔积的相同和区别)

4.关系代数 vs SQL

建 S 表: S ( SNO , SNAME , STATUS , CITY ) ;
   CREATE TABLE S ( Sno C(2) UNIQUE,Sname C(6) ,Status C(2),City C(4));
  (?status为字符串而非整型)
建 P 表: P ( PNO , PNAME , COLOR , WEIGHT );
   CREATE TABLE P(Pno C(2) UNIQUE,Pname C(6),COLOR C(2), WEIGHT INT);
建 J 表: J ( JNO , JNAME , CITY) ;
   CREATE TABLE J(Jno C(2) UNlQUE,JNAME C(8), CITY C(4))
建SPJ 表: sPJ ( sNo , PNo , JNo , QTY);
   SPJ(SNO,PNO,JNO,QTY)
CREATE TABLE SPJ(Sno C(2),Pno C(2),JNO C(2), QTY INT))

(1)求供应工程 Jl 零件的供应商号码 SNO ;
SELECT DIST SNO FROM SPJ WHERE JNO=’J1’;
(2)求供应工程 Jl 零件 Pl 的供应商号码 SNO ;
SELECT DIST SNO FROM SPJ WHERE JNO=‘J1’ AND PNO=‘P1’;
(?为啥去重)
(3)求供应工程 Jl 零件为红色的供应商号码 SNO ;
SELECT SNO FROM SPJ,P WHERE JNO=‘J1’ AND SPJ.PNO=P.PNO AND COLOR=‘红’;
(4)求没有使用天津供应商生产的红色零件的工程号 JNO ;
SELECT DIST JNO FROM SPJ WHERE JNO NOT IN (SELE JNO FROM SPJ,P,S WHERE CITY=‘天津’ AND COLOR=‘红’ AND S.SNO=SPJ.SNO AND P.PNO=SPJ.PNO);
(排除类NOT IN)
(5)求至少用了供应商 Sl 所供应的全部零件的工程号 JNO ;
由于VFP不允许子查询嵌套太深,将查询分为两步
A、查询S1供应商供应的零件号
SELECT DIST PNO FROM SPJ WHERE SNO='S1’结果是(P1,P2)
B、查询哪一个工程既使用P1零件又使用P2零件。
SELECT JNO FROM SPJ WHERE PNO=‘P1’
AND JNO IN (SELECT JNO FROM SPJ WHERE PNO=‘P2’);
(!!!同属性的两种值的合集表达)

# VFP只支持标准SQL,只有select in 语句支持2层嵌套
# VFP(VisualFoxPro)数据库开发软件

5.SQL应用

(1)找出所有供应商的姓名和所在城市。
SELECT SNAME,CITY FROM S
(2)找出所有零件的名称、颜色、重量。
SELECT PNAME,COLOR,WEIGHT FROM P
(3)找出使用供应商S1所供应零件的工程号码。
SELECT DIST JNO FROM SPJ WHERE SNO=‘S1’
(4)找出工程项目J2使用的各种零件的名称及其数量。
SELECT PNAME,QTY FROM SPJ,P
WHERE P.PNO=SPJ.PNO AND SPJ.JNO=‘J2’
(带前缀)
(5)找出上海厂商供应的所有零件号码。
SELECT PNO FROM SPJ,S WHERE S.SNO=SPJ.SNO AND CITY=‘上海’
(不带前缀)
(6)出使用上海产的零件的工程名称。
SELECT JNAME FROM SPJ,S,J
WHERE S.SNO=SPJ.SNO AND S.CITY=‘上海’ AND J.JNO=SPJ.JNO
(select子句中不带前缀,where子句中带前缀)
(7)找出没有使用天津产的零件的工程号码。
注意: SELECT DIST JNO FROM SPJ WHERE JNO NOT IN (SELECT DIST JNO FROM SPJ,S WHERE S.SNO=SPJ.SNO AND S.CITY=‘天津’) 适用于JNO是唯一或不唯一的情况.
注意: SELECT DIST JNO FROM SPJ,S WHERE S.SNO=SPJ.SNO AND S.CITY<>'天津’适用于JNO是唯一的情况
(学细节处理,可能对应元组不唯一)
(8)把全部红色零件的颜色改成蓝色。
UPDATE P SET COLOR=‘蓝’ WHERE COLOR=‘红’

UPDATE  <表名>
SET  <列名>=<表达式>[<列名>=<表达式>][WHERE <条件>];

(9)由S5供给J4的零件P6改为由S3供应。
UPDATE SPJ SET SNO=‘S3’ WHERE SNO=‘S5’ AND JNO=‘J4’ AND PNO=‘P6’
(10)从供应商关系中删除供应商号是S2的记录,并从供应情况关系中删除相应的记录。
A、DELETE FROM S WHERE SNO=’S2’
B、DELETE FROM SPJ WHERE SNO=‘S2’

DELETE # 删除的是表中的数据
FROM <表名>
[WHRER <条件>]

(11)请将(S2,J6,P4,200)插入供应情况关系。
INSERT INTO SPJ VALUES(‘S2’,‘J6’,‘P4’,200)

	INSERT
	INTO <表名> [(<属性列1>[<属性列2 >)]
	VALUES (<常量1> [<常量2>])

6.基本表VS视图

基本表是本身独立存在的表,在sQL中一个关系就对应一个表。
视图是从一个或几个基本表导出的表。

视图本身不独立存储在数据库中,是一个虚表。即数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中。
视图在概念上与基本表等同,用户可以如同基本表那样使用视图,可以在视图上再定义视图

7.视图优点

(1)视图能够简化用户的操作;
(2)视图使用户能以多种角度看待同一数据;
(3)视图对重构数据库提供了一定程度的逻辑独立性;
(4)视图能够对机密数据提供安全保护。

8.哪类视图是可以更新的?哪类视图是不可更新的?各举一例说明。

基本表的行列子集视图一般是可更新的。
若视图的属性来自集合函数、表达式,则该视图肯定是不可以更新的。

  • 【扩展】所有的视图是否都可以更新?为什么?
       不是。
       视图是不实际存储数据的虚表,因此对视图的更新,最终要转换为对基本表的更新。因为有些视图的更新不能惟一有意义地转换成对相应基本表的更新,所以,并不是所有的视图都是可更新的。

9.SQL应用

创建视图:
CREATE VIEW VSP
AS
SELECT SNO,SPJ.PNO,QTY FROM SPJ,J
WHERE SPJ.JNO=J.JNO AND J.JNAME=‘三建’
针对该视图VSP完成下列查询:
(1)找出三建工程项目使用的各种零件代码及其数量。
SELECT DIST PNO,QTY FROM VSP
(!去重)
(2)找出供应商S1的供应情况。
SELECT DIST * FROM VSP WHERE SNO=‘S1’;
(“三建”是第二章T6的工程项目名)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值