第3章 关系数据库标准语言SQL(重点)

了解

  • SQL语言发展过程
  • 关系数据库技术和关系数据库管理系统RDBMS产品的发展过程

掌握

  • SQL语言的特点和优点
  • 面向过程的语言和SQL语言的区别
  • 关系数据库系统为数据库应用系统的开发提供良好环境,减轻了用户负担,提高用户生产率的原因
  • 用SQL语言完成对数据库的增删改查,特别是各种查询

知识点

  • SQL的特点

    • 综合统一。SQL语言集数据定义语言DDL、数据操纵语言DML、数据控制语言DCL的功能于一体
    • 高度非过程化。用 SQL 语言进行数据操作, 只要提出 “做什么”,而无需指明 “怎么做”,因此无需了解存取路径,存取路径的选择以及 SQL 语句的操作过程由系统自动完成。
    • 面向集合的操作方式。 SQL 语言采用集合操作方式,不仅操作对象、查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。
    • 以同一种语法结构提供两种使用方式。 sQL 语言既是自含式语言,又是嵌入式语言。作为自含式语言, 它能够独立地用于联机交互的使用方式; 作为嵌入式语言, 它能够嵌入到高级语言程序中,供程序员设计程序时使用。
    • 语言简捷,易学易用。

    在DROP TABLE时,RESTRICT和CASCADE的区别

    • RESTRICT表示表的删除是有限制条件的。要删除的基本表不能被其他表的约束所引用,不能有视图,不能有触发器,不能有存储过程或函数等。如果存在这些依赖该表的对象,则表不能被删除
    • CASCADE表示表的删除没有限制条件,在删除基本表的同时,相关的依赖对象(如视图)都将被删除

    有两个关系S(A,B,C,D)和T(C,D,E,F),写出与下列查询等价的SQL表达式

    • (1)SELECT * FROM S WHERE A=10
    • (2)SELECT DISTINCT A,B FROM S
    • (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 A,B,S.C,S.D,T.C,T.D,E,F FROM S,T WHERE S.C=T.C
    • (5)SLEECT A,B,S.C,S.D,T.C,T.D,E,F FROM S,T WHERE A<E
    • (6)SELECT S1.C,S1.D,T.C,T.D,E,F FROM T,(SELECT DISTINCT C,D FROM S) AS S1

    用SQL语句建立第2章习题6中的4个表,针对建立的4个表用SQL语言完成第2章习题6中的查询

    • 建S表 S(SNO,SNAME,STATUS,CITY);
      ​CREATE TABLE S(SNO CHAR(3).​ SNAME CHAR(10), STATUS CHAR(2), CITY CHAR(10)​​​)​;
    • 建P表 P(PNO,PNAME,COLOR,WEIGHT);
      CREATE TABLE P(PNO CHAR(3), PNAME CHAR(10), COLOR CHAR(4), WEIGHT INT​​​);​
    • 建J表 J(JNO,JNAME,CITY);
      CREATE TABLE J(JNO CHAR(3), JNAME CHAR(10),CITY CHAR(10)​​);​
    • 建SPJ表 SPJ(SNO,PNO,JNO,QTY);
      CREATE TABLE SPJ(SNO CHAR(3), PNO CHAR(3),JNO CHAR(3), QTY INT​​​);​
    • 求供应工程J1零件的供应商号码SNO
      SELECT SNO​FROM SPJWHERE JNO='J1';​
    • 求供应工程J1零件P1的供应商号码SNO
      SELECT SNOFROM SPJWHERE JNO='J1' AND PNO='P1';​​
    • 求供应工程J1零件为红色的供应商号码SNO
      SELECT SNOFROM SPJWHERE JNO='J1' AND PNO IN (SELECT PNO FROM P WHERE COLCO=‘红’​​);或SELECT SNOFROM SPJ,PWHERE JNO='J1' AND SPJ.PNO=P.PNO AND COLOR='红';​​​​​​​​​
    • 求没有使用天津供应商生产的红色零件的工程号JNO
      SELECT JNOFROM JWHERE NOT EXISTS (SELECT * ​FROM SPJ WHERE SPJ.JNO=J.JNO AND SNO IN (SELECT SNO FROM S WHERE CITY='天津'​​) AND​ PNO IN (SELECT PNO FROM P WHERE COLOR='红'​​)​​​​);​​​或SELECT JNOFROM JWHERE NOT EXISTS (SELECT * FROM SPJ,S,P WHERE SPJ.JNO=J.JNO AND SPJ.SNO=S.SNO AND SPJ.PNO=P.PNO AND S.CITY='天津' AND P.COLOR='红'​​​);​​​​​
    • 求至少用了供应商S1所供应的全部零件的工程号JNO
      SELECT DISTINCT JNOFROM SPJ SPJZWHERE NOT EXISTS (SELECT * ​FROM SPJ SPJX WHERE SNO='S1'​ AND NOT EXISTS​ (SELECT * FROM SPJ SPJY WHERE SPJY.PNO=SPJX.PNO AND SPJY.JNO=SPJZ.JNO​​​)​);​​​

    针对习题3中的4个表,用SQL语言完成以下各项操作

    • 找出所有供应商的姓名和所在城市。
      SELECT SNAME,CITY ​FROM S;
    • 找出所有零件的名称、颜色、重量。
      SELECT PNAME,COLOR,WEIGHT ​FROM P;
    • 找出使用供应商 S1 所供应零件的工程号码。
      SELECT DIST JNO ​FROM SPJ ​WHERE SNO='S1';
    • 找出工程项目 J2 使用的各种零件的名称及其数量。
      SELECT P.PNAME,SPJ.QTY ​FROM P,SPJWHERE P.PNO=SPJ.PNO ​AND SPJ.JNO='J2';​
    • 找出上海厂商供应的所有零件号码。
      SELECT DISTINCT PNO ​FROM SPJ​WHERE SNO IN (SELECT SNO FROM S WHERE CITY='上海'​​);​
    • 找出使用上海产的零件的工程名称。
      SELECT JNAME ​FROM SPJ,S,JWHERE S.SNO=SPJ.SNO AND S.CITY=' 上海 ' AND J.JNO=SPJ.JNO或​SELECT JNAME    FROM J    WHERE JNO IN    (SELECT JNO    FROM SPJ, S    WHERE SPJ. SNO=S.SNO    AND S.CITY='上海');
    • 找出没有使用天津产的零件的工程号码。
      SELECT JNO FROM J WHERE NOT EXISTS    (SELECT *    FROM SPJ    WHERE SPJ.JNO=J.JNO AND SNO IN    (SELECT SNO    FROM S    WHERE CITY=‘天津’)); 或 SELECT JNO FROM J WHERE NOT EXISTS    (SELECT *1    FROM SPJ, S    WHERE SPJ.JNO=J.JNO AND SPJ.SNO=S.SNO AND ​S.CITY=‘天津’);​
    • 把全部红色零件的颜色改成蓝色。
      UPDATE P SET COLOR='蓝' WHERE COLOR='红' ; ​
    • 由S5供给J4的零件P6改为由S3供应,请作必要的修改。
      UPDATE SPJ SET SNO='S3' WHERE SNO='S5' AND JNO='J4' AND PNO='P6'; ​
    • 从供应商关系中删除S2的记录,并从供应情况关系中删除相应的记录。
      DELETE FROM SPJ WHERE SNO='S2'; 或 DELETE FROM S WHERE SNO='S2'; ​注意删除顺序,应该先从SPJ表中删除供应商S2所供应零件的记录,然后从从S表中删除S2。
    • 请将 (S2,J6,P4,200) 插入供应情况关系。
      INSERT INTOSPJ(SNO, JNO, PNO, QTY) VALUES (S2,J6,P4,200); 或 INSERT INTO SPJ VALUES (S2,P4,J6,200);

    基本表、视图,两者的区别和联系

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

    视图的优点

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

    所有的视图是否都可以更新?为什么?

    • 不是。视图是不实际存储数据的虚表,因此对视图的更新,最终要转换为对基本表的更新。因为有些视图的更新不能唯一地有意义地转换成对相应基本表的更新,所以,并不是所有的视图都是可更新的。如《概论》3.5.1中的视图S_G(学生的学号及他的平均成绩)
      CREAT VIEW S_G(Sno,Gavg)AS SELECT Sno,AVG(Grade)FROM SCGROUP BY Sno;
    • 要修改平均成绩,必须修改各科成绩,而我们无法知道哪些课程成绩的变化导致了平均成绩的变化。

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

    • 基本表的行列子集视图一般是可更新的。如《概论》3.5.3中的例1。
    • 若视图的属性来自集函数、表达式,则该视图肯定是不可以更新的。如《概论》3.5.3中的S_G视图。

    综合题
    请为三建工程项目建立一个供应情况的视图,包括供应商代码(SNO)、零件代码(PNO)、供应数量(QTY)。针对该视图完成下列查询:(1)找出三建工程项目使用的各种零件代码及其数量。(2)找出供应商S1的供应情况。

    • 建视图
      CREATE VIEW V_SPJ ASSELECT SNO, PNO, QTYFROM SPJWHERE JNO=(SELECT JNOFROM JWHERE JNAME='三建');
    • 对该视图查询
      (1) 找出三建工程项目使用的各种零件代码及其数量。SELECT PNO, QTYFROM V_SPJ;(2) 找出供应商S1的供应情况。SELECT PNO, QTY FROM V_SPJWHERE SNO='S1';

补充

    • SQL是【非过程化】的语言,用户无须指定存取路径
    • 对表中数据进行删除的操作是【DELECT】
    • 数据库中建立索引的目的是为了【加快存取速度】
    • 视图是数据库系统三级模式中的【外模式】
    • 基本表和视图一样,都是关系
    • 可以使用SQL对基本表和视图进行操作
    • 可以从基本表或视图上定义视图,视图不仅可以从单个基本表导出,还可以从多个基本表导出
    • 视图不存储数据
    • SELECT子句中的目标列可以是表中的属性列,也可以是表达式
    • 使用ANY或ALL谓词时必须与比较运算符同时使用
    • SQL语言具有【数据定义】【数据查询】【数据操纵】【数据控制】的功能
    • SQL语句中用来消除重复的关键词是【DISTINCT】
    • 若一个视图是从单个基本表导出的,并且只是去掉了基本表的某些行和列,但保留了主码,这类视图称为【行列子集视图】
    • SQL语言的数据定义功能包括【模式定义】【表定义】【视图定义】【索引定义】
    • 在视图上不能完成的操作是【在视图上定义新的表】
    • CREATE、DROP、ALTER实现【数据定义】功能
    • 删除一个视图的命令是【DROP】
    • 删除表S的命令是【DROP TABLE S】
    • 在基本表S中增加一列CN(课程名),可用【ALTER TABLE S ADD (CN CHAR(8))】
    • 在基本表S中删除一个属性“年龄”,可用【ALTER TABLE S DROP Age】
    • 有关系S(S#,SNAME,SAGE),C(C#,CNAME),SC(S#,C#,GRADE)。其中S#是学生号,SNAME是学生姓名,SAGE是学生年龄, C#是课程号,CNAME是课程名称。要查询选修“ACCESS”课的年龄不小于20的全体学生姓名的SQL语句是SELECT SNAME FROM S,C,SC WHERE子句。这里的WHERE子句的内容是【S.S# = SC.S# and C.C# = SC.C# and SAGE>=20 and CNAME=‘ACCESS’】
    • 设关系数据库中一个表S的结构为S(SN,CN,grade),其中SN为学生名,CN为课程名,二者均为字符型;grade为成绩,数值型,取值范围0-100。若要把“张二的化学成绩80分”插入S中,则可用【INSERT INTO S VALUES(’张二’,’化学’,80)】
    • 设关系数据库中一个表S的结构为:S(SN,CN,grade),其中SN为学生名,CN为课程名,二者均为字符型;grade为成绩,数值型,取值范围0-100。若要更正王二的化学成绩为85分,则可用【UPDATE S SET grade=85 WHERE SN=’王二’ AND CN=’化学’】
    • 在SQL语言中,子查询是【嵌入到另一个查询语句之中的查询语句】
    • SQL是一种【关系数据库】语言
    • 有关系S(S#,SNAME,SEX),C(C#,CNAME),SC(S#,C#,GRADE)。其中S#是学生号,SNAME是学生姓名,SEX是性别, C#是课程号,CNAME是课程名称。要查询选修“数据库”课的全体男生姓名的SQL语句是SELECT SNAME FROM S,C,SC WHERE子句。这里的WHERE子句的内容是【A.S.S# = SC.S# and C.C# = SC.C# and SEX=’男’ and CNAME=’数据库’】
    • CREATE TABLE SC (S# CHAR(6) NOT NULL,C# CHAR(3) NOT NULL,SCORE INTEGER,NOTE CHAR(20));向SC表插入如下行时,【(’200823’,’101’,NULL,NULL)】行可以被插入
    • 假设学生关系S(S#,SNAME,SEX),课程关系C(C#,CNAME),学生选课关系SC(S#,C#,GRADE)。要查询选修“Computer”课的男生姓名,将涉及到关系【S,C,SC】
    • 【GRANT】不是数据定义语句
    • 相关子查询和不相关子查询
      • 在嵌套查询中,如果子查询的查询条件不依赖于父查询,称为不相关子查询
      • 如果子查询的查询条件依赖于父查询,称为相关子查询
    • ANY和ALL谓词与聚集函数或IN谓词可能存在的等价转换关系
    • 综合题
      • 关系R包含A、B、C三个属性,包含的数据如下

      • 写出对查询语句SELECT * FROM R WHERE X;当X为下列条件时的查询结果
        • A IS NULL
          空的结果集
        • A>8 AND B<20
          空的结果集
        • A>10 OR B<20
        • C+10>25
        • EXISTS(SELECT B FROM R WHERE A=10)
        • C IN (SELECT B FROM R)
          空的结果集

第3章 关系数据库标准语言SQL(重点) | 数据库知识点整理的更多相关文章

  1. 第3章:关系数据库标准语言 SQL

    目录 第3章:关系数据库标准语言 SQL 3.1.SQL概述 3.1.1.历史 3.3.2.SQL语言的功能 3.3.3.SQL的特点 3.3.4.基本概念 3.2.学生-课程数据库 3.3.数据定义 ...

  2. 关系数据库标准语言SQL——概述

      SQL是一种介于关系代数与关系演算之间的结构化查询语言,其功能并不仅仅是查询.SQL是一个通用的.功能极强的关系数据库语言.SQL(Structured Query Language)结构化查询语 ...

  3. 第一章、关于SQL Server数据库的备份和还原(sp_addumpdevice、backup、Restore)

    在sql server数据库中,备份和还原都只能在服务器上进行,备份的数据文件在服务器上,还原的数据文件也只能在服务器上,当在非服务器的机器上启动sql server客户端的时候,也可以通过该客户端来 ...

  4. 第3章_关系数据库标准语言(SQL)_006_由元组关系演算到SQL Command_001_蕴含式 (其中有对EXISTS的分析)

    前序的链接:元组关系演算 六. 蕴含式 ===>1. 什么是“蕴含式”===>设p.q为两个命题.复合命题“如果p,则q”称为p与q的蕴含式,记作p→q,并称p为蕴含式的前件,q为后件.定 ...

  5. 数据库-第三章 关系数据库标准语言SQL-3.3 数据查询

    数据查询 例: 一.单表查询 1.定义 是指仅涉及一个表的查询 2.选择表中的若干列 查询指定列 例: 查询全部列 例: 查询经过计算的值 例: 3.选择表中的若干元组 消除取值重复的行 例: 查询满 ...

  6. 关系数据库标准语言SQL

    篇幅过长,恐惧者慎入!!!基础知识,大神请绕道!!! 本节要点: l  SQL概述 l  学生-课程关系 l  数据定义 基本表的定义.删除与修改 索引的建立与删除 l  查询 单表查询 连接查询 嵌 ...

  7. 3.1 关系数据库标准语言SQL综述

    一.SQL语言的特点 SQL结构查询语言 1.综合统一: 2.高度非过程化:不需要指定存储路径 3.面向集合的操作方式 4.以同一种语法提供两种使用方式:独立语言.嵌入式语言 5.语言简单,易学易用 ...

  8. 关系数据库标准语言SQL的基本问答

    1 .试述 sQL 语言的特点. 答: (l)综合统一. sQL 语言集数据定义语言 DDL .数据操纵语言 DML .数据控制语言 DCL 的功能于一体. (2)高度非过程化.用 sQL 语言进行数 ...

  9. 【数据库】一篇文章搞掂:SQL Server数据库

    问题: 1.同一段代码,在存储过程中运行比普通SQL执行速度慢几十倍 原理: 在SQL Server中有一个叫做 “Parameter sniffing”参数嗅探的特性.SQL Server在存储过程 ...

随机推荐

  1. Arduino系列之pwm控制LED灯(呼吸灯)

    下面我将写出最简单控制呼吸灯的方法 void setup()                                 // { pinMode(12,OUTPUT);             ...

  2. JavaScript(4)---BOM详解

    JavaScript(4)---BOM详解 之前写过一篇有关DOM的博客:JavaScript(2)---DOM详解 DOM有个顶级对象叫:document.同样BOM中也有顶级对象叫 window. ...

  3. FFMPEG学习----分离视频里的H.264与YUV数据

    #include <stdio.h> extern "C" { #include "libavcodec/avcodec.h" #include & ...

  4. codeforces 922 B. Magic Forest(枚举、位运算(异或))

    题目链接:点击打开链接 Imp is in a magic forest, where xorangles grow (wut?) A xorangle of order n is such a no ...

  5. Trie(字典树)的侃侃

    Trie是什么 ? 字典树 : 见名知意(在树上进行查询). 跟字典相关的必定与查询有密切的关系, 查询就需要一定的媒介作为支撑,树就为这种查询提供支撑. Trie做什么 ? 实现字符串快速检索的多叉 ...

  6. CentOS使用Postfix发送邮件

    1)配置hosts映射 [root@mail ~]# ifconfig ens33 ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mt ...

  7. 最近很火的namebase羊毛, 手把手教你怎么薅

    闲话少说直接说步骤: 1. 羊毛 https://www.namebase.io/airdrop 要求条件: 1) 要有github账号 2) 2019年2月之前有16+个follower 3) 要有 ...

  8. web访问 FastDFS 方法思路

           由于余老师在 V4.05 以后的版本就把内置 HTTP服务去掉了,所以就算这篇你测试上传成功了,你也访问不了. 推荐大家结合 Nginx 使用 fastdfs-nginx-module ...

  9. Java8尽管很香,你想过升级到Java11吗?会踩那些坑?

    目前最新JDK 11,Oracle会一直维护到2026年. Java11的新特性 1.更新支持到Unicode 10编码 Unicode 10(version 10.0 of the Unicode ...

  10. 杭电-------2047阿牛的eof牛肉串(C语言写)

    /* 主要看最后一个是否为O,若为O,则倒数第二个不能为O,则为a[n-2]*1*2; 若不为O,则最后一个有两个选择则为a[n-1]*2 */ #include<stdio.h> ] = ...