diff --git "a/14 \346\235\216\344\277\212\345\205\264/20230313 \346\237\245\350\257\242\344\275\234\344\270\232.md" "b/14 \346\235\216\344\277\212\345\205\264/20230313 \346\237\245\350\257\242\344\275\234\344\270\232.md" new file mode 100644 index 0000000000000000000000000000000000000000..6d108431b80dbeb9ce5b79ddc1d1bd1cb0a379f7 --- /dev/null +++ "b/14 \346\235\216\344\277\212\345\205\264/20230313 \346\237\245\350\257\242\344\275\234\344\270\232.md" @@ -0,0 +1,184 @@ +```mysql +create database studen charset utf8; +use studen; +create table stuinfo( + stuNO varchar(11) primary key, + stuName varchar(11) unique key not null, + stuAge int not null, + stuAddress varchar(11) not null, + stuSeat int not null, + stuSex int not null +); +create table stuexam( + examNO int not null unique key auto_increment, + stuNO varchar(11) primary key, + writtenExam int not null, + labExam int not null, + foreign key (stuNO) references stuinfo(stuNO) +); +insert into stuinfo values +('s2501','张秋利',20,'美国硅谷',1,1), +('s2502','李斯文',18,'湖北武汉',2,0), +('s2503','马文才',22,'湖南长沙',3,1), +('s2504','欧阳俊雄',21,'湖北武汉',4,0), +('s2505','梅超风',20,'湖北武汉',5,1), +('s2506','陈旋风',19,'美国硅谷',6,1), +('s2507','陈风',20,'美国硅谷',7,0); +insert into stuexam values +(1,'s2501',50,70), +(2,'s2502',60,65), +(3,'s2503',86,85), +(4,'s2504',40,80), +(5,'s2505',70,90), +(6,'s2506',85,90); +``` + + 1.查询学生信息表(stuinfo)中所有列信息,给每列取上中文名称 + +```mysql +select stuNO 学号,stuName 姓名,stuAge 年龄,stuAddress 地址,stuSeat 号数,stuSex 性别 from stuinfo; +``` + +2.查询学生信息表(stuinfo)中的姓名,年龄和地址三列的信息 + +```mysql +select stuName 姓名,stuAge 年龄,stuAddress 地址 from stuinfo; +``` + +3.查询学生分数表(stuexam)中的学号,笔试和机试三列的信息,并为这三列取中文名字 + +```mysql +select stuNO 学号,writtenExam 笔试,labExam 机试 from stuexam; +``` + +5.查询学生分数表(stuexam)中的学生的学号,笔试,机试以及总分这四列的信息 + +```mysql +select stuNO 学号,writtenExam 笔试,labExam 机试,writtenExam+labExam 总分 from stuexam; +``` + +6.查询学生信息表(stuInfo)中学生来自哪几个地方 + +```mysql +select distinct stuAddress from stuinfo; +``` + +7.查询学生信息表(stuInfo)中学生有哪几种年龄,并为该列取对应的中文列名 + +```mysql +select stuAge 年龄 from stuinfo group by stuAge; +``` + +8.查询学生信息表(stuInfo)中前3行记录 + +```mysql +select * from stuinfo limit 0,3; +``` + +9.查询学生信息表(stuInfo)中前4个学生的姓名和座位号 + +```mysql +select stuName,stuSeat from stuinfo limit 0,4; +``` + +11.将地址是湖北武汉,年龄是20的学生的所有信息查询出来 + +```mysql +select * from stuinfo where stuAddress='湖北武汉' and stuAge=20; +``` + +12.将机试成绩在60-80之间的信息查询出来,并按照机试成绩降序排列 + +```mysql +select * from stuexam where labExam between 60 and 80 order by labExam desc; +``` + +13.查询来自湖北武汉或者湖南长沙的学生的所有信息 + +```mysql +select * from stuinfo where stuAddress='湖北武汉' or stuAddress='湖南长沙'; +``` + +14.查询出笔试成绩不在70-90之间的信息,并按照笔试成绩升序排列 + +```mysql +select * from stuexam where writtenExam not between 70 and 90 order by writtenExam asc; +``` + +15.查询年龄没有写的学生所有信息 + +```mysql +select * from stuinfo where stuAge is null; +``` + +16.查询年龄写了的学生所有信息 + +```mysql +select * from stuinfo where stuage is not null; +``` + +17.查询姓张的学生信息 + +```mysql +select * from stuinfo where stuName like '张%'; +``` + +18.查询学生地址中有‘湖’字的信息 + +```mysql +select * from stuinfo where stuAddress like '%湖%'; +``` + +19.查询姓张但名为一个字的学生信息 + +```mysql +select * from stuinfo where stuName like '张_'; +``` + +20.查询姓名中第三个字为‘俊’的学生的信息,‘俊’后面有多少个字不限制 + +```mysql +select * from stuinfo where stuname like '__俊%'; +``` + +21.按学生的年龄降序显示所有学生信息 + +```mysql +select * from stuinfo order by stuAge desc; +``` + +22.按学生的年龄降序和座位号升序来显示所有学生的信息 + +```mysql +select * from stuinfo order by stuAge desc,stuSeat asc; +``` + +23显示笔试第一名的学生的考试号,学号,笔试成绩和机试成绩 + +```mysql +select examNO,a.stuNO,writtenExam,labExam from stuinfo a right join stuexam b on a.stuno=b.stuNO where writtenExam=(select max(writtenExam) from stuexam); +``` + +24.显示机试倒数第一名的学生的考试号,学号,笔试成绩和机试成绩 + +```mysql +select examNO,a.stuNO,writtenExam,labExam from stuinfo a right join stuexam b on a.stuno=b.stuNO where labExam=(select min(labExam) from stuexam); +``` + +25.查询每个地方的学生的平均年龄 + +```mysql +select stuAddress,round(avg(stuAge),2) 平均年龄 from stuinfo group by stuAddress; +``` + +26.查询男女生的分别的年龄总和 + +```mysql +select stuSex,sum(stuAge) 年龄总和 from stuinfo group by stuSex; +``` + +27.查询每个地方的男女生的平均年龄和年龄的总和 + +```mysql +select stuSex,round(avg(stuAge),2) 平均年龄,sum(stuAge) 年龄总和 from stuinfo group by stuSex; +``` \ No newline at end of file diff --git "a/14 \346\235\216\344\277\212\345\205\264/\345\244\247\344\275\234\344\270\232.md" "b/14 \346\235\216\344\277\212\345\205\264/\345\244\247\344\275\234\344\270\232.md" new file mode 100644 index 0000000000000000000000000000000000000000..a2b144c32b1f4a27e152e5e5f705feb21ec437b7 --- /dev/null +++ "b/14 \346\235\216\344\277\212\345\205\264/\345\244\247\344\275\234\344\270\232.md" @@ -0,0 +1,151 @@ +## 大作业 + +```sql +create DATABASE xiaoshou +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for author +-- ---------------------------- +DROP TABLE IF EXISTS `author`; +CREATE TABLE `author` ( + `author_id` int(11) NOT NULL, + `author_name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `credits` int(11) NULL DEFAULT NULL, + `vip_id` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `author_sex` char(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '男', + PRIMARY KEY (`author_id`) USING BTREE, + UNIQUE INDEX `author_name`(`author_name`) USING BTREE, + INDEX `vip_id`(`vip_id`) USING BTREE, + CONSTRAINT `vip_id` FOREIGN KEY (`vip_id`) REFERENCES `vip` (`vip_id`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of author +-- ---------------------------- +INSERT INTO `author` VALUES (1001, '朱逸群', 600, 'VIP01', '男'); +INSERT INTO `author` VALUES (1002, '范建', 8510, 'VIP04', '男'); +INSERT INTO `author` VALUES (1003, '史珍香', 981, 'VIP02', '男'); +INSERT INTO `author` VALUES (1004, '范统', 2364, 'VIP02', '男'); +INSERT INTO `author` VALUES (1005, '杜子腾', 257, 'VIP01', '女'); +INSERT INTO `author` VALUES (1006, '刘产', 678, 'VIP02', '男'); +INSERT INTO `author` VALUES (1007, '杜琦燕', 438, 'VIP03', '女'); + +-- ---------------------------- +-- Table structure for story +-- ---------------------------- +DROP TABLE IF EXISTS `story`; +CREATE TABLE `story` ( + `story_id` int(11) NOT NULL AUTO_INCREMENT, + `author_id` int(11) NULL DEFAULT NULL, + `type_id` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `story_name` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `views_number` int(11) NULL DEFAULT NULL, + PRIMARY KEY (`story_id`) USING BTREE, + INDEX `author_id`(`author_id`) USING BTREE, + INDEX `type_id`(`type_id`) USING BTREE, + CONSTRAINT `author_id` FOREIGN KEY (`author_id`) REFERENCES `author` (`author_id`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `type_id` FOREIGN KEY (`type_id`) REFERENCES `type` (`type_id`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB AUTO_INCREMENT = 12 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of story +-- ---------------------------- +INSERT INTO `story` VALUES (1, 1002, 'L03', '母猪产后与护理师的二三事', 6541); +INSERT INTO `story` VALUES (2, 1005, 'L04', '拖拉机大战蜘蛛侠', 663); +INSERT INTO `story` VALUES (3, 1003, 'L01', '这只小龙虾不正经', 8754); +INSERT INTO `story` VALUES (4, 1006, 'L04', '一个爹爹三个娃', 36354); +INSERT INTO `story` VALUES (6, 1005, 'L05', '给长城贴瓷砖的小太监', 6541); +INSERT INTO `story` VALUES (7, 1003, 'L03', '不科学御兽', 1257); +INSERT INTO `story` VALUES (8, 1005, 'L01', '镜面管理局', 3216); +INSERT INTO `story` VALUES (9, 1004, 'L02', '关于我成为灭魂师之后', 1147); +INSERT INTO `story` VALUES (10, 1004, 'L05', '公子别秀', 2078); +INSERT INTO `story` VALUES (11, 1005, 'L05', '拜登夸我很帅', 854); + +-- ---------------------------- +-- Table structure for type +-- ---------------------------- +DROP TABLE IF EXISTS `type`; +CREATE TABLE `type` ( + `type_id` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `type_name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + PRIMARY KEY (`type_id`) USING BTREE, + UNIQUE INDEX `type_name`(`type_name`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of type +-- ---------------------------- +INSERT INTO `type` VALUES ('L04', '仙侠'); +INSERT INTO `type` VALUES ('L02', '奇幻'); +INSERT INTO `type` VALUES ('L03', '武侠'); +INSERT INTO `type` VALUES ('L01', '玄幻'); +INSERT INTO `type` VALUES ('L05', '都市'); + +-- ---------------------------- +-- Table structure for vip +-- ---------------------------- +DROP TABLE IF EXISTS `vip`; +CREATE TABLE `vip` ( + `vip_id` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `vip_name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + PRIMARY KEY (`vip_id`) USING BTREE, + UNIQUE INDEX `vip_name`(`vip_name`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of vip +-- ---------------------------- +INSERT INTO `vip` VALUES ('VIP02', '白银作家'); +INSERT INTO `vip` VALUES ('VIp04', '钻石作家'); +INSERT INTO `vip` VALUES ('VIP01', '青铜作家'); +INSERT INTO `vip` VALUES ('VIP03', '黄金作家'); + +SET FOREIGN_KEY_CHECKS = 1; + +-- 1. 根据前面提供的表结构和表数据,创建数据库并分别创建这张四张表;并插入相关数据。(提醒:外键 +-- 请注意建表顺序和插入数据的顺序) (30分) +-- 2. 将story 表中的story_name字段类型改成varchar(40) 。(2分) +ALTER table story MODIFY story_name VARCHAR(40); +-- 3. 在author表中增加一个性别字段 字段名:author_sex,类型: char(10),要求默认值为'男'。 (3分) +alter table author add author_sex char(10) default '男'; +-- 4. 将作家编号为1005、1007的作家性别改为'女' 。(2分) +update author set author_sex='女' where author_id in (1005,1007); +-- 5. 作家杜子腾,写了一篇名为《拜登夸我很帅》的都市小说,有854个浏览量,请将这条信息插入到story +-- 表。(3分) +insert into story values(null,1005,'L05','拜登夸我很帅',854); +-- 6. 《拖拉机大战蜘蛛侠》这篇小说,浏览量涨了100,请更新story表中的相关数据。(2分) +update story set views_number=views_number+100 where story_name='拖拉机大战蜘蛛侠'; +-- 7. 请删除story表的中《皇上滚开本宫只劫财》这篇小说相关数据。(2分) +DELETE FROM story WHERE story_name ='皇上滚开本宫只劫财》'; +-- 8. 查询 浏览量大于 8000的小说的作者编号和小说作品名称。(2分) +SELECT author_id 书籍编号,story_name 书名 from story WHERE views_number>8000; +-- 9. 查询积分大于1000 并且会员等级高于vip03的作家所有信息。(3分) +SELECT * FROM author WHERE credits >1000 and vip_id > 'vip03'; +-- 10. 查询姓名以杜字开头的作家的姓名,积分和等级编号。(3分) +SELECT author_name,credits,vip_id from author WHERE author_name like '杜%'; +-- 11. 查询积分在100、1000之间的作家信息,以积分降序排列。 (3分) +SELECT * from author WHERE credits BETWEEN 100 and 1000 order by credits desc; +-- 12. 查询出小说的总浏览量,最高浏览量,最小浏览量,平均浏览量,给字段用上中文别名。(3分)\ +SELECT SUM(views_number) 总浏览量,MAX(views_number) 最高浏览量,AVG(views_number) 平均浏览量, MIN(views_number) 最小浏览量 FROM story; +-- 13. 查询各种等级的作家的平均积分和作家数量,并对查询结果使用中文别名。(3分) +SELECT vip_id,AVG(credits) 平均积分,COUNT(author_id) 作家数量 from author GROUP BY vip_id; +-- 14. 查询小说数量大于等于2的分类编号和小说数量。(4分) +SELECT t.type_id,COUNT(t.type_id) from story s LEFT JOIN type t ON s.type_id=t.type_id GROUP BY type_name HAVING COUNT(t.type_id)>=2; +-- 15. 查询所有小说中浏览量最少的书的作品编号、作品名称和类型编号、浏览量。(4分) +SELECT story_id, story_name,type_id,views_number FROM story WHERE views_number = (SELECT MIN(views_number) FROM story); +-- 16. 查询积分比刘产高的作者所有信息。(5分) +SELECT * FROM author WHERE credits > (SELECT credits FROM author WHERE author_name = '刘产'); +-- 17. 查询出哪些白银作家是没有写小说的,显示这些作家的姓名、等级名称。(8分) +select author_name,vip_id from story a right join (select * from author where vip_id=(select vip_id from vip where vip_name='白银作家')) b on a.author_id=b.author_id where story_name is null; +-- 18. 找出写过作品浏览量大于5000的作家的所有作品中浏览量不到1000的作品信息(8分) +SELECT * from story WHERE author_id in +(SELECT author_id from story WHERE views_number >5000 ) and views_number <1000; +-- 19. 查询所有小说的小说编号、小说名称、浏览量、分类名称、作者姓名、作者积分、作者等级名称,结果字段要用中文别名,并按浏览量降序排列,如果浏览量一样的,再按积分降序排列。(10分) +SELECT s.story_id'小说编号' ,s.story_name'小说名称',s.views_number'浏览量',t.type_name'分类名称',a.author_name'作者姓名', a.credits'作者积分',v.vip_name'作者等级名称' from story s LEFT JOIN author a on s.author_id=a.author_id +left join vip v on v.vip_id =a.vip_id +LEFT JOIN type t on s.type_id= t.type_id + ORDER BY s.views_number desc , a.credits desc; +``` +