🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] # MySQL 练习题 ## 第一题 表名 User | Name | Tel | Content | Date | | :--- | :--- | :--- | :--- | | 张三 | 13333663366 | 大专毕业 | 2006-10-11 | | 张四 | 13612312331 | 本科毕业 | 2006-10-15 | | 小明 | 13905333221 | 中专毕业 | 2006-10-15 | 1、有一新记录(小王 13254748547 高中毕业2007-05-06),请用SQL语句新增至表中。 ``` insert into [user]([name],[tel],[content],[date]) values('小王','13254748547','高中毕业','2007-05-06'); ``` 2、请用 SQL 语句,把张三的时间更新为当前系统时间。 ``` update [user] set [date]=GETDATE() where name='张三'; ``` 3、请写出删除姓名为张四的全部记录。 ``` delete from [user] where name='张四'; ``` ## 第二题 表名 student\_score | name | course | score | | :--- | :--- | :--- | | 张三 | 语文 | 81 | | 张三 | 数学 | 75 | | 李四 | 语文 | 76 | | 李四 | 数学 | 90 | | 王五 | 语文 | 81 | | 王五 | 数学 | 100 | | 王五 | 英语 | 90 | 1. 用一条 SQL 语句,查询出每门课都大于 80 分的学生姓名。 ``` SELECT DISTINCT name FROM student_score WHERE name NOT IN (SELECT DISTINCT name FROM student_score WHERE score<=80); ``` 或者 ``` SELECT name FROM student_score GROUP BY name HAVING MIN(score)>80; ``` 2. 查询出「张」姓学生中平均成绩大于 75 分的学生信息。 ~~~ SELECT * FROM student_score WHERE name IN (SELECT name FROM student_score WHERE name LIKE '张%' GROUP BY name HAVING AVG(score) > 75) ~~~ ## 第三题 表名 team | ID | Name | | :--- | :--- | | 1 | a | | 2 | b | | 3 | b | | 4 | a | | 5 | c | | 6 | c | 要求:执行一个删除语句,当 Name 列上有相同时,只保留 ID 这列上值小的 例如:删除后的结果应如下: | ID | Name | | :--- | :--- | | 1 | a | | 2 | b | | 5 | c | 请写出 SQL 语句。 ``` DELETE FROM team WHERE id NOT IN (SELECT a.id FROM (SELECT MIN(id) AS id FROM team GROUP BY name ) a) ``` ## 第四题 表名 students | id | sno | username | course | score | | --- | --- | --- | --- | --- | | 1 | 1 | 张三 | 语文 | 50 | | 2 | 1 | 张三 | 数学 | 80 | | 3 | 1 | 张三 | 英语 | 90 | | 4 | 2 | 李四 | 语文 | 70 | | 5 | 2 | 李四 | 数学 | 80 | | 6 | 2 | 李四 | 英语 | 80 | | 7 | 3 | 王五 | 语文 | 50 | | 8 | 3 | 王五 | 英语 | 70 | | 9 | 4 | 赵六 | 数学 | 90 | 查询出只选修了一门课程的全部学生的学号和姓名。 ``` SELECT sno,username,count(course) as 选课数 FROM students GROUP BY sno,username HAVING count(course) = 1; ``` ## 第五题 在名为商品库的数据库中包含有商品规格表 Content 和商品特性表 Property,它们的定义分别为: Content(Code varchar(50),Class varchar(20),Price double,Number int) Property(Code varchar(50),Place varchar(20),Brand varchar(50)) (1)写出下面查询语句的作用; `SELECT Distinct Brand FROM Property; ` 答:从Property表中查询出所有不同的品牌 (2)从商品规格表中查询出每类商品的最高单价 `SELECT Class,max(Price) FROM Content GROUP BY Class;` (3) 从商品规格表中查询出同一类商品多于一种的所有分类名 `SELECT Class FROM Content GROUP BY Class HAVING COUNT(Class)>1;` ## 第六题 表名 food: | 字段名 | 字段描述 | 数据类型 | 外键 | 非空 | 唯一 | 自增 | | --- | --- | --- | --- | --- | --- | --- | | id | 编号 | INT | 是 | 是 | 是 | 是 | | name | 食品公司 | VARCHAR(20) | | 是 | | | | company | 生产厂商 | VARCHAR(30) | | 是 | | | | price | 价格(单位:圆) | FLOAT | | | | | | produce_time | 生产年份 | YEAR | | | | | | validity_time | 保质期(单位:年) | INT | | | | | | address | 厂址 | VARCAHR(50 | | | | | 1.写出创建表的 SQL 语句; ~~~ CREATE TABLE food( id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, name VARCHAR(20) NOT NULL, company VARCHAR(30) NOT NULL, price FLOAT, produce_time YEAR, validity_time INT, address VARCHAR(50) ); ~~~ 2.将下边的记录插入到 food 表中 | id | name | company | price | produce_time | validity_time | address | | --- | --- | --- | --- | --- | --- | --- | | 1 | AA饼干 | AA饼干厂 | 2.5 | 2013 | 3 | 北京 | | 2 | CC牛奶 | CC牛奶厂 | 3.5 | 2014 | 2 | 河北 | | 3 | EE果冻 | EE果冻厂 | 1.5 | 2015 | 1 | 北京 | | 4 | FF咖啡 | FF咖啡厂 | 20 | 2002 | 5 | 天津 | | 5 | GG奶糖 | GG奶糖厂 | 14 | 2017 | 3 | 广东 | ~~~ -- 第一种方法不指定具体的字段 INSERT INTO food VALUES(NULL,'AA饼干','AA饼干厂', 2.5 ,'2013', 3 ,'北京'); -- 第二种方法是依次指定food表的字段 INSERT INTO food( name, company, price, produce_time, validity_time, address) VALUES('CC牛奶','CC牛奶厂', 3.5 ,'2014', 2 ,'河北'); -- 第三种方法是同时插入多条记录 INSERT INTO food VALUES (NULL,'EE果冻','EE果冻厂', 1.5 ,'2015', 1 ,'北京') , (NULL,'FF咖啡','FF咖啡厂', 20 ,'2002', 5 ,'天津') , (NULL,'GG奶糖','GG奶糖', 14 ,'2017', 3 ,'广东'); ~~~ 3.将「CC牛奶厂」的厂址(address)改为「内蒙古」,并且将价格改为 3.2。 ~~~ UPDATE food SET address='内蒙古',price=3.2 WHERE name='CC牛奶'; ~~~ 4.将厂址在北京的公司保质期(validity_time)都改为 5 年。 ~~~ UPDATE food SET validity_time=5 WHERE address='北京'; ~~~ 5.删除过期食品的记录。若当前时间-生产年份(produce_time)>保质期(validity_time),则视为过期食品。 ~~~ DELETE FROM food WHERE validity_time < (2017-produce_time); ~~~ 6.删除厂址为北京的食品的记录。 ~~~ DELETE FROM food WHERE address='北京'; ~~~