数据库第一次作业和第二次作业

1.要求

数据库第一次作业和第二次作业_第1张图片

2.作业代码

好的,这份“第一次作业”的核心内容是要求完成MySQL 8.0数据库的安装(在Windows环境下),创建数据库mydb6_product,并在其中创建三张具有特定结构的表(employees, orders, invoices)。下面是完成此任务所需的正确步骤和SQL语句:

核心任务分解与解决方案

任务1: 在Windows上安装MySQL 8.0

​推荐方式(之一):​​ 使用官方 MySQL Installer 进行安装

  • 简要步骤:​
    1. 访问 MySQL 官方网站 下载 MySQL Installer for Windows (选择适合你系统的版本,通常是mysql-installer-web-community-...msi)。
    2. 运行下载的安装程序。
    3. 选择安装类型。​​推荐选择 "Developer Default"​​ 以包含 MySQL Server、MySQL Workbench (图形化管理工具) 等常用组件。
    4. 按照安装向导的提示进行操作,主要包括:
      • 接受许可协议。
      • 检查依赖项(若有)。
      • 选择安装位置(默认即可)。
      • 设置 MySQL Server 的 root 用户密码。务必牢记此密码!
      • 配置服务启动方式(推荐 Windows Service 并设置自动启动)。
      • 应用配置。
    5. 完成安装。
    6. (可选)安装过程中选择了 MySQL Workbench,可以在开始菜单中找到并运行它,使用 root 账户测试连接服务器。

任务2: 创建数据库 mydb6_product

​说明:​​ 在安装好并成功启动 MySQL Server 后执行此操作。​​如何执行:​​ 可以通过命令行客户端(如 mysql shell)或图形化工具(如 MySQL Workbench)执行。

​SQL语句:​

CREATE DATABASE mydb6_product;
USE mydb6_product; -- 执行此句后,后续创建表命令将在 mydb6_product 数据库中执行

任务3: 在 mydb6_product 中创建指定的表

  • ​说明:​​ 需要严格按照图片中定义的列名、数据类型、约束来创建三张表。
创建 employees

​SQL语句:​

CREATE TABLE employees (
    id INT PRIMARY KEY,          -- 整型,主键
    name VARCHAR(50) NOT NULL,   -- 字符串(最大长度50),不能为空
    age INT,                     -- 整型
    gender VARCHAR(10) NOT NULL DEFAULT 'unknown', -- 字符串(最大长度10),不能为空,默认值'unknown'
    salary FLOAT                 -- 浮点型
);

创建 orders

​SQL语句:​

CREATE TABLE orders (
    id INT PRIMARY KEY,            -- 整型,主键
    name VARCHAR(100) NOT NULL,    -- 字符串(最大长度100),不能为空
    price FLOAT,                   -- 浮点型
    quantity INT,                  -- 整型
    category VARCHAR(50)           -- 字符串(最大长度50)
);

创建 invoices
  • ​SQL语句:
  •  CREATE TABLE invoices (
        number INT PRIMARY KEY AUTO_INCREMENT, -- 整型,主键自增长
        order_id INT,                    -- 整型
        in_date DATE,                    -- 日期型
        total_amount FLOAT CHECK (total_amount > 0), -- 浮点型,要求值大于0
        FOREIGN KEY (order_id) REFERENCES orders(id) -- 外键关联到 orders 表的 id 列
    );​
    • ​特别注意:​
      • number INT PRIMARY KEY AUTO_INCREMENT:确保使用 AUTO_INCREMENT 关键字实现主键自增长。
      • FOREIGN KEY (order_id) REFERENCES orders(id):明确定义 order_id 列是外键,引用 orders 表的 id 列。
      • CHECK (total_amount > 0):对 total_amount 列添加约束,确保其值大于 0。
      • 创建 invoices 表​​必须​​在创建 orders 表​​之后​​执行,因为需要引用 orders(id)

验证操作成功

  1. 使用 MySQL Workbench 或命令行连接到你的 MySQL 服务器。
  2. 执行 SHOW DATABASES; 命令,确保 mydb6_product 在列表中。
  3. 执行 USE mydb6_product; 切换到该数据库。
  4. 执行 SHOW TABLES; 命令,确认能看到 employees, orders, invoices 这三张表。
  5. (可选)执行 DESCRIBE employees;, DESCRIBE orders;, DESCRIBE invoices; 命令查看表结构是否与定义一致(注意检查外键约束和自增长属性)。

                                              第二次作业

1.要求:

2.作业代码:

一、建库建表​

CREATE DATABASE mydb8_worker;
USE mydb8_worker;

CREATE TABLE t_worker (
    department_id INT(11) NOT NULL COMMENT '部门号',
    worker_id INT(11) PRIMARY KEY NOT NULL COMMENT '职工号',
    worker_date DATE NOT NULL COMMENT '工作时间',
    wages FLOAT(8,2) NOT NULL COMMENT '工资',
    politics VARCHAR(10) NOT NULL DEFAULT '群众' COMMENT '政治面貌',
    name VARCHAR(20) NOT NULL COMMENT '姓名',
    birth_date DATE NOT NULL COMMENT '出生日期'  -- 修正字段名(borth_date → birth_date)
);

​二、插入数据​​(修正标点符号和语法错误)

INSERT INTO t_worker VALUES (101, 1001, '2015-05-04', 7500.00, '群众', '张春燕', '1990-07-01');
INSERT INTO t_worker VALUES (101, 1002, '2019-02-06', 5200.00, '团员', '李名博', '1997-02-08');  -- 修正日期格式
INSERT INTO t_worker VALUES (102, 1003, '2008-01-04', 10500.00, '党员', '王博涵', '1983-06-08');
INSERT INTO t_worker VALUES (102, 1004, '2016-10-10', 5500.00, '群众', '赵小军', '1994-09-05');
INSERT INTO t_worker VALUES (102, 1005, '2014-04-01', 8800.00, '党员', '钱有财', '1992-12-30');
INSERT INTO t_worker VALUES (103, 1006, '2019-05-05', 5500.00, '党员', '孙菲菲', '1996-09-02');  -- 修正中文括号和逗号

​三、查询语句实现​

1. 显示所有职工基本信息
SELECT * FROM t_worker;
2. 查询不重复的部门号
SELECT DISTINCT department_id FROM t_worker;
3. 职工总人数
SELECT COUNT(*) AS total_workers FROM t_worker;
4. 最高工资和最低工资
SELECT MAX(wages) AS max_wage, MIN(wages) AS min_wage FROM t_worker;
5. 平均工资和总工资
SELECT ROUND(AVG(wages), 2) AS avg_wage, SUM(wages) AS total_wage FROM t_worker;
6. 创建工作日期表(新表)
CREATE TABLE work_date_table AS
SELECT worker_id, name, worker_date FROM t_worker;
7. 显示党员的年龄(需计算年龄)
SELECT name, TIMESTAMPDIFF(YEAR, birth_date, CURDATE()) AS age 
FROM t_worker 
WHERE politics = '党员';
8. 工资在4000-8000的职工姓名
SELECT name FROM t_worker 
WHERE wages BETWEEN 4000 AND 8000;
9. 孙姓和李姓职工
SELECT name FROM t_worker 
WHERE name LIKE '孙%' OR name LIKE '李%';
10. 部门102/103的非党员职工
SELECT worker_id, name FROM t_worker 
WHERE department_id IN (102, 103) AND politics <> '党员';
11. 按出生日期排序
SELECT * FROM t_worker 
ORDER BY birth_date;  -- 升序(从早到晚)
-- ORDER BY birth_date DESC;  -- 降序(从晚到早)
12. 工资最高的前3名
SELECT worker_id, name FROM t_worker 
ORDER BY wages DESC LIMIT 3;
13. 各部门党员人数
SELECT department_id, COUNT(*) AS party_members 
FROM t_worker 
WHERE politics = '党员' 
GROUP BY department_id;
14. 部门工资总和与平均工资(保留2位小数)
SELECT department_id, 
       ROUND(SUM(wages), 2) AS total_wage, 
       ROUND(AVG(wages), 2) AS avg_wage 
FROM t_worker 
GROUP BY department_id;
15. 总人数≥3的部门号和人数
SELECT department_id, COUNT(*) AS total_workers 
FROM t_worker 
GROUP BY department_id 
HAVING COUNT(*) >= 3;

你可能感兴趣的:(数据库)