MySQL作业

目录

1.实验需求1:

(1)

(2)

(3)

(4)

(5)

2.实验步骤1:

(1)完成上述实验需求1,需要先创建一个db_sch数据库并且使用数据库。

(1.1)然后创建一个表:

[(1.2) 在表中插入数据:](#(1.2) 在表中插入数据:)

(1.3)最后完成上述图片问题

(2)创建的数据库和使用的数据库和上述(1)一样

(2.1)然后创建一个表:

(2.2)在表中插入数据:

(2.3)最后完成上述图片问题

(3)创建的数据库和使用的数据库和上述(1)一样

(3.1)然后创建一个表:

(3.2)在表中插入数据:

(3.3)最后完成上述图片问题

(4)创建的数据库和使用的数据库和上述(1)一样

(4.1)然后创建一个表:

(4.2)在表中插入数据:

(4.3)最后完成上述图片问题

(5)创建的数据库和使用的数据库和上述(1)一样

(5.1)然后创建一个表:

(5.2)在表中插入数据:

(5.3)最后完成上述图片问题

3.实验需求2:

4.实验步骤2:

1.完成上述实验需求2,需要先创建一个db_sch数据库并且使用数据库。

2.然后创建一个数据表:

3.在表中插入数据:

4.最后完成上述的问题

[(1)创建一个可以统计表格内记录条数的存储函数 ,函数名为count_sch()](#(1)创建一个可以统计表格内记录条数的存储函数 ,函数名为count_sch())

(2)创建一个存储过程avg_sai,有3个参数,分别是deptno,job,接收平均工资,功能查询emp表dept为30,job为销售员的平均工资


1.实验需求1:

(1)

(2)

(3)

(4)

(5)

2.实验步骤1:

(1)完成上述实验需求1,需要先创建一个db_sch数据库并且使用数据库。

mysql> create database db_sch default charset=utf8mb4;

Query OK, 1 row affected (0.01 sec)

mysql> use db_sch;

Database changed

(1.1)然后创建一个表:

mysql> CREATE TABLE tb_user_log (

-> id INT PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',

-> uid INT NOT NULL COMMENT '用户ID',

-> article_id INT NOT NULL COMMENT '视频ID',

-> in_time datetime COMMENT '进入时间',

-> out_time datetime COMMENT '离开时间',

-> sign_in TINYINT DEFAULT 0 COMMENT '是否签到'

-> ) CHARACTER SET utf8 COLLATE utf8_bin;

Query OK, 0 rows affected, 2 warnings (0.01 sec)

(1.2) 在表中插入数据:

mysql> INSERT INTO tb_user_log(uid, article_id, in_time, out_time, sign_in)

-> VALUES

-> (101,0,'2021-11-01 10:00:00', '2021-11-01 10:00:42',1),

-> (102,9001,'2021-11-01 10:00:00', '2021-11-01 10:00:09',0),

-> (103,9001,'2021-11-01 10:00:01', '2021-11-01 10:01:50',0),

-> (101,9002,'2021-11-02 10:00:09', '2021-11-02 10:00:28',0),

-> (103,9002,'2021-11-02 10:00:51', '2021-11-02 10:00:59',0),

-> (104,9001,'2021-11-02 11:00:28', '2021-11-02 10:00:50',0),

-> (101,9003,'2021-11-03 11:00:55', '2021-11-03 11:01:24',0),

-> (104,9003,'2021-11-03 11:00:45', '2021-11-03 11:00:55',0),

-> (105,9003,'2021-11-03 11:00:53', '2021-11-03 11:00:59',0),

-> (101,9002,'2021-11-04 11:00:55', '2021-11-04 11:00:59',0);

Query OK, 10 rows affected (0.00 sec)

Records: 10 Duplicates: 0 Warnings: 0

(1.3)最后完成上述图片问题

mysql> SELECT

-> first_days.first_day AS '日期',

-> CONCAT(ROUND(COUNT(DISTINCT second_days.uid) / COUNT(DISTINCT first_days.uid) * 100, 2), '%') AS '次日留存率'

-> FROM (

-> SELECT

-> uid,

-> MIN(DATE(in_time)) AS first_day

-> FROM tb_user_log

-> WHERE DATE(in_time) BETWEEN '2021-11-01' AND '2021-11-30'

-> GROUP BY uid

-> ) AS first_days

-> LEFT JOIN tb_user_log AS second_days ON first_days.uid = second_days.uid

-> AND DATE(second_days.in_time) = DATE_ADD(first_days.first_day, INTERVAL 1 DAY)

-> GROUP BY first_days.first_day

-> ORDER BY first_days.first_day;

(2)创建的数据库和使用的数据库和上述(1)一样

(2.1)然后创建一个表:

mysql> DROP TABLE IF EXISTS `Orderltems`;

Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> CREATE TABLE IF NOT EXISTS `Orderltems`(

-> prod_id VARCHAR(255) NOT NULL COMMENT '商品号',

-> order_num VARCHAR(255) NOT NULL COMMENT '商品订单号',

-> quantity INT(255) NOT NULL COMMENT '商品数量'

-> );

Query OK, 0 rows affected, 1 warning (0.00 sec)

(2.2)在表中插入数据:

mysql> INSERT `Orderltems` VALUES('BRO1','a1','105'),('BRO2','a2','1100'),

-> ('BR02','a2','200'),('BR03','a4','1121'),('BR017','a5','10'),('BR02','a2','19'),

-> ('BR017','a','75');

Query OK, 7 rows affected (0.00 sec)

Records: 7 Duplicates: 0 Warnings: 0

(2.3)最后完成上述图片问题

mysql> SELECT order_num, prod_id, quantity

-> FROM Orderltems

-> WHERE prod_id IN ('BRO1', 'BR02', 'BRO3') AND quantity >= 100;

(3)创建的数据库和使用的数据库和上述(1)一样

(3.1)然后创建一个表:

mysql> CREATE TABLE IF NOT EXISTS `Products`(

-> `prod_id` VARCHAR(255) NOT NULL COMMENT '产品ID',

-> `prod_name` VARCHAR(255) NOT NULL COMMENT '产品名称'

-> );

Query OK, 0 rows affected (0.01 sec)

mysql> DROP TABLE IF EXISTS `Orderltems`;

Query OK, 0 rows affected (0.01 sec)

mysql> CREATE TABLE IF NOT EXISTS `Orderltems`(

-> prod_id VARCHAR(255) NOT NULL COMMENT '产品id',

-> quantity INT(16) NOT NULL COMMENT '商品数量'

-> );

Query OK, 0 rows affected, 1 warning (0.01 sec)

(3.2)在表中插入数据:

mysql> INSERT INTO `Products` VALUES ('a0001','egg'),

-> ('a0002','sockets'),

-> ('a0013','coffee'),

-> ('a0003','cola');

Query OK, 4 rows affected (0.00 sec)

Records: 4 Duplicates: 0 Warnings: 0

mysql> INSERT `Orderltems` VALUES ('a0001',105),('a0002',1100),('a0002',200),

-> ('a0013',1121),('a0003',10),('a0003',19),('a0003',5);

Query OK, 7 rows affected (0.00 sec)

Records: 7 Duplicates: 0 Warnings: 0

(3.3)最后完成上述图片问题

mysql> SELECT

-> p.prod_name,

-> COALESCE(SUM(o.quantity), 0) AS quant_sold

-> FROM

-> Products p

-> LEFT JOIN

-> Orderltems o ON p.prod_id = o.prod_id

-> GROUP BY

-> p.prod_name, p.prod_id;

(4)创建的数据库和使用的数据库和上述(1)一样

(4.1)然后创建一个表:

mysql> DROP TABLE IF EXISTS `Customers`;

Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> CREATE TABLE IF NOT EXISTS `Customers`(

-> cust_id VARCHAR(255) NOT NULL COMMENT '客户id',

-> cust_name VARCHAR(255) NOT NULL COMMENT '客户姓名'

-> );

Query OK, 0 rows affected (0.01 sec)

mysql> DROP TABLE IF EXISTS `Orders`;

Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> CREATE TABLE IF NOT EXISTS `Orders`(

-> order_num VARCHAR(255) NOT NULL COMMENT '商品单号',

-> cust_id VARCHAR(255) NOT NULL COMMENT '顾客id'

-> );

Query OK, 0 rows affected (0.01 sec)

(4.2)在表中插入数据:

mysql> INSERT `Customers` VALUES ('cust10','andy'),('cust1','ben'),

-> ('cust2' ,'tony'),('cust22','tom'),('cust221','an'),('cust2217','hex'),

-> ('cust40','ace');

Query OK, 7 rows affected (0.00 sec)

Records: 7 Duplicates: 0 Warnings: 0

mysql> INSERT `Orders` VALUES ('a1','cust10'),('a2','cust1'),('a3','cust2'),

-> ('a4','cust22'),('a5','cust221'),('a7','cust2217');

Query OK, 6 rows affected (0.01 sec)

Records: 6 Duplicates: 0 Warnings: 0

(4.3)最后完成上述图片问题

mysql> SELECT c.cust_name, o.order_num

-> FROM Customers c

-> LEFT JOIN Orders o ON c.cust_id = o.cust_id

-> ORDER BY c.cust_name ASC;

(5)创建的数据库和使用的数据库和上述(1)一样

(5.1)然后创建一个表:

mysql> DROP TABLE IF EXISTS tb_user_event;

Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> CREATE TABLE tb_user_event(

-> id INT PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',

-> uid INT NOT NULL COMMENT '用户ID',

-> product_id INT NOT NULL COMMENT '商品ID',

-> event_time datetime COMMENT '行为时间',

-> if_click TINYINT COMMENT '是否点击',

-> if_cart TINYINT COMMENT '是否加购物车',

-> if_payment TINYINT COMMENT '是否付款',

-> if_refund TINYINT COMMENT '是否退货退款'

-> ) CHARACTER SET utf8 COLLATE utf8_bin;

Query OK, 0 rows affected, 2 warnings (0.01 sec)

(5.2)在表中插入数据:

mysql> INSERT INTO tb_user_event(uid, product_id, event_time, if_click,

-> if_cart,if_payment, if_refund) VALUES

-> (101,8001,'2021-10-01 10:00:00',0,0,0,0),

-> (102,8001,'2021-10-01 10:00:00',1,0,0,0),

-> (103,8001,'2021-10-01 10:00:00',1,1,0,0),

-> (104,8001,'2021-10-02 10:00:00',1,1,1,0),

-> (105,8001,'2021-10-02 10:00:00',1,1,1,0),

-> (101,8002,'2021-10-03 10:00:00',1,1,1,0),

-> (109,8001,'2021-10-04 10:00:01',1,1,1,1);

Query OK, 7 rows affected (0.01 sec)

Records: 7 Duplicates: 0 Warnings: 0

(5.3)最后完成上述图片问题

mysql> SELECT

-> product_id,

-> COUNT(*) AS total_events,

-> SUM(if_click) AS total_clicks,

-> SUM(if_cart) AS total_adds_to_cart,

-> SUM(if_payment) AS total_payments,

-> SUM(if_refund) AS total_refunds

-> FROM

-> tb_user_event

-> WHERE

-> event_time BETWEEN '2021-10-01' AND '2021-10-31'

-> GROUP BY

-> product_id

-> HAVING

-> total_refunds <= total_events / 2;

3.实验需求2:

创建表并插入数据:

字段名 数据类型 主键 外键 非空 唯一 自增

id INT 是 否 是 是 否

name VARCHAR(50) 否 否 是 否 否

glass VARCHAR(50) 否 否 是 否 否

sch 表内容

id name glass

1 xiaommg glass 1

2 xiaojun glass 2

1、创建一个可以统计表格内记录条数的存储函数 ,函数名为count_sch()

2、创建一个存储过程avg_sai,有3个参数,分别是deptno,job,接收平均工资,功能查询emp表dept为30,job为销售员的平均工资

4.实验步骤2:

1.完成上述实验需求2,需要先创建一个db_sch数据库并且使用数据库。

mysql> create database db_sch default charset=utf8mb4;

Query OK, 1 row affected (0.01 sec)

mysql> use db_sch;

Database changed

2.然后创建一个数据表:

mysql> create table sch(

-> id int primary key auto_increment,

-> name varchar(255) not null,

-> glass varchar(255) not null

-> );

Query OK, 0 rows affected (0.02 sec)

3.在表中插入数据:

mysql> insert into sch (name, glass) values

-> ('xiaommg', 'glass 1'),

-> ('xiaojun', 'glass 2');

Query OK, 2 rows affected (0.01 sec)

Records: 2 Duplicates: 0 Warnings: 0

4.最后完成上述的问题

(1)创建一个可以统计表格内记录条数的存储函数 ,函数名为count_sch()

mysql> create function count_sch() returns int begin declare i int default 0; select count(1) into i from sch; return i; end//

Query OK, 0 rows affected (0.01 sec)

注意:出现下面错误加入(mysql> SET GLOBAL log_bin_trust_function_creators = 1;)命令

ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)

(2)创建一个存储过程avg_sai,有3个参数,分别是deptno,job,接收平均工资,功能查询emp表dept为30,job为销售员的平均工资

mysql> delimiter !

mysql> create procedure avg_sal(in deptno int,in job varchar(50),out avg_salary decimal(10, 2))

-> BEGIN

-> select avg(salary) into avg_salary from employees where department_id = deptno and job_id = job;

-> END !

Query OK, 0 rows affected (0.01 sec)

相关推荐
Elastic 中国社区官方博客3 小时前
在 Elasticsearch 中使用 Mistral Chat completions 进行上下文工程
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
编程爱好者熊浪5 小时前
两次连接池泄露的BUG
java·数据库
南宫乘风6 小时前
基于 Flask + APScheduler + MySQL 的自动报表系统设计
python·mysql·flask
TDengine (老段)6 小时前
TDengine 字符串函数 CHAR 用户手册
java·大数据·数据库·物联网·时序数据库·tdengine·涛思数据
qq7422349847 小时前
Python操作数据库之pyodbc
开发语言·数据库·python
姚远Oracle ACE7 小时前
Oracle 如何计算 AWR 报告中的 Sessions 数量
数据库·oracle
Dxy12393102167 小时前
MySQL的SUBSTRING函数详解与应用
数据库·mysql
码力引擎8 小时前
【零基础学MySQL】第十二章:DCL详解
数据库·mysql·1024程序员节
杨云龙UP8 小时前
【MySQL迁移】MySQL数据库迁移实战(利用mysqldump从Windows 5.7迁至Linux 8.0)
linux·运维·数据库·mysql·mssql
l1t8 小时前
利用DeepSeek辅助修改luadbi-duckdb读取DuckDB decimal数据类型
c语言·数据库·单元测试·lua·duckdb