首页 > 数据库 >开始预习数据库第四天下

开始预习数据库第四天下

时间:2024-06-18 22:55:32浏览次数:12  
标签:KC 数据库 航班号 预习 SC WHERE 第四 SELECT 出库

你怎么知道我马上要考的数据库(5)

开始时间 2024-06-18 20:21:58

结束时间 2024-06-18 22:43:55

前言:睡醒了

假设某大型航空公司数据库,其关系模式(下划线代表主码) 有:

航班表(航班号,起点, 终点, 机型,价格, 折扣)

乘客表(身份证号,姓名,性别,年龄, 会员等级)

订单表(航班号,身份证号,日期,座位号, 票价)

(说明: 订单表中的航班号是外码,引用航班表中航班号; 订单表中的身份证号是 外码, 引用乘客表中的身份证号。)

完成如下题目(每个题目限用一个 SQL 语句实现):   

1 、写出“订单表”的建表语句(数据类型自己定义,需符合实际意义) 。(3 分)

 1 CREATE TABLE 订单表 (
 2     航班号 VARCHAR(10),
 3     身份证号 CHAR(18),
 4     日期 DATE,
 5     座位号 INT,
 6     票价 DECIMAL(10, 2),
 7     PRIMARY KEY (航班号, 身份证号, 日期, 座位号),
 8     FOREIGN KEY (航班号) REFERENCES 航班表(航班号),
 9     FOREIGN KEY (身份证号) REFERENCES 乘客表(身份证号)
10 );

2、新开通一条石家庄至桂林的航线,机型是中型机,航班号为 CA1008,价格为 1260, 折扣为 0.8 ,将此纪录添加至航班表(2 分)

1 INSERT INTO 航班表 (航班号, 起点, 终点, 机型, 价格, 折扣) 
2 VALUES ('CA1008', '石家庄', '桂林', '中型机', 1260, 0.8);

3 、将机型为“737”的所有航班价格降低 5%。(2 分)

1 UPDATE 航班表
2 SET 价格 = 价格 * 0.95
3 WHERE 机型 = '737';

4 、删除年龄高于 80 岁的乘客记录。(2 分)

1 DELETE FROM 乘客表
2 WHERE 年龄 > 80;

5、查询航班表中航班号第 3 位为“1”的所有航班号、起点、终点和机型。(2 分)

SELECT 航班号, 起点, 终点, 机型
FROM 航班表
WHERE 航班号 LIKE '1___';

6 、查询 2022 年 1 月期间出行的所有白金会员的身份证号、姓名、起点、终点,输 出结果按日期升序排列。 (2 分)

1 SELECT 乘客表.身份证号, 乘客表.姓名, 航班表.起点, 航班表.终点
2 FROM 乘客表
3 JOIN 订单表 ON 乘客表.身份证号 = 订单表.身份证号
4 JOIN 航班表 ON 订单表.航班号 = 航班表.航班号
5 WHERE 乘客表.会员等级 = '白金' AND 订单表.日期 BETWEEN '2022-01-01' AND '2022-01-31'
6 ORDER BY 订单表.日期 ASC;

7、按会员等级统计乘客人数,结果按人数降序排序。(3 分)

1 SELECT 会员等级, COUNT(*) AS 人数
2 FROM 乘客表
3 GROUP BY 会员等级
4 ORDER BY 人数 DESC;

8 、创建视图view1,视图表示的数据为: 2022年5月1日从北京起飞的所有航班的乘 客信息,显示航班号、身份证号、姓名、终点。(3分)

1 CREATE VIEW view1 AS
2 SELECT 航班表.航班号, 订单表.身份证号, 乘客表.姓名, 航班表.终点
3 FROM 航班表
4 JOIN 订单表 ON 航班表.航班号 = 订单表.航班号
5 JOIN 乘客表 ON 订单表.身份证号 = 乘客表.身份证号
6 WHERE 航班表.起点 = '北京' AND 订单表.日期 = '2022-05-01';

9、创建带输入参数的存储过程proc_c,查询某乘客的航班记录, 列出航班号、日期、 起点、终点。(3分)

1 CREATE PROCEDURE proc_c(IN id CHAR(18))
2 BEGIN
3     SELECT 航班表.航班号, 订单表.日期, 航班表.起点, 航班表.终点
4     FROM 订单表
5     JOIN 航班表 ON 订单表.航班号 = 航班表.航班号
6     WHERE 订单表.身份证号 = id;
7 END;

10、创建触发器trig_p,使得删除航班表中的一条记录时,同时删除订单表中该航班 相应的订票记录。(3分)

1 CREATE TRIGGER trig_p AFTER DELETE ON 航班表
2 FOR EACH ROW
3 BEGIN
4     DELETE FROM 订单表 WHERE 订单表.航班号 = OLD.航班号;
5 END;

 

在某仓库管理系统中,有两个表:KC表和CKMX表, 其结构和部分数据如下: ;

表 1 、KC 表结构和数据

材料代码

材料名称

单位

单价

库存数量

01

计算机

5000

10

02

电视机

2000

20

 

 

 

 

 

表 2 、CKMX 表结构和数据

编号

材料代码

出库日期

出库数量

1

01

2009-10-10

4

2

01

2009-11-20

3

3

02

2009-11-20

5

 

 

 

 

其中, KC 表保存当前仓库库存材料的信息,CKMX 表存放库存材料的出库名细。(例

 

如, KC 表第一行表示该仓库中现有计算机 10 台。CKMX 表第二行表示 2009 年 11 月 20 日

从仓库中出库 3 台计算机。)

完成如下题目(每个题目限用一个 SQL 语句实现):

1 、写出创建 KC 表和 CKMX 表的 SQL 语句。(数据类型自己定义)。(3 分)

 1 CREATE TABLE KC (
 2     材料代码 CHAR(2),
 3     材料名称 VARCHAR(50),
 4     单位 VARCHAR(10),
 5     单价 DECIMAL(10, 2),
 6     库存数量 INT,
 7     PRIMARY KEY (材料代码)
 8 );
 9 
10 CREATE TABLE CKMX (
11     编号 INT PRIMARY KEY,
12     材料代码 CHAR(2),
13     出库日期 DATE,
14     出库数量 INT,
15     FOREIGN KEY (材料代码) REFERENCES KC(材料代码)
16 );

2 、向 KC 表中添加一条记录,材料代码:09,材料名称:打印机,单位:箱,单价:50,库存数量: 10(3 分)

1 INSERT INTO KC (材料代码, 材料名称, 单位, 单价, 库存数量)
2 VALUES ('09', '打印机', '箱', 50, 10);

3 、删除 CKMX 表中出库数量为空的记录。(3 分)

1 DELETE FROM CKMX WHERE 出库数量 IS NULL;

4 、查询“计算机”的出库总量。(3 分)

1 SELECT SUM(出库数量) AS 出库总量
2 FROM CKMX
3 WHERE 材料代码 = '01';

5、查询 KC 表所有材料的库存情况,并按库存数量从大到小排序。(3 分)

1 SELECT * FROM KC
2 ORDER BY 库存数量 DESC;

6 、从表 CKMX 中统计出各种材料的出库次数和出库总数量。(3 分)

1 SELECT 材料代码, COUNT(*) AS 出库次数, SUM(出库数量) AS 出库总数量
2 FROM CKMX
3 GROUP BY 材料代码;

7 、查询材料名称含“电”字, 单价大于 3000 的材料情况。(3 分)

SELECT * FROM KC
WHERE 材料名称 LIKE '%电%' AND 单价 > 3000;

8、创建视图 view_ 1 ,查询电视机的出库情况。(3 分)

1 CREATE VIEW view_1 AS
2 SELECT CKMX.编号, KC.材料名称, CKMX.出库日期, CKMX.出库数量
3 FROM CKMX
4 JOIN KC ON CKMX.材料代码 = KC.材料代码
5 WHERE KC.材料名称 = '电视机';

9 、创建带输入参数的存储过程 proc_c,根据输入参数查询指定材料代码的材料名称、单位、单价、出库日期、出库数量。(3 分)

1 CREATE PROCEDURE proc_c(IN 材料代码 CHAR(2))
2 BEGIN
3     SELECT KC.材料名称, KC.单位, KC.单价, CKMX.出库日期, CKMX.出库数量
4     FROM KC
5     JOIN CKMX ON KC.材料代码 = CKMX.材料代码
6     WHERE KC.材料代码 = 材料代码;
7 END;

10 、创建触发器 trig_p,使得插入 KC 表中的一条记录时, 默认单位为“台”。(3 分)

1 CREATE TRIGGER trig_p BEFORE INSERT ON KC
2 FOR EACH ROW
3 BEGIN
4     IF NEW.单位 IS NULL THEN
5         SET NEW.单位 = '台';
6     END IF;
7 END

 

假设教学管理系统数据库有3个基本表:

S( S# ,SNAME,AGE,SEX)

SC( S#,C#, CNAME)

C( C# ,CNAME,TEACHER)  

(说明:SC 基本表中的 S# 是外码,引用了 S 基本表的 S# ;SC 基本表中的 C# 是外码,引用了 C 基本表的 C# )

完成如下题目(每个题目限用一个SQL语句实现):

1) 写出SC表的建表语句(数据类型自己定义)。(3分)

1 CREATE TABLE SC (
2     S# CHAR(10),
3     C# CHAR(10),
4     PRIMARY KEY (S#, C#),
5     FOREIGN KEY (S#) REFERENCES S(S#),
6     FOREIGN KEY (C#) REFERENCES C(C#)
7 ); 

2) 检索‘LIU’老师所授课程的课程号和课程名。(3分)

1 SELECT C.C#, C.CNAME
2 FROM C
3 WHERE C.TEACHER = 'LIU';

3) 检索年龄大于23岁的男学生的学号和姓名。(3分)

1 SELECT S.S#, S.SNAME
2 FROM S
3 WHERE S.AGE > 23 AND S.SEX = '男';

4) 检索学号为‘S3’的学生所学课程的课程名与任课教师名。(3分)

1 SELECT C.CNAME, C.TEACHER
2 FROM SC
3 JOIN C ON SC.C# = C.C#
4 WHERE SC.S# = 'S3';

5) 检索至少选修‘LIU’老师所授课程中一门课的女学生姓名。(3分)

1 SELECT DISTINCT S.SNAME
2 FROM S
3 JOIN SC ON S.S# = SC.S#
4 JOIN C ON SC.C# = C.C#
5 WHERE S.SEX = '女' AND C.TEACHER = 'LIU';

6) 检索‘WANG’同学不学的课程的课程名。(3分)

1 SELECT C.CNAME
2 FROM C
3 LEFT JOIN SC ON C.C# = SC.C#
4 WHERE SC.S# IS NULL AND SC.S# != 'WANG';

7) 检索至少选修两门课的学生学号。(3分)

1 SELECT SC.S#
2 FROM SC
3 GROUP BY SC.S#
4 HAVING COUNT(SC.C#) >= 2;

8) 检索全部学生都选修的课程的课程号与课程名。(3分)

 1 SELECT C.C#, C.CNAME
 2 FROM C
 3 WHERE NOT EXISTS (
 4     SELECT S.S#
 5     FROM S
 6     WHERE NOT EXISTS (
 7         SELECT SC.S#
 8         FROM SC
 9         WHERE SC.C# = C.C# AND SC.S# = S.S#
10     )
11 );

9) 检索选修课程包含‘LIU’老师所授课程的学生学号。(3分)

1 SELECT SC.S#
2 FROM SC
3 JOIN C ON SC.C# = C.C#
4 WHERE C.TEACHER = 'LIU';

10) 用触发器实现删除学生,则删除该学生所选修的课程。(3分)

 3 CREATE TRIGGER DeleteStudent
 4 BEFORE DELETE ON S
 5 FOR EACH ROW
 6 BEGIN
 7     DELETE FROM SC WHERE SC.S# = OLD.S#;
 8 END

 

 总结:不学了

 

标签:KC,数据库,航班号,预习,SC,WHERE,第四,SELECT,出库
From: https://www.cnblogs.com/R-f-12/p/18255335

相关文章

  • 数据库基础操作学习记录(附代码讲解)
    首先是创建表格,可以用代码也可以直接用鼠标右键。然后就可以进行数据插入和主码设置,下面是设置主码。设置CPXSB表的客户编号为主码。接下来是这次的学习内容:    这个是用代码查找CPXSB表中前一千行的方法,其实可以直接用鼠标右键查看。SELECTTOP1000[产品编号......
  • 现代分布式数据库 数据分布方式 Round-Robin、Range、List 和 Hash
    现代分布式数据库中,常见的数据分布方式有如下几种:Round-Robin、Range、List和Hash。如下图所示: 数据分布|StarRockshttps://docs.starrocks.io/zh/docs/table_design/Data_distribution/StarRocks的数据分布方式​StarRocks支持单独和组合使用数据分布方式。说明除......
  • 数据库什么情况使用索引(附MYSQL示例)
    数据库什么情况使用索引1.提高查询性能频繁查询的列排序操作聚集操作2.支持快速数据查找唯一值查找范围查找3.联接操作外键列联接列4.覆盖索引5.全文搜索6.复合索引7.频繁更新的列8.空间索引9.哈希索引1.提高查询性能频繁查询的列假设有一个用户表us......
  • 数据库回表及优化方法(附示例)
    数据库回表及优化方法什么是数据库回表如何优化回表1.使用覆盖索引示例:2.减少查询列示例:3.适当增加索引示例:4.优化查询语句示例:示例:优化回表的具体案例原始查询及索引:优化后的索引:总结作为一个程序员,了解数据库回表(RowBackLookup)及其优化方法对优化数据......
  • 基于知识图谱和neo4j图数据库的电影推荐系统(2024版)
    首先下载neo4j图数据库https://neo4j.com/deployment-center/知识图谱相关概念:知识图谱是一种结构化的知识存储形式,它以图形数据库为基础,用来表示实体(如人、地点、事件等)之间的复杂关系。这种技术结合了自然语言处理、信息提取、数据挖掘、图论等多种技术,目的是使机器能......
  • 达梦数据库系列—3.表空间管理
    1管理表空间1.1创建表空间创建表空间时需要指定表空间名和其拥有的数据文件列表。CREATETABLESPACEbookshopDATAFILE'd:\book.dbf'SIZE32AUTOEXTENDONNEXT10MAXSIZE100;--AUTOEXTENDOFF|ON[NEXT<文件扩展大小>][MAXSIZE<文件限制大小>]若未指定文件扩展......
  • 授权控制-数据库用户分类、授权(GRANT)、收权(REVOKE)
    一、引言SQL语言的数据控制功能,体现在DBMS的授权机制上,目的是实现数据库的安全访问,确保只有授权用户才能访问数据库,所有未被授权的用户无法获取数据,如何利用SQL语言提供的授权(GRANT)语句和收权(REVOKE)语句来实现自主访问控制功能,这些功能大部分DBMS都支持二、自主访问控制......
  • Dbeaver执行外部SQL脚本文件创建数据库、建表导入数据等
    Dbeaver执行外部SQL脚本文件创建数据库、建表导入数据等点击项目浏览器右键点击选中,然后选择sql文件右键点击连接地址,选中【工具】,选中【创建新任务】填写信息,选中【执行SQL脚本】,然后【下一步】选中脚本文件点击确定选中数据库的连接地址,如果自动关联就无......
  • 代码随想录算法训练营第四十一天 | 0-1背包问题
    46.携带研究材料二维数组题目链接文章讲解视频讲解动态规划五部曲:dp[i][j]:下标i表示背包装0-i的物品(任取),j表示当前背包的最大容量,dp[i][j]表示容量为j时,装0-i的物品的最大价值递推公式:dp[i][j]=max(dp[i-1][j],dp[i-1][j-weight[i]]+value[i])dp[i-1][j]表示j......
  • 代码随想录第四十一天 | 59.斐波那契数列,70.爬楼梯,71.使用最小花费爬楼梯
     59.斐波那契数列看完想法:虽然是最简单的动态规划问题,但还是要按照五部曲来分析intfib(intn){if(n<=1)returnn;vector<int>dp(n+1);//用n+1的原因是,定义数组时这个意思是数组的长度,n+1的话最后一个就是dp[n]dp[0]=0;......