diff --git "a/29 \350\267\257\347\216\262/20230314 20230314 \347\254\254\344\272\214\347\273\204\351\242\230\347\233\256\357\274\210\350\267\257\347\216\262\357\274\214\346\233\271\346\255\243\346\263\242\357\274\214\346\270\251\350\264\265\351\233\257\357\274\214\345\210\230\346\226\207\351\224\213\357\274\214\351\230\231\344\271\246\346\226\207\357\274\211.md" "b/29 \350\267\257\347\216\262/20230314 20230314 \347\254\254\344\272\214\347\273\204\351\242\230\347\233\256\357\274\210\350\267\257\347\216\262\357\274\214\346\233\271\346\255\243\346\263\242\357\274\214\346\270\251\350\264\265\351\233\257\357\274\214\345\210\230\346\226\207\351\224\213\357\274\214\351\230\231\344\271\246\346\226\207\357\274\211.md" new file mode 100644 index 0000000000000000000000000000000000000000..9c4d6c044c99339ae43d82d72fd60d22c43f8eea --- /dev/null +++ "b/29 \350\267\257\347\216\262/20230314 20230314 \347\254\254\344\272\214\347\273\204\351\242\230\347\233\256\357\274\210\350\267\257\347\216\262\357\274\214\346\233\271\346\255\243\346\263\242\357\274\214\346\270\251\350\264\265\351\233\257\357\274\214\345\210\230\346\226\207\351\224\213\357\274\214\351\230\231\344\271\246\346\226\207\357\274\211.md" @@ -0,0 +1,232 @@ +# 题目 + +## 表 + +candidate 候选人信息表 + +| 字段名称 | 数据类型 | 是否主外键 | 说明要求 | +| --------- | ----------- | ---------- | -------- | +| myname | varchar(10) | 主键 | 姓名 | +| myage | int | | 年龄 | +| mysex | char | | 性别 | +| myaddress | varchar(10) | | 地址 | +| myheight | int | | 身高 | +| mycolor | varchar(10) | | 头发颜色 | + +message 选举信息表 + +| 字段名称 | 数据类型 | 是否主外键 | 说明要求 | +| -------- | ----------- | ---------- | ----------------- | +| mynumber | int | | 编号 | +| myname | varchar(10) | 外键 | 姓名 | +| mypost | varchar(10) | | 当前职务 | +| myparay | int | | 入党时间 not null | +| myvote | int | | 支持票数 | + +添加内容 + +表1 + +| 姓名 | 年龄 | 性别 | 地址 | 身高 | 毛发颜色 | +| ---------- | ---- | ---- | -------- | ---- | -------- | +| 孤独小青蛙 | 80 | 男 | 长汀古城 | 191 | 绿色 | +| 腼腆紫金矿 | 41 | 男 | 上杭古城 | 183 | 红色 | +| 开心地瓜干 | 32 | 男 | 连城古城 | 175 | 绿色 | +| 悲伤簸箕粄 | 18 | 男 | 武平古城 | 188 | 红色 | +| 云南大理石 | 20 | 女 | 大理古城 | 200 | 黑色 | + +表2 + +| 编号 | 姓名 | 当前职务 | 入党时间 | 支持票数 | +| ---- | ---------- | -------- | -------- | -------- | +| 1 | 孤独小青蛙 | 开国元老 | 1956 | 200000 | +| 2 | 腼腆紫金矿 | 村支书 | 1999 | 15000 | +| 3 | 开心地瓜干 | 连城法师 | 2003 | 45000 | +| 4 | 悲伤簸箕粄 | 市长 | 2016 | 62000 | +| 5 | 云南大理石 | 书记 | 2016 | 66666 | + +根据上面的表,创建表 +1.查询candidate表中的姓名,年龄,地址,并以中文的字段名显示 +2.在candidate表中,将身高修改到地址的前面 +3.在candidate表和message中,将所有的字段名去掉前面的my +4将message表中名字为云南大理石的入党时间修改为2015 +5.在candidate表中,添加一条记录(无知小蜜蜂,66,女,北京四合院,230,白色) +6.在candidate表中,删除第三条的记录 +7将两个表名分别改为cand,mess +8.在mess表中的入党时间降序和支持票数号升序来显示所有候选人的信息 +9.因为候选国家主席,为严肃重要事件,所有候选人不得染发,将非黑色发色的头发改为黑色 +10.查询党龄大于10年的候选人所有信息 +11.查询所有年龄大于30的候选人 +12.查询身高低于180的候选人 +13.查询名字带孤独的候选人 +14.查询开国元老的住址 +15.查询两表的name,age,sex,address,height,color,post,paray,vote并添加中文别名(禁止使用*) +16.查询腼腆紫金矿的职务 +17.将paray的数据类型改为year +18.查询全部候选人的平均年龄 +19.查询候选人支持票数大于50000,并党龄大于10年的所有信息 +20.查询姓名,地址,当前职务。 +21.查询第三、第四个候选人的所有信息 + +# 答案 + +```mysql +CREATE DATABASE exercise charset utf8; +USE exercise; + +-- candidate 候选人信息表 +CREATE TABLE candidate ( + myname VARCHAR ( 10 ) PRIMARY KEY, + myage INT, + mysex CHAR, + myaddress VARCHAR ( 10 ), + myheight INT, + mycolor VARCHAR ( 10 ) +); + +-- message 选举信息表 +CREATE TABLE message + ( mynumber INT, + myname VARCHAR ( 10 ), + foreign key(myname) references candidate(myname) + mypost VARCHAR ( 10 ), + myparay INT, myvote INT ); + +INSERT INTO candidate +VALUES + ( '孤独小青蛙', 80, '男', '长汀古城', 191, '绿色' ), + ( '腼腆紫金矿', 41, '男', '上杭古城', 183, '红色' ), + ( '开心地瓜干', 32, '男', '连城古城', 175, '绿色' ), + ( '悲伤簸箕粄', 18, '男', '武平古城', 188, '红色' ), + ( '云南大理石', 20, '女', '大理古城', 200, '黑色' ); + +INSERT INTO message +VALUES + ( 1, '孤独小青蛙', '开国元老', 1956, 200000 ), + ( 2, '腼腆紫金矿', '村支书', 1999, 15000 ), + ( 3, '开心地瓜干', '连城法师', 2003, 45000 ), + ( 4, '悲伤簸箕粄', '市长', 2016, 62000 ), + ( 5, '云南大理石', '书记', 2016, 66666 ); + +-- 根据上面的表,创建表 +-- 1.查询candidate表中的姓名,年龄,地址,并以中文的字段名显示 +SELECT + myname 姓名, + myage 年龄, + myaddress 地址 +FROM + candidate; + +-- 2.在candidate表中,将身高修改到地址的前面 +ALTER TABLE candidate MODIFY myheight INT AFTER myaddress; + +-- 3.在candidate表和message中,将所有的字段名去掉前面的my +ALTER TABLE candidate CHANGE myname NAME VARCHAR ( 10 ); +ALTER TABLE candidate CHANGE myage age INT; +ALTER TABLE candidate CHANGE mysex sex CHAR; +ALTER TABLE candidate CHANGE myaddress address VARCHAR ( 10 ); +ALTER TABLE candidate CHANGE myheight height INT; +ALTER TABLE candidate CHANGE mycolor color VARCHAR ( 10 ); +ALTER TABLE message CHANGE mynumber number INT; +ALTER TABLE message CHANGE myname NAME VARCHAR ( 10 ); +ALTER TABLE message CHANGE mypost post VARCHAR ( 10 ); +ALTER TABLE message CHANGE myparay paray INT; +ALTER TABLE message CHANGE myvote vote INT; + +-- 4将message表中名字为云南大理石的入党时间修改为2015 +UPDATE message +SET paray = 2015 +WHERE + NAME = '云南大理石'; + +-- 5.在candidate表中,添加一条记录(无知小蜜蜂,66,女,北京四合院,230,白色) +INSERT INTO candidate +VALUES + ( '无知小蜜蜂', 66, '女', '北京四合院', 230, '白色' ); + +-- 6.在candidate表中,删除第5题的记录 +DELETE +FROM + candidate +WHERE + NAME = '无知小蜜蜂'; + +-- 7将两个表名分别改为cand,mess +ALTER TABLE candidate RENAME TO cand; +ALTER TABLE message RENAME TO mess; + +-- 8.mess表中的入党时间降序和支持票数号升序来显示所有候选人的信息 +SELECT + * +FROM + mess +ORDER BY + paray DESC, + vote ASC; + +-- 9.因为候选国家主席,为严肃重要事件,所有候选人不得染发,将非黑色发色的头发改为黑色 +UPDATE cand +SET color = '黑色' +WHERE color != '黑色'; + +-- 10.查询党龄大于10年的候选人的所有信息 +select * from cand left join mess on cand.name=mess.name where paray >any (select 2023-paray from mess) and 2023-paray>10; + + -- 11.查询所有年龄大于30的候选人 +SELECT NAME FROM cand WHERE age > 30; + +-- 12.查询身高低于180的候选人 +select name from cand where height < 180; + +-- 13.查询名字带孤独的候选人 +SELECT NAME FROM cand WHERE NAME LIKE '%孤独%'; + +-- 14.查询开国元老的住址 +select cand.address from mess left join cand on mess.name=cand.name where post='开国元老'; + +-- 15.查询两表的name,age,sex,address,height,color,post,paray,vote并添加别名(禁止使用*) +SELECT +cand.NAME + 姓名, + age 年龄, + address 地址, + height 身高, + color 颜色, + post 当前职务, + paray 入党时间, + vote 支持票数 +FROM + cand + LEFT JOIN mess ON cand.NAME = mess.NAME union + SELECT cand.NAME + 姓名, + age 年龄, + address 地址, + height 身高, + color 颜色, + post 当前职务, + paray 入党时间, + vote 支持票数 +FROM + cand + RIGHT JOIN mess ON cand.NAME = mess.NAME; + +-- 16.查询腼腆紫金矿的职务 +select post from mess where name ='腼腆紫金矿'; + +-- 17.将myparay的数据类型改为year +alter table mess modify paray year; + +-- 18.查询全部候选人的平均年龄 +select avg(age) from cand; + +-- 19.查询候选人支持票数大于50000,并党龄大于10年的所有信息 + select * from cand left join mess on cand.name=mess.name where paray >any (select 2023-paray from mess) and 2023-paray>10 and vote >50000; + +-- 20.查询姓名,地址,当前职务。 +select age,address,paray from cand left join mess on cand.name=mess.name; + +-- 21.查询第三、第四个候选人的所有信息 +select * from cand left join mess on cand.name = mess.name limit 2,2; +``` +