SQL题库:sqllearning3​—【未明学院】SQL课程作业

  • Post author:
  • Post category:其他


出处




【MySQL教程】SQL零基础教程,带你掌握最受企业欢迎的数据库语言!_哔哩哔哩_bilibili



https://www.bilibili.com/video/BV1PJ411m7Lz


准备工作


SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for cust_info
-- ----------------------------
DROP TABLE IF EXISTS `cust_info`;
CREATE TABLE `cust_info`  (
  `cust_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `cust_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `tel` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `email` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of cust_info
-- ----------------------------
INSERT INTO `cust_info` VALUES ('C00100101', '赵一', '13377770001', 'zhaoyi@gmail.com');
INSERT INTO `cust_info` VALUES ('C00100102', '赵二', '13377770002', 'zhaoer@gmail.com');
INSERT INTO `cust_info` VALUES ('C00100103', '赵三', '13377770003', 'zhaosan@gmail.com');
INSERT INTO `cust_info` VALUES ('C00100104', '钱大', '13377770004', 'qianda@gmail.com');
INSERT INTO `cust_info` VALUES ('C00100105', '钱二', '13377770005', 'qianer@gmail.com');
INSERT INTO `cust_info` VALUES ('C00100106', '钱三', '13377770006', 'qiansan@gmail.com');
INSERT INTO `cust_info` VALUES ('C00100107', '孙大', '13377770007', 'sunda@gmail.com');
INSERT INTO `cust_info` VALUES ('C00100108', '孙二', '13377770008', 'suner@gmail.com');
INSERT INTO `cust_info` VALUES ('C00100109', '孙三', '13377770009', 'sunsan@gmail.com');
INSERT INTO `cust_info` VALUES ('C00100110', '李一', '13377770010', 'liyi@gmail.com');
INSERT INTO `cust_info` VALUES ('C00100111', '李二', '13377770011', 'lier@gmail.com');
INSERT INTO `cust_info` VALUES ('C00100112', '李三', '13377770012', 'lisan@gmail.com');
INSERT INTO `cust_info` VALUES ('C00100113', '吴大', '13377770013', 'wuda@gmail.com');
INSERT INTO `cust_info` VALUES ('C00100114', '吴二', '13377770014', 'wuer@gmail.com');
INSERT INTO `cust_info` VALUES ('C00100115', '吴二', '13377770015', 'wuer@126.com');

-- ----------------------------
-- Table structure for milk_tea
-- ----------------------------
DROP TABLE IF EXISTS `milk_tea`;
CREATE TABLE `milk_tea`  (
  `prod_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `prod_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `net_w` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `pro_date` date NULL DEFAULT NULL,
  `valid_month` int(0) NULL DEFAULT NULL,
  `in_price` decimal(10, 2) NULL DEFAULT NULL,
  `sale_price` decimal(10, 2) NULL DEFAULT NULL,
  PRIMARY KEY (`prod_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of milk_tea
-- ----------------------------
INSERT INTO `milk_tea` VALUES ('1', '奶茶', '150g', '2018-09-11', 12, 10.80, 15.00);
INSERT INTO `milk_tea` VALUES ('2', '奶糖', '150g', '2019-05-13', 18, 12.30, 20.00);
INSERT INTO `milk_tea` VALUES ('3', '棒棒糖', '15g', '2019-04-29', 18, 2.10, 2.50);
INSERT INTO `milk_tea` VALUES ('4', '饼干', '200g', NULL, 12, 16.10, 23.00);
INSERT INTO `milk_tea` VALUES ('5', '薯片', '100g', '2018-08-27', 12, 9.30, 15.00);
INSERT INTO `milk_tea` VALUES ('6', '薯条', '100g', '2018-08-31', 12, 8.80, 15.00);
INSERT INTO `milk_tea` VALUES ('7', '火腿肠', '550g', '2019-02-04', 12, 15.50, NULL);
INSERT INTO `milk_tea` VALUES ('8', '方便面', '100g', '2018-12-09', 18, 3.60, 4.00);

-- ----------------------------
-- Table structure for order_list
-- ----------------------------
DROP TABLE IF EXISTS `order_list`;
CREATE TABLE `order_list`  (
  `serial_num` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `order_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `date` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `prod_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `prodname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `cust_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `cust_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `quantity` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of order_list
-- ----------------------------
INSERT INTO `order_list` VALUES ('00000001', '20190401001', '2019-04-01', '10001', '抽纸', 'C00100101', '赵一', '1');
INSERT INTO `order_list` VALUES ('00000002', '20190401001', '2019-04-01', '10002', '抽纸', 'C00100101', '赵一', '1');
INSERT INTO `order_list` VALUES ('00000003', '20190401002', '2019-04-01', '10003', '抽纸', 'C00100107', '孙大', '2');
INSERT INTO `order_list` VALUES ('00000004', '20190402001', '2019-04-02', '10004', '洗衣液', 'C00100114', '吴二', '1');
INSERT INTO `order_list` VALUES ('00000005', '20190402002', '2019-04-02', '10005', '洗衣液', 'C00100106', '钱三', '1');
INSERT INTO `order_list` VALUES ('00000006', '20190402002', '2019-04-02', '20001', '原味薯片', 'C00100106', '钱三', '3');
INSERT INTO `order_list` VALUES ('00000007', '20190402003', '2019-04-02', '20002', '黄瓜味薯片', 'C00100114', '吴二', '2');
INSERT INTO `order_list` VALUES ('00000008', '20190403001', '2019-04-03', '20003', '番茄味薯片', 'C00100109', '孙三', '2');
INSERT INTO `order_list` VALUES ('00000009', '20190403001', '2019-04-03', '20004', '原味瓜子', 'C00100109', '孙三', '2');
INSERT INTO `order_list` VALUES ('00000010', '20190404001', '2019-04-04', '20005', '奶油瓜子', 'C00100109', '孙三', '1');
INSERT INTO `order_list` VALUES ('00000011', '20190404002', '2019-04-04', '20006', '奶油瓜子', 'C00100111', '李二', '3');
INSERT INTO `order_list` VALUES ('00000012', '20190404002', '2019-04-04', '20007', '趣多多', 'C00100111', '李二', '3');
INSERT INTO `order_list` VALUES ('00000013', '20190404002', '2019-04-04', '30001', '可乐', 'C00100111', '李二', '5');
INSERT INTO `order_list` VALUES ('00000014', '20190405001', '2019-04-05', '30002', '可乐', 'C00100108', '孙二', '2');
INSERT INTO `order_list` VALUES ('00000015', '20190405002', '2019-04-05', '30003', '营养快线', 'C00100104', '钱大', '3');
INSERT INTO `order_list` VALUES ('00000016', '20190405003', '2019-04-05', '30004', '雪碧', 'C00100107', '孙大', '3');
INSERT INTO `order_list` VALUES ('00000017', '20190406001', '2019-04-06', '10001', '抽纸', 'C00100113', '吴大', '1');
INSERT INTO `order_list` VALUES ('00000018', '20190406001', '2019-04-06', '10002', '抽纸', 'C00100113', '吴大', '1');
INSERT INTO `order_list` VALUES ('00000019', '20190406002', '2019-04-06', '10003', '抽纸', 'C00100108', '孙二', '2');
INSERT INTO `order_list` VALUES ('00000020', '20190406002', '2019-04-06', '10004', '洗衣液', 'C00100108', '孙二', '2');
INSERT INTO `order_list` VALUES ('00000021', '20190406003', '2019-04-06', '10005', '洗衣液', 'C00100104', '钱大', '1');
INSERT INTO `order_list` VALUES ('00000022', '20190407001', '2019-04-07', '20001', '原味薯片', 'C00100106', '钱三', '2');
INSERT INTO `order_list` VALUES ('00000023', '20190407002', '2019-04-07', '20002', '黄瓜味薯片', 'C00100108', '孙二', '2');
INSERT INTO `order_list` VALUES ('00000024', '20190407003', '2019-04-07', '20003', '番茄味薯片', 'C00100107', '孙大', '2');
INSERT INTO `order_list` VALUES ('00000025', '20190409001', '2019-04-09', '20004', '原味瓜子', 'C00100115', '吴二', '3');
INSERT INTO `order_list` VALUES ('00000026', '20190410001', '2019-04-10', '20005', '奶油瓜子', 'C00100110', '李一', '1');
INSERT INTO `order_list` VALUES ('00000027', '20190410001', '2019-04-10', '20006', '奶油瓜子', 'C00100110', '李一', '1');
INSERT INTO `order_list` VALUES ('00000028', '20190410001', '2019-04-10', '20007', '趣多多', 'C00100110', '李一', '1');

-- ----------------------------
-- Table structure for pet
-- ----------------------------
DROP TABLE IF EXISTS `pet`;
CREATE TABLE `pet`  (
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `owner` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `species` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `sex` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `birth` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `death` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of pet
-- ----------------------------
INSERT INTO `pet` VALUES ('Bowser', 'Diane', 'dog', 'm', '1979-08-31', '1995-07-29');
INSERT INTO `pet` VALUES ('Buffy', 'Har_old', 'dog', 'f', '1989-05-13', '(Null)');
INSERT INTO `pet` VALUES ('Chirpy', 'Gw%enbird', 'cat', 'f', '1998-09-11', '(Null)');
INSERT INTO `pet` VALUES ('Claws', 'Gw%%en cat', 'dog', 'm', '1994-03-17', '(Null)');
INSERT INTO `pet` VALUES ('Fang', 'Benny', 'dog', 'm', '1990-08-27', '(Null)');
INSERT INTO `pet` VALUES ('Fluffy', 'Har_old', 'cat', 'f', '1993-02-04', '(Null)');

-- ----------------------------
-- Table structure for prod_info
-- ----------------------------
DROP TABLE IF EXISTS `prod_info`;
CREATE TABLE `prod_info`  (
  `prod_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `prod_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `brand` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `class` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `cost` decimal(10, 2) NULL DEFAULT NULL,
  `sale_price` decimal(10, 2) NULL DEFAULT NULL,
  `supplier_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of prod_info
-- ----------------------------
INSERT INTO `prod_info` VALUES ('10001', '抽纸', '洁柔', '120抽*8', '日用品', 20.11, 28.80, 'NJ0001');
INSERT INTO `prod_info` VALUES ('10002', '抽纸', '维达', '120抽*8', '日用品', 18.02, 25.50, 'NJ0002');
INSERT INTO `prod_info` VALUES ('10003', '抽纸', '洁云', '120抽*8', '日用品', 19.11, 26.80, 'SH0001');
INSERT INTO `prod_info` VALUES ('10004', '洗衣液', '蓝月亮', '2.5kg', '日用品', 33.43, 43.80, 'SH0002');
INSERT INTO `prod_info` VALUES ('10005', '洗衣液', '奥妙', '2.5kg', '日用品', 35.82, 49.90, 'SZ0001');
INSERT INTO `prod_info` VALUES ('20001', '原味薯片', '乐事', '80g', '零食', 11.11, 18.30, 'SZ0002');
INSERT INTO `prod_info` VALUES ('20002', '黄瓜味薯片', '乐事', '80g', '零食', 12.31, 18.80, 'NJ0001');
INSERT INTO `prod_info` VALUES ('20003', '番茄味薯片', '乐事', '80g', '零食', 12.31, 18.80, 'NJ0002');
INSERT INTO `prod_info` VALUES ('20004', '原味瓜子', '洽洽', '200g', '零食', 5.40, 8.80, 'SH0001');
INSERT INTO `prod_info` VALUES ('20005', '奶油瓜子', '洽洽', '100g', '零食', 5.80, 9.00, 'SH0002');
INSERT INTO `prod_info` VALUES ('20006', '奶油瓜子', '良品铺子', '200g', '零食', 5.80, 9.50, 'SZ0001');
INSERT INTO `prod_info` VALUES ('20007', '趣多多', '卡夫卡', '280g', '零食', 13.54, 18.60, 'SZ0002');
INSERT INTO `prod_info` VALUES ('30001', '可乐', '百事', '350ml', '饮料', 2.21, 3.50, 'NJ0001');
INSERT INTO `prod_info` VALUES ('30002', '可乐', '可口可乐', '350ml', '饮料', 2.18, 3.50, 'NJ0002');
INSERT INTO `prod_info` VALUES ('30003', '营养快线', '娃哈哈', '350ml', '饮料', 3.56, 4.80, 'SH0001');
INSERT INTO `prod_info` VALUES ('30004', '雪碧', '可口可乐', '350ml', '饮料', 2.31, 3.20, 'SH0002');

-- ----------------------------
-- Table structure for supplier_info
-- ----------------------------
DROP TABLE IF EXISTS `supplier_info`;
CREATE TABLE `supplier_info`  (
  `supplier_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `supplier_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `city` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `addr` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `tel` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of supplier_info
-- ----------------------------
INSERT INTO `supplier_info` VALUES ('NJ0001', '南京第一家供货商', '南京', '南京市光明大道001号', '1338888001');
INSERT INTO `supplier_info` VALUES ('NJ0002', '南京第二家供货商', '南京', '南京市光明大道002号', '1338888002');
INSERT INTO `supplier_info` VALUES ('SH0001', '上海第一家供货商', '上海', '上海市光明大道001号', '1558888001');
INSERT INTO `supplier_info` VALUES ('SH0002', '上海第二家供货商', '上海', '上海市光明大道002号', '1558888002');
INSERT INTO `supplier_info` VALUES ('SZ0001', '苏州第一家供货商', '苏州', '苏州市光明大道001号', '1998888001');
INSERT INTO `supplier_info` VALUES ('SZ0002', '苏州第二家供货商', '苏州', '苏州市光明大道002号', '1998888002');

SET FOREIGN_KEY_CHECKS = 1;

查看数据


练习

===================DAY1===================
Q1:简单说说关系型数据表和Excel表的异同。
同:都是二维表格式,都有行和列,行列交叉都是单元格,单元格内都储存数据。
异:关系型数据表不能合并单元格;关系型数据表的每一列都有明确的数据类型,不允许出现数据类型以外的数据。

Q2:列举几个这节课讲到的小tip或者注意事项。
1、访问关系型数据表的列,可以用<表名>.<列名>的方式
2、MySQL命令行,可以用PgUp调出之前输入过的命令
3、MySQL的语句都是用“;”结尾的
4、MySQL的语句是不区分大小写的,但是也制定了一些特有的书写规则

===================DAY2===================
Q1:将SQLData文件中的5个sheet都导入navicat中,并列举出相关注意事项。
1、Excel文件一定要是打开的
2、数据内容一定不能有特殊格式,比如加粗、比如框线
3、注意字段格式的设置,日期的格式、价格的格式、整数的格式
4、注意主键的设置,设置为第1列

Q2:总结第一节课在MySQL中演示的3条命令,以及第二节课上重点提到的1条命令,
   按照书写规则分别写出,并指出其关键字和操作对象。
1、SHOW DATABASES;
关键字: SHOW DATABASES
操作对象:无
2、CREATE DATABASE sqllearning;
关键字:CREATE DATABASE
操作对象: sqllearning
3、USE sqllearnig;
关键字: USE
操作对象: sqllearning
4、SELECT prod_name FROM prod_info;
关键字: SELECT ... FROM ...
操作对象: prod_name、 prod_info

Q3: SQL的语句类型有哪些?他们对应的操作对象分别是什么?
1、DDL:数据定义语言,操作对象是数据库、数据表
2、DML:数据操纵语言,操作对象是数据表中的数据(行、列)
3、DCL:数据控制语言,操作对象是数据库中的操作(特殊)



===================DAY3===================
Q1:写出单表查询的两个子句,并指出其关键字和操作对象。
1、子句1- SELECT [查询列]
关键字-SELECT
操作对象-查询的列
2、子句2-FROM[数据表]
关键字–FROM
操作对象–数据表


Q2:写出对 milk_tea 表的所有列查询语句,要求有至少三种写法。
SELECT * FROM milk_tea;

SELECT prod_id,prod_name,net_w,pro_date,valid_month,in_price,sale_price
FROM milk_tea;

SELECT milk_tea.prod_id,milk_tea.prod_name,milk_tea.net_w,milk_tea.pro_date,milk_tea.valid_month,milk_tea.in_price,milk_tea.sale_price
FROM milk_tea;

SELECT m.prod_id,m.prod_name,m.net_w,m.pro_date,m.valid_month,m.in_price,m.sale_price
FROM milk_tea AS m;

Q3: 从表 milk_tea 中查询出商品名称(prod_name)、采购价(in_price)、销售价
(sale_price)三个字段,同时增加以下几列并为其命名:
“9 折”(discount1),9 折后的销售价(new_sale1),9 折后的销售利润(new_profit1),
“110%”(discount2),上浮 10%后的销售价(new_sale2),上浮 10%后的销售利润
(new_profit2)。

SELECT prod_name
      ,in_price
			,sale_price
			,'9 折' AS discount1
			,ROUND(sale_price*0.9,2) AS new_sale1
			,ROUND(sale_price*0.9 - in_price,2) AS new_profit1
			,'110%' AS discount2
			,ROUND(sale_price*1.1,2) AS new_sale2
			,ROUND(sale_price*1.1 - in_price,2) AS new_profit2
FROM milk_tea;

===================DAY4===================
Q1:对 supplier_info 表中的信息进行拼接,分别达到如下效果。
1、查询所有供应商信息,展示结果要求为“xxx 供货商的地址为 xxxxxxx,联系电话为
xxxxxx。”,举例:“南京第一家供货商的地址为南京市光明大道 001 号,联系电话为
1338888001。”,并将该列命名为“供应商信息”。

SELECT CONCAT(supplier_name,'的地址为',addr,',联系电话为',tel) AS '供应商信息'
FROM supplier_info;

2、查询所有供应商信息,展示结果要求为“xxx 供货商 | (地址) |(电话)。”,举
例:“南京第一家供货商 | 南京市光明大道 001 号 | 1338888001”,并将该列命名为“供
应商信息”。(2 种方法)

SELECT CONCAT(supplier_name,'|',addr,'|',tel) AS '供应商信息'
FROM supplier_info;


SELECT CONCAT_WS('|',supplier_name,addr,tel) AS '供应商信息'
FROM supplier_info;


Q2:按要求进行排序操作。
1、对产品信息表中的产品采购价按升序排列
SELECT * FROM prod_info ORDER BY prod_info.cost;

2、对产品信息表中的产品销售价按降序排列
SELECT * FROM prod_info ORDER BY prod_info.sale_price DESC;

3、对产品信息表中的产品销售价按升序排列,同时对采购价按降序排列
SELECT * FROM prod_info ORDER BY prod_info.sale_price,prod_info.cost DESC;

Q3:按要求进行查询去重操作。
1、查询出所有有销售记录的产品。
SELECT DISTINCT order_list.prodname FROM order_list;

2、查询出所有购买商品的顾客姓名。
SELECT DISTINCT order_list.cust_name FROM order_list;

===================DAY5===================
Q1:写出过滤子句的结构(包括关键字和操作对象)以及该子句在整个语句中的位置。
结构:关键字- WHERE
操作对象–过滤条件
位置:在SELECT ... FROM ...子句之后,ORDER BY ...子句之前。

Q2:总结一下过滤子句(WHERE...)和排序子句(ORDER BY ...)的异同。
异:意义不同。过滤子句是对行数据进行过滤,排序子句是对行数据进行排序。
同:都是非必需子句;都不能单独使用;都必须在SELECT...FROM子句后面;过滤列
或者排序列都可以不在SELECT部分展示;

Q3:分别写出以下语句。
1、选出 milk_tea 表的所有列。
SELECT * FROM milk_tea;

2、选出 milk_tea 表的所有列,要求 sale_price 不为空。
SELECT * FROM milk_tea WHERE sale_price IS NOT NULL;

3、选出 milk_tea 表的所有列,并按 sale_price 列排序,sale_price 为空的话,按 10 处理。
SELECT * FROM milk_tea ORDER BY IFNULL(sale_price,10);

4、选出 milk_tea 表的所有列,要求 sale_price 上浮 10%后大于 16。sale_price 为空的话,默认设置为 20。
SELECT * FROM milk_tea WHERE IFNULL(sale_price,20)*1.1 > 16;

5、选出 milk_tea 表的产品列,要求利润(sale_price – in_price)大于 5。如果 sale_price为空的话,默认设置为 20。
SELECT * FROM milk_tea WHERE  IFNULL(sale_price,20)-in_price> 5;

6、对 5 的结果按照 sale_price 倒序排列。
SELECT * FROM milk_tea WHERE  IFNULL(sale_price,20)-in_price> 5 ORDER BY sale_price DESC;


===================DAY6===================
Q1:写出SQL语句中的通配符,及其用法。
1、下划线_:代表任意字符,且能代表的字符数仅为1.必须知道要代表的字符具体的位置。
2、百分号%:代表任意字符,且能代表的字符数为任意多个,包括0。

Q2:写出模糊查询的具体结构。
关键字(WHERE)+查询的列(字段名)+关键字(LIKE)+‘匹配文本’(含通配符)

Q3:写出以下语句。
1、从 milk_tea 表中找到产品名是‘薯’开头或者‘糖’结尾的。
SELECT * FROM milk_tea WHERE prod_name LIKE '薯%' OR prod_name LIKE '%糖';

2、从 milk_tea 表中找到产品名是‘薯’开头或者‘糖’结尾的,且产品名称只有 2 个字。
SELECT * FROM milk_tea WHERE prod_name LIKE '薯_' OR prod_name LIKE '_糖';

3、从 milk_tea 表中找到产品名是‘奶’开头并且‘茶’结尾的。
SELECT * FROM milk_tea WHERE prod_name LIKE '奶%茶';

4、从 milk_tea 表中找到销售价格不大于 10 的产品。(2 种写法)
SELECT * FROM milk_tea WHERE sale_price <10;

SELECT * FROM milk_tea WHERE NOT sale_price >=10; 


===================DAY7===================
Q1:总结课上讲到的几种数值型数据类型,并举例具体用法。示例:DEMICAL(5,2),表示
总长度5位,小数点后2位,比如123.12、2.12。
1、INTEGER:表示整数型,正负数都可以,一般就写作INTEGER,比如1,23,-14,100O
2、DECIMAL:定点型,表示小数位数确定的小数,一般要求写明数据宽度,参考
DECIMAL(5,2),表示总长度不超过5位,小数点后2位,比如123.12,2.12。
3、FLOAT:浮点型,表示小数位数不确定的小数,一般写作 FLOAT,比如1.12,1.123,
但是也可以明确标出长度和小数位数,此时写作 FLOAT(5,3),表示总长度不超过5位,
小数点后不超过3位,比如1.12,1.123。12.12。

Q2:总结课上讲到的几种文本型数据类型,并分析其使用场景。
1、CHAR:定长文本型。示例CHAR(10),表示字符总个数不超过10个,字符可以是英文、中文、数字或者特殊符号。如果不足10个,填充空格,比如'home'、'家春秋'。
2、VARCHAR:不定长文本型。示例VARCHAR(255),表示字符个数不超过255个。CHAR型会按照定义长度填充字符,因此分配空间是固定的,适用于长度固定的字符串,比
如手机号、身份证号,查找起来比较方法。但对于长度不固定的字符串,使用CHAR型会
存在空间浪费情况。
VARCHAR型按照具体字符动态分配空间,适用于长度不固定的字符串,对空间浪费少。


Q3:新建一个叫做 test_sjlx2 的表,表内有两列分别为 id_date(数据类型 date), id_char
(数据类型 varchar(255)),表内数据分别为 id_date 列是“当时的日期”,“当时日期的
后 1 天”,“当时日期的前 1 天”,“当时日期的后 1 个月”,id_char 列是“123”,“home”,
“家春秋”,“今天星期五”。 并用 CHAR_LENGTH 函数和 LENGTH 函数分别操作 id_char
列,得出结果,并分析异同。
CREATE TABLE test_sjlx2
(
id_date date,
id_char varchar(255)
);


SELECT CURRENT_DATE();
SELECT DATE_ADD(CURDATE(),INTERVAL 1 DAY);
SELECT DATE_SUB(CURDATE(),INTERVAL 1 DAY);
SELECT DATE_ADD(CURDATE(),INTERVAL 1 MONTH);

INSERT INTO test_sjlx2 VALUES('2021-12-05','123');
INSERT INTO test_sjlx2 VALUES('2021-12-06','home');
INSERT INTO test_sjlx2 VALUES('2021-12-05','家春秋');
INSERT INTO test_sjlx2 VALUES('2022-01-05','今天星期五');

SELECT id_date,id_char,CHAR_LENGTH(id_date),CHAR_LENGTH(id_char),LENGTH(id_date),LENGTH(id_char) 
FROM test_sjlx2;


===================DAY8===================
Q1:使用聚合函数完成如下操作。
1、产品信息表中一共有多少产品?
SELECT count(1) FROM prod_info;

2、有哪些产品类别,每个类别分别又有多少种产品?
SELECT class,count(prod_id) FROM prod_info GROUP BY class;

3、一共有多少客户购买了商品?
SELECT count(DISTINCT cust_id) FROM order_list;

4、哪些客户购买了商品,分别购买了多少?
SELECT cust_id,cust_name,sum(quantity) FROM order_list GROUP BY cust_id;

Q2:使用 WHERE 和 HAVING 对数据记录进行正确过滤。
1、各类别中,产品销售价在 10 块以上的分别有多少?
SELECT * FROM prod_info WHERE sale_price > 10;

2、各类别中,产品数量在 5 件以上的分别有哪些?
SELECT * FROM prod_info GROUP BY class HAVING count(prod_id) > 5;

3、购买商品超过 5 件的用户有哪些?
SELECT cust_id,cust_name FROM order_list GROUP BY cust_id HAVING sum(quantity) >5;

Q3:写出我们所学过的所有子句,以及在完整语句中的书写顺序。并且指出各子句的操作
对象以及使用注意事项。
SELECT ...FROM ....WHERE ....GROUP BY .... HAVING ....ORDER BY.... ;
SELECT...FROM是必需子句,SELECT的操作对象是列名,FROM的操作对象是表名。
WHERE...子句用来过滤行,操作对象是针对列的关系表达式。
GROUP BY....子句用来进行分组,操作对象是聚合键,也是列名。要求 SELECT部分有聚合键。
HAVING...子句用来对分组结果进行筛选,操作对象是聚合函数,使用前提是必须存在GROUP BY子句。
ORDER BY...子句对查询结果进行排序,它一定是查询语句的最后一条子句。



===================DAY9===================
Q1∶总结一下子查询的几种类别,及分别的用法和特征(包括子查询返回值的样式、子查询在主查询语句中的位置)。
1、标量子查询:返回为一个值,可以作为常数处理。用作主查询语句的常数列(SELECT)、主查询语句的过滤条件(WHERE)、主查询语句分组的筛选条件(HAVING)。
2、关联子查询:返回为一列数据,与主查询语句中的字段存在关联关系。用于主查询语句的过滤条件(WHERE)、主查询语句分组的筛选条件。关联条件需要写在子查询部分。
3、普通子查询:返回为一列数据。用于主查询语句的过滤条件(WHERE),表示不连续的取值范围,与IN配套使用。
4、普通子查询:返回一个二维表。用于主查询语句的目标表(FROM)。

Q2:具体说明内联结和外联结的异同,以及联结的具体写法。
同:两者都是通过共有列将表关联,都是在列上的拓展。
异:内联结只保留存在相等关系的行。外联结哪边外,则哪边保留所有行,另一边只保留存在相等关系的行。
具体写法:查看联结表的结构–找到共有列–定义列的等值关系–确定内外联结(自由发挥)


Q3:按要求写出以下语句。
1、找出所有洁云牌抽纸的销售流水(使用标量子查询)。
SELECT * FROM order_list
WHERE prod_id IN (
				SELECT prod_id FROM prod_info
				WHERE brand = '洁云' AND prod_name = '抽纸');
				
2、找出各类商品中,价格高于该类商品均价的部分(使用关联子查询)。
SELECT * 
FROM 
	(prod_info AS pi 
	JOIN 
	(SELECT class,avg(sale_price) FROM prod_info GROUP BY class ) AS a
	ON pi.class = a.class) as n
WHERE pi.sale_price > a.avg(sale_price);

3、用联结的方法改写第一题。
SELECT ol.* 
FROM order_list ol JOIN prod_info pi ON ol.prod_id = pi.prod_id
WHERE brand = '洁云' AND prod_name = '抽纸';

4、归总下所有商品的销量。
SELECT prodname, sum(quantity) as '商品销量'
FROM order_list
GROUP BY prodname;




===================DAY10===================

Q1:写出插入语句的两种语句结构,并分析其使用场景。
INSERT INTO<表名>VALUES(<插入值1>,<插入值2>,....);
INSERT INTO<表名>(<插入字段1>,<插入字段2>,..... VALUES(<插入值>,<插入
值>,..…);
第一种写法较为简单,仅适用于整行插入,且要求表结构固定。
第二种写法更为具体,既可以用于整行插入也可以用于部分行插入,且插入顺序可以进行自
定义。并且,即使表结构后续发生修改,只要插入字段依然存在,则该语句依旧有效。

Q2:请写出更新表的语句结构(多列),以及更新操作的注意事项。
UPDATE<表名>
SET<列名1>=值1,<列名2>=值2
WHERE<过滤条件>;
一定要注意过滤条件的检查。


Q3:分别写出以下语句。
1、向 milk_tea 表中插入一个完整的行:(9,测试商品 1,100g,2019-01-01,12,13,20)
INSERT INTO milk_tea VALUES (9,'测试商品 1','100g','2019-01-01',12,13,20);

2、向 milk_tea 表中插入以下数据:prod_id = 10,pro_date = “2018-01-01”,prod_name = “测试商品 2”
INSERT INTO milk_tea (prod_id,pro_date,prod_name) VALUES (10,'2018-01-01','测试商品 2');

3、从 milk_tea 表中找到‘棒棒糖’的行,修改 prod_id 为 11 后重新插入 milk_tea 表
UPDATE milk_tea SET prod_id = 11 WHERE prod_name = '棒棒糖';


4、修改 prod_id 为 11 的行数据,将 prod_name 修改为“测试商品 3”
UPDATE milk_tea SET prod_name = '测试商品 3' WHERE prod_id = 11;

5、删除 prod_id 为 9、10、11 的行。
DELETE FROM milk_tea WHERE prod_id IN (9,10,11);

===================DAY11===================

Q1:请写出创建表语句的结构、常用的属性及相关注意事项。
CREATE TABLE<表名>
(
<字段名1><数据类型><属性>,

<字段名2>....
);
常用属性有是否允许空值–NOT NULL,缺省值设定–DEFAULT。
注意事项有表名、字段名唯一,DEFAULT后只能接常数

Q2:写出为表增加字段和修改字段数据类型的语句结构。
ALTER TABLE<表名>ADD<字段名><数据类型><属性>;
ALTER TABLE<表名>MODIFY COLUMN<字段名><数据类型><属性>;

Q3:写出以下语句
1、复制 milk_tea 表的 prod_id/prod_name/prod_date/valid_month列至表 milk_tea2,
使其的 prod_id 列为 milk_tea 表中 prod_id 值添加前缀‘T’,其余列与 milk_tea 表
一模一样
CREATE TABLE milk_tea2 AS 
SELECT CONCAT('T',prod_id) ,prod_name,pro_date,valid_month FROM milk_tea;

2、增加 net_w 列,类型为 VARCHAR(255)
ALTER TABLE milk_tea2 ADD net_w VARCHAR(255);

3、修改 net_w 列与 milk_tea 表中的 net_w 列完全一样
4、修改 milk_tea2 表中的 pro_date 列缺省值为‘20190401’
5、删除 milk_tea2 表的 net_w 和 valid_month 列
ALTER TABLE milk_tea2 DROP net_w ,DROP valid_month;

6、删除 milk_tea2 表
DROP TABLE milk_tea2;


===================DAY12===================
Q1:按要求复制 milk_tea 表,并进行如下操作。
1、复制 milk_tea 表中 prod_id 为 1-5 的行,并命名为 copy_milk_tea 表。
CREATE TABLE copy_milk_tea AS
SELECT * FROM milk_tea WHERE prod_id BETWEEN 1 AND 5;

2、在 copy_milk_tea 表上建立视图,视图名为 view_milk_tea。查看该视图。
CREATE VIEW view_milk_tea AS SELECT * FROM copy_milk_tea;
SELECT * FROM view_milk_tea;

3、对视图进行查询操作,找出销售价高于 15 的产品。
SELECT * FROM view_milk_tea WHERE sale_price > 15;

Q2:按要求对 copy_milk_tea 表进行操作,并同时查看视图。
1、插入 milk_tea 表中 prod_id 为 6 的行。
INSERT INTO copy_milk_tea VALUES (SELECT * FROM milk_tea WHERE prod_id = 6);

2、删除 copy_milk_tea 表中销售价格为 15 的行。
DELETE FROM copy_milk_tea WHERE sale_price = 15;

Q3∶简单阐述视图与表的异同。(对比复制表操作)
同:都是二维表结构,都可以使用SELECT语句的全部操作
异:视图是虚拟的表,本身不包括数据,其内容随着SELECT语句的结果而改变。但如果是
复制表,则是固定不变的,即使AS后的SELECT语句结果发生改变,复制表也不会发生改
变。不可以通过视图更新原表数据。


===================DAY13===================

Q1:什么是事务?SQL中为什么要使用事务管理?
成批执行的SQL语句叫做事务。
使用事务管理,可以确保成批执行的语句完全执行或完全不执行,并且可以通过自定义保留点,控制语句执行进度。
使用事务管理,可以确保数据库信息的完整性。


Q2:请总结SAVAPOINT的用法。
创建保留点: SAVEPOINT<保留点名>;
回退到保留点:ROLLBACK TO<保留点名>;
释放保留点: RELEASE SAVEPOINT<保留点>;

Q3:请写出以下语句(Navicat 中操作)
1、从 milk_tea 表复制出 milk_tea2 表。
CREATE TABLE milk_tea2 AS
SELECT * FROM milk_tea;

2、对 milk_tea 表的 in_price 列增加 UNIQUE 属性
ALTER TABLE milk_tea ADD CONSTRAINT UNIQUE( in_price);

3、开启一个事务管理
BEGIN;

4、插入值 prod_id – ‘T1’, prod_name – ‘测试商品 1’,in_price – 88
INSERT INTO milk_tea(prod_id,prod_name,in_price) VALUES ('T1','测试商品 1',88);

5、插入值 prod_id – ‘T2’, prod_name – ‘测试商品 2’,in_price – 88
INSERT INTO milk_tea(prod_id,prod_name,in_price) VALUES ('T2','测试商品 2',88);

6、回退
ROLLBACK;

7、重复 5 的操作

===================DAY14===================
Q:按照我们课堂操作,回顾总结下这 14 天的课程内容。并上传结果。



版权声明:本文为m0_59440748原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。