数据库 - 作业题目 & 实验报告整理

数据库技术与应用 课程作业及答案

注意下:如果你不是电管专业的,那么你可能需要的并不是这个文档。这个文档是电管选修课“数据库技术与应用”的资料整理。其他专业的数据库似乎是英方课。

上面是习题,往下翻是实验报告。

习题及答案整理

简述数据库管理系统的主要功能

十一

背景习题 3.3.1 在上一题

十二

十三(上机实验三)

实验报告一 & 二

本机主机名与 IP 地址(作业要求)

指令 ipconfig -all 会查询到本机所有的网络状态。 本机的校园网连接信息为:

实验 1-1 在本机(WIndows)安装 MySQL Community 8.3

下载与安装

下载 MySQL Community Server 8.3 版本的 msi 安装包 我选择 Custom 安装模式,修改安装位置将 MySQL 安装到 F 盘下。 安装完成后允许打开 Configurator,把数据目录也配置到 F 盘下。 配置本机为开发用设备,设置端口号 3306, 配置用户。除了根用户外我额外配置了一个以我学号和姓名命名的 DB Admin 角色。 其他设置(服务等)保持默认。Configurator 自动开始初始化。 安装完成。

检查安装是否成功

通过命令行,以我的姓名学号用户身份连接该 MySQL 数据库: (上面那条报错是 PowerShell 不允许把当前目录下的 exe 以指令形式执行,忘了这茬事了)

连接正常,安装成功。

实验 1-2 在本机(Windows)安装 PostgreSQL

作业要求:

作业 1:上机安装一个 DBMS,建议使用 mySQL 或华为 openGauss

根据华为官网消息,OpenGauss 数据库内核为 PostgreSQL,而后者使用 BSD 开源,且社区相对更完善。本次实验选择安装 PostgreSQL 作为实验内容。

下载与安装

下载 Postgres for Windows 安装包。 把安装目录切到 F 盘

确认安装所有组件(之前我装过一次,PgAdmin 之类的还留在本机上) 数据目录也放 F 盘 为根用户设置密码,设置服务端口为 5432。 不配置本地化,直接一路默认 Next。开始安装。 安装完毕。

检查安装是否成功

pg 提供了一个 SQL Shell 供我们测试。

安装成功。

实验 1-3 在 Linux 云服务器(CentOS 7)上通过 Docker 部署运行 MariaDB

有一台 2h2g 的轻量云服务器,公网 IP 为 (censored)。实验在该机器上安装 MariaDB。 MariaDB 作为 MySQL 的一个分支,旨在规避 MySQL 被 Oracle 闭源的风险,保持了开源和社区驱动的特性,具有性能强大、稳定可靠的优点,支持更多存储引擎并拥有活跃的社区支持。而 Docker 作为轻量级的容器技术,可以将应用程序及其依赖项打包到一个可移植的容器中,实现快速部署、跨平台运行、隔离性和快速启动停止,适用于微服务架构和持续集成部署。是现代运维比较常用的一个方案。 查询可用的 Docker 镜像:

拉取 Docker Hub 社区镜像。

起容器。映射到 3306 上。

放开一下 3306 端口 检查下容器运行情况 容器运行正常,安装完毕。

检查是否安装成功

用 Navicat 点一下

连接没有问题。 检查一下 默认表存在。 安装成功。 (安全起见,这个容器在确认安装正常后就已经销毁了)

实验报告二

实验二要求将习题 2.4.1 中的数据存储到数据库中。该习题的数据如下。 实验一中安装了三种数据库,但是因为都是关系型数据库,所以操作上大体没有差别。本次实验使用 MySQL 操作。

实验 2-1 通过命令行 SQL 语句操作数据库

添加包含自己学号和姓名的表

系作业要求。编写 SQL 语句建表:

1
2
3
4
CREATE TABLE Students (
    StudentID BIGINT(10),
    Name NVARCHAR(10)
);

插入我的学号和姓名:

1
INSERT INTO Students (StudentID, Name) VALUES (123456789, 'censored');

建库建表,数据定义

首先建库建表。编写 SQL 语句如下: (题目中未指定主键,不创建 pk)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
-- 创建以学号姓名命名的数据库
CREATE DATABASE xxxx;
USE xxxx;

-- 创建Product表
CREATE TABLE Product (
    maker CHAR(1),
    model INT(4),
    type ENUM('laptop', 'pc', 'printer')
);

-- 创建PC表
CREATE TABLE PC (
    model INT(4),
    speed DECIMAL(4, 2),
    ram INT(4),
    hd INT(3),
    price INT(4)
);

-- 创建Laptop表
CREATE TABLE Laptop (
    model INT(4),
    speed DECIMAL(4, 2),
    ram INT(4),
    hd INT(3),
    screen DECIMAL(3, 1),
    price INT(4)
);

-- 创建Printer表
CREATE TABLE Printer (
    model INT(4),
    color BOOLEAN,
    type ENUM('ink-jet', 'laser'),
    price INT
);

执行建库建表:

插入数据

编写 SQL 语句用于插入数据。题目里的数据太多,对每个表都先插入前 15 条。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
INSERT INTO Product (maker, model, type) VALUES 
('A', 1001, 'pc'),
('A', 1002, 'pc'),
('A', 1003, 'pc'),
('A', 2004, 'laptop'),
('A', 2005, 'laptop'),
('A', 2006, 'laptop'),
('B', 1004, 'pc'),
('B', 1005, 'pc'),
('B', 1006, 'pc'),
('B', 2007, 'laptop'),
('C', 1007, 'pc'),
('D', 1008, 'pc'),
('D', 1009, 'pc'),
('D', 1010, 'pc'),
('D', 3004, 'printer');

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
INSERT INTO PC (model, speed, ram, hd, price) VALUES
(1001, 2.66, 1024, 250, 2114),
(1002, 2.10, 512, 250, 996),
(1003, 1.42, 512, 80, 478),
(1004, 2.80, 1024, 250, 649),
(1005, 3.20, 512, 250, 630),
(1006, 3.20, 1024, 320, 1049),
(1007, 2.20, 1024, 200, 510),
(1008, 2.20, 2048, 250, 770),
(1009, 2.00, 1024, 250, 650),
(1010, 2.80, 2048, 300, 770),
(1011, 1.86, 2048, 160, 959),
(1012, 2.80, 1024, 160, 649),
(1013, 3.06, 512, 80, 529);

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
INSERT INTO Laptop (model, speed, ram, hd, screen, price) VALUES
(2001, 2.00, 2048, 240, 20.1, 3673),
(2002, 1.73, 1024, 80, 17.0, 949),
(2003, 1.80, 512, 60, 15.4, 549),
(2004, 2.00, 512, 60, 13.3, 1150),
(2005, 2.16, 1024, 120, 17.0, 2500),
(2006, 2.00, 2048, 80, 15.4, 1700),
(2007, 1.83, 1024, 120, 13.3, 1429),
(2008, 1.60, 1024, 100, 15.4, 900),
(2009, 1.60, 512, 80, 14.1, 680),
(2010, 2.00, 2048, 160, 15.4, 2300);

1
2
3
4
5
6
7
8
INSERT INTO Printer (model, color, type, price) VALUES 
(3001, true, 'ink-jet', 99),
(3002, false, 'laser', 239),
(3003, true, 'laser', 899),
(3004, true, 'ink-jet', 120),
(3005, false, 'laser', 120),
(3006, true, 'ink-jet', 100),
(3007, true, 'laser', 200);

实验 2-2 使用 Navicat 查看数据库

连接到数据库: 查看数据库中的表: 可以看到数据已经成功插入。

实验报告三

实验设计背景

北邮人论坛是北京邮电大学的校园论坛,成立于 2003 年 9 月 26 日 ,由 seasir 和 chit 担任创始站长 ,并由北邮人团队负责维护和运营,是北邮学生、校友和教职工交流信息、分享经验、讨论问题的核心平台。现已经成为北邮校内最大的信息交流平台 ,在北邮及周边学校中拥有较为固定的使用人群,在高校论坛里十分火爆,人气颇高。论坛不仅是一个信息交流的平台,也是北邮人社交和文化生活的重要组成部分。

北邮人论坛

实验仿照北邮人论坛,设计一个简易版本的论坛雏形,用于完成基本的论坛职能。

数据关系设计

整体上来看,此业务可大致拆分为如下交互实体:

  • 用户,有如下属性:是否为管理员,真实姓名,论坛昵称,学号,用户名,密码,发过什么帖子,发过什么回复,注册时间。
  • 版块,有如下属性:版块名称,版块简介,版块管理员,版块下有帖子,一个帖子只能在一个版块下。一个版块可以有多个管理员,一个管理员也可以是多个版块的管理。
  • 帖子,有如下属性:帖子标题,帖子正文,楼主,帖子有什么回复。
  • 回复,有如下属性:回复发送者,回复的是什么帖子,回复内容。

当然北邮人论坛还有很多功能如点赞、首页推荐等,本次实验设计不涉及,只做一个最简化版本的实现。我们结合实际业务需求,可以设计出如下表关系:

用户(Users)

  • 属性:
    • UserID:用户唯一标识符,主键,自增。
    • IsAdmin:布尔值,表示用户是否为管理员。
    • RealName:用户的真实姓名。
    • Nickname:用户在论坛上的昵称。
    • StudentNumber:用户的学号,唯一。
    • Username:用户的用户名,唯一。
    • Password:用户的密码。
    • RegisterTime:用户的注册时间。
  • 关系:
    • 一个用户可以发多个帖子(Posts 表中 AuthorID 外键)。
    • 一个用户可以发多个回复(Replies 表中 AuthorID 外键)。

版块(Forums)

  • 属性:
    • ForumID:版块唯一标识符,主键,自增。
    • ForumName:版块名称。
    • ForumDescription:版块简介。
    • ForumAdminID:版块的管理员(可以在 ForumAdmins 表中定义多个管理员)。
  • 关系:
    • 一个版块可以包含多个帖子(Posts 表中 ForumID 外键)。
    • 一个版块可以由多个管理员管理(通过 ForumAdmins 表实现多对多关系)。

版块管理员(ForumAdmins)

  • 属性:
    • ForumAdminID:版块管理员关系的唯一标识符,主键,自增。
    • UserID:用户唯一标识符,外键,引用 Users 表中的 UserID
    • ForumID:版块唯一标识符,外键,引用 Forums 表中的 ForumID
  • 关系:
    • 一个管理员可以管理多个版块。
    • 一个版块可以有多个管理员。

帖子(Posts)

  • 属性:
    • PostID:帖子唯一标识符,主键,自增。
    • Title:帖子标题。
    • Content:帖子正文。
    • AuthorID:发帖人,外键,引用 Users 表中的 UserID
    • ForumID:所属版块,外键,引用 Forums 表中的 ForumID
    • PostTime:发帖时间。
  • 关系:
    • 一个帖子只能在一个版块下(通过 ForumID 外键)。
    • 一个帖子可以有多个回复(Replies 表中 PostID 外键)。

回复(Replies)

  • 属性:
    • ReplyID:回复唯一标识符,主键,自增。
    • Content:回复内容。
    • AuthorID:回复发送者,外键,引用 Users 表中的 UserID
    • PostID:回复的帖子,外键,引用 Posts 表中的 PostID
    • ReplyTime:回复时间。
  • 关系:
    • 一个回复只能对应一个帖子(通过 PostID 外键)。
    • 一个回复由一个用户发送(通过 AuthorID 外键)。

补充说明

  • 每个用户都有唯一的 UserIDStudentNumber,和 Username
  • 每个版块都有唯一的 ForumID
  • 每个帖子都有唯一的 PostID
  • 每个回复都有唯一的 ReplyID
  • 每个版块可以有多个管理员,通过中间表 ForumAdmins 实现。
  • 每个管理员可以管理多个版块,同样通过 ForumAdmins 表实现。

ER 图

此业务的 ER 图描述如下:

建表 SQL 语句

我们结合数据设计和各字段属性的域、存储长度等,可写出如下 SQL 建表语句:

建表设计

用户表(Users)

此表存储论坛用户的信息。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
CREATE TABLE Users (
    UserID INT PRIMARY KEY AUTO_INCREMENT,
    IsAdmin BOOLEAN NOT NULL,
    RealName VARCHAR(100) NOT NULL,
    Nickname VARCHAR(100) NOT NULL,
    StudentNumber VARCHAR(50) UNIQUE NOT NULL,
    Username VARCHAR(50) UNIQUE NOT NULL,
    Password VARCHAR(255) NOT NULL,
    RegisterTime DATETIME NOT NULL
);

版块表(Forums)

此表存储论坛的版块信息。

1
2
3
4
5
6
7
CREATE TABLE Forums (
    ForumID INT PRIMARY KEY AUTO_INCREMENT,
    ForumName VARCHAR(100) NOT NULL,
    ForumDescription TEXT,
    ForumAdminID INT,
    FOREIGN KEY (ForumAdminID) REFERENCES Users(UserID)
);

版块管理员表(ForumAdmins)

此表存储版块的管理员信息,一个版块可以有多个管理员,一个管理员也可以管理多个版块。

1
2
3
4
5
6
7
CREATE TABLE ForumAdmins (
    ForumAdminID INT AUTO_INCREMENT PRIMARY KEY,
    UserID INT NOT NULL,
    ForumID INT NOT NULL,
    FOREIGN KEY (UserID) REFERENCES Users(UserID),
    FOREIGN KEY (ForumID) REFERENCES Forums(ForumID)
);

帖子表(Posts)

此表存储论坛的帖子信息。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
CREATE TABLE Posts (
    PostID INT PRIMARY KEY AUTO_INCREMENT,
    Title VARCHAR(200) NOT NULL,
    Content TEXT NOT NULL,
    AuthorID INT NOT NULL,
    ForumID INT NOT NULL,
    PostTime DATETIME NOT NULL,
    FOREIGN KEY (AuthorID) REFERENCES Users(UserID),
    FOREIGN KEY (ForumID) REFERENCES Forums(ForumID)
);

回复表(Replies)

此表存储对帖子回复的信息。

1
2
3
4
5
6
7
8
9
CREATE TABLE Replies (
    ReplyID INT PRIMARY KEY AUTO_INCREMENT,
    Content TEXT NOT NULL,
    AuthorID INT NOT NULL,
    PostID INT NOT NULL,
    ReplyTime DATETIME NOT NULL,
    FOREIGN KEY (AuthorID) REFERENCES Users(UserID),
    FOREIGN KEY (PostID) REFERENCES Posts(PostID)
);

实践建库 & 建表

创建一个叫数据库课设论坛的数据库,用来做这次上机作业。

开始建表 建表完成。 用 Navicat 可视化看一下表结构: 建表成功,实验完成。

实验报告四

准备实验环境(建库建表,录入数据)

实验一没把数据录完,这里重新录入。

实验使用的数据来自习题 2.4.1。其数据模式如下:

Product(maker,model,type)
PC(model,speed,ram,hd,price)
Laptop(model,speed,ram,hd,screen,price)
Printer(model,color,type,price)

将题目数值录入电子化表格如下: (电子表格忽略了浮点数值的小数点后的尾部 0,通过 SQL 录入时不受此处影响)

makermodeltype
A1001pc
A1002pc
A1003pc
A2004laptop
A2005laptop
A2006laptop
B1004pc
B1005pc
B1006pc
B2007laptop
C1007pc
D1008pc
D1009pc
D1010pc
D3004printer
D3005printer
E1011pc
E1012pc
E1013pc
E2001laptop
E2002laptop
E2003laptop
E3001printer
E3002printer
E3003printer
F2008laptop
F2009laptop
G2010laptop
H3006printer
H3007printer
modelspeedramhdprice
10012.6610242502114
10022.1512250995
10031.4251280478
10042.81024250649
10053.2512250630
10063.21024321049
10072.21024200510
10082.22048250770
100921024250650
10102.82048300770
10111.862048160959
10122.81024160649
10133.0651280529
modelspeedramhdscreenprice
20012204824020.13673
20021.7310248017949
20031.85126015.4549
200425126013.31150
20052.161024120172500
2006220488015.41700
20071.83102412013.31429
20081.6102410015.4900
20091.65128014.1680
20102204816015.42300
modelcolortypeprice
3001TRUEint-jet99
3002FALSElaser239
3003TRUElaser899
3004TRUEint-jet120
3005FALSElaser120
3006TRUEint-jet100
3007TRUElaser200

编写 SQL 语句如下:

注意:设计时,将 price 项的 Domain 视作两位小数的浮点数,因为理论上钱可以精确到人民币分/美分等,不能排除后续插入的产品的价格不是浮点数。

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
-- 创建数据库
CREATE DATABASE IF NOT EXISTS DatabaseLabFour;
USE DatabaseLabFour;

-- 创建表Product
CREATE TABLE Product (
    maker VARCHAR(255),
    model INT PRIMARY KEY,
    type VARCHAR(255)
);

-- 插入数据到Product表
INSERT INTO Product (maker, model, type) VALUES
('A', 1001, 'pc'),
('A', 1002, 'pc'),
('A', 1003, 'pc'),
('A', 2004, 'laptop'),
('A', 2005, 'laptop'),
('A', 2006, 'laptop'),
('B', 1004, 'pc'),
('B', 1005, 'pc'),
('B', 1006, 'pc'),
('B', 2007, 'laptop'),
('C', 1007, 'pc'),
('D', 1008, 'pc'),
('D', 1009, 'pc'),
('D', 1010, 'pc'),
('D', 3004, 'printer'),
('D', 3005, 'printer'),
('E', 1011, 'pc'),
('E', 1012, 'pc'),
('E', 1013, 'pc'),
('E', 2001, 'laptop'),
('E', 2002, 'laptop'),
('E', 2003, 'laptop'),
('E', 3001, 'printer'),
('E', 3002, 'printer'),
('E', 3003, 'printer'),
('F', 2008, 'laptop'),
('F', 2009, 'laptop'),
('G', 2010, 'laptop'),
('H', 3006, 'printer'),
('H', 3007, 'printer');

-- 创建表PC
CREATE TABLE PC (
    model INT PRIMARY KEY,
    speed DECIMAL(4,2),
    ram INT,
    hd INT,
    price DECIMAL(10,2)
);

-- 插入数据到 PC 表
INSERT INTO PC (model, speed, ram, hd, price) VALUES
(1001, 2.66, 1024, 250, 2114),
(1002, 2.1, 512, 250, 995),
(1003, 1.42, 512, 80, 478),
(1004, 2.8, 1024, 250, 649),
(1005, 3.2, 512, 250, 630),
(1006, 3.2, 1024, 32, 1049),
(1007, 2.2, 1024, 200, 510),
(1008, 2.2, 2048, 250, 770),
(1009, 2.0, 1024, 250, 650),
(1010, 2.8, 2048, 300, 770),
(1011, 1.86, 2048, 160, 959),
(1012, 2.8, 1024, 160, 649),
(1013, 3.06, 512, 80, 529);

-- 创建表Laptop
CREATE TABLE Laptop (
    model INT PRIMARY KEY,
    speed DECIMAL(3,2),
    ram INT,
    hd INT,
    screen DECIMAL(4,1),
    price DECIMAL(10,2)
);

-- 插入数据到Laptop表
INSERT INTO Laptop (model, speed, ram, hd, screen, price) VALUES
(2001, 2.00, 2048, 240, 20.1, 3673.00),
(2002, 1.73, 1024, 80, 17.0, 949.00),
(2003, 1.80, 512, 60, 15.4, 549.00),
(2004, 2.00, 512, 60, 13.3, 1150.00),
(2005, 2.16, 1024, 120, 17.0, 2500.00),
(2006, 2.00, 2048, 80, 15.4, 1700.00),
(2007, 1.83, 1024, 120, 13.3, 1429.00),
(2008, 1.60, 1024, 100, 15.4, 900.00),
(2009, 1.60, 512, 80, 14.1, 680.00),
(2010, 2.00, 2048, 160, 15.4, 2300.00);

-- 创建表 Printer
CREATE TABLE Printer (
    model INT PRIMARY KEY,
    color BOOLEAN,
    type VARCHAR(50),
    price DECIMAL(10, 2)
);

-- 插入数据到 Printer 表
INSERT INTO Printer (model, color, type, price) VALUES
(3001, TRUE, 'int-jet', 99),
(3002, FALSE, 'laser', 239),
(3003, TRUE, 'laser', 899),
(3004, TRUE, 'int-jet', 120),
(3005, FALSE, 'laser', 120),
(3006, TRUE, 'int-jet', 100),
(3007, TRUE, 'laser', 200);

执行建库建表和数据插入: 数据插入成功。

习题 6.2.2 查询&查询结果

我们编写 SQL 语句如下。查询结果截图下附。

a) 查询硬盘容量至少 30G 的笔记本电脑制造商及该电脑的速度

1
2
3
4
SELECT Product.maker, Laptop.speed
FROM Product
JOIN Laptop ON Product.model = Laptop.model
WHERE Laptop.hd >= 30;

b) 查询制造商 B 生产的任意类型的所有产品的型号和价格

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
SELECT Product.model, PC.price
FROM Product
JOIN PC ON Product.model = PC.model
WHERE Product.maker = 'B'
UNION
SELECT Product.model, Laptop.price
FROM Product
JOIN Laptop ON Product.model = Laptop.model
WHERE Product.maker = 'B'
UNION
SELECT Product.model, Printer.price
FROM Product
JOIN Printer ON Product.model = Printer.model
WHERE Product.maker = 'B';

c) 查询只卖笔记本电脑不卖 PC 的厂商

1
2
3
4
5
6
7
SELECT DISTINCT maker
FROM Product
WHERE type = 'laptop' AND maker NOT IN (
    SELECT maker
    FROM Product
    WHERE type = 'pc'
);

d) 查询出现在两种或两种以上 PC 中的硬盘的大小

1
2
3
4
SELECT hd
FROM PC
GROUP BY hd
HAVING COUNT(DISTINCT model) >= 2;

e) 查询每对具有相同速度和 RAM 的 PC 的型号。每一对只能列出一次; 例如,若 (i,j) 已被列出,则 (j,i) 就不能再被列出。

1
2
3
SELECT p1.model AS model1, p2.model AS model2
FROM PC p1
JOIN PC p2 ON p1.speed = p2.speed AND p1.ram = p2.ram AND p1.model < p2.model;

习题 6.3.1 查询&查询结果

a) 找出速度在 3.0 以上的 PC 制造商

方法 1:使用 IN 操作符

1
2
3
4
5
6
7
SELECT DISTINCT maker
FROM Product
WHERE model IN (
    SELECT model
    FROM PC
    WHERE speed > 3.0
);

方法 2:使用 EXISTS 操作符

1
2
3
4
5
6
7
SELECT DISTINCT maker
FROM Product p
WHERE EXISTS (
    SELECT 1
    FROM PC pc
    WHERE pc.model = p.model AND pc.speed > 3.0
);

b) 找出价格最高的打印机

方法 1:使用 MAX 函数和子查询对比

1
2
3
SELECT model, price
FROM Printer
WHERE price = (SELECT MAX(price) FROM Printer);

方法 2:使用 ALL 操作符

1
2
3
SELECT model, price
FROM Printer p
WHERE price >= ALL (SELECT price FROM Printer);

【选作】习题 6.4.6 查询&查询结果

a) 查询 PC 的平均速度:

1
2
SELECT AVG(speed) AS avg_speed
FROM PC;

b) 查询价格高于 $1000 的笔记本电脑的平均速度:

1
2
3
SELECT AVG(speed) AS avg_speed
FROM Laptop
WHERE price > 1000;

c) 查询厂商“A”生产的 PC 的平均价格:

1
2
3
4
5
6
7
SELECT AVG(price) AS avg_price
FROM PC
WHERE model IN (
    SELECT model
    FROM Product
    WHERE maker = 'A' AND type = 'PC'
);

除非另有声明,本站所有内容以 CC BY-NC-SA 4.0 协议共享
最后更新于 Aug 06, 2024 00:00 UTC
使用 Hugo 构建
主题 StackJimmy 设计