1.要求
2.作业代码
好的,这份“第一次作业”的核心内容是要求完成MySQL 8.0数据库的安装(在Windows环境下),创建数据库mydb6_product
,并在其中创建三张具有特定结构的表(employees
, orders
, invoices
)。下面是完成此任务所需的正确步骤和SQL语句:
推荐方式(之一): 使用官方 MySQL Installer 进行安装
mydb6_product
说明: 在安装好并成功启动 MySQL Server 后执行此操作。如何执行: 可以通过命令行客户端(如 mysql shell)或图形化工具(如 MySQL Workbench)执行。
SQL语句:
CREATE DATABASE mydb6_product;
USE mydb6_product; -- 执行此句后,后续创建表命令将在 mydb6_product 数据库中执行
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
表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)
。SHOW DATABASES;
命令,确保 mydb6_product
在列表中。USE mydb6_product;
切换到该数据库。SHOW TABLES;
命令,确认能看到 employees
, orders
, invoices
这三张表。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'); -- 修正中文括号和逗号
SELECT * FROM t_worker;
SELECT DISTINCT department_id FROM t_worker;
SELECT COUNT(*) AS total_workers FROM t_worker;
SELECT MAX(wages) AS max_wage, MIN(wages) AS min_wage FROM t_worker;
SELECT ROUND(AVG(wages), 2) AS avg_wage, SUM(wages) AS total_wage FROM t_worker;
CREATE TABLE work_date_table AS
SELECT worker_id, name, worker_date FROM t_worker;
SELECT name, TIMESTAMPDIFF(YEAR, birth_date, CURDATE()) AS age
FROM t_worker
WHERE politics = '党员';
SELECT name FROM t_worker
WHERE wages BETWEEN 4000 AND 8000;
SELECT name FROM t_worker
WHERE name LIKE '孙%' OR name LIKE '李%';
SELECT worker_id, name FROM t_worker
WHERE department_id IN (102, 103) AND politics <> '党员';
SELECT * FROM t_worker
ORDER BY birth_date; -- 升序(从早到晚)
-- ORDER BY birth_date DESC; -- 降序(从晚到早)
SELECT worker_id, name FROM t_worker
ORDER BY wages DESC LIMIT 3;
SELECT department_id, COUNT(*) AS party_members
FROM t_worker
WHERE politics = '党员'
GROUP BY department_id;
SELECT department_id,
ROUND(SUM(wages), 2) AS total_wage,
ROUND(AVG(wages), 2) AS avg_wage
FROM t_worker
GROUP BY department_id;
SELECT department_id, COUNT(*) AS total_workers
FROM t_worker
GROUP BY department_id
HAVING COUNT(*) >= 3;