[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='北京';
~~~
- 数据库
- 数据库介绍
- MySQL的安装
- SQL
- 表基本操作
- 修改数据语句
- 数据检索操作
- 多表数据操作
- 练习题
- JAVA
- JAVA 介绍
- JAVA 运行原理
- JDK 配置
- 类和对象
- 数据类型
- 变量
- 直接量
- 运算符
- 流程控制
- 数组结构
- 面向对象
- 隐藏和封装
- 深入构造器
- 类的继承
- 多态
- 包装类
- final 修饰符
- 抽象类
- 接口
- 集合框架
- 常用类学习
- 设计模式-单例模式
- 异常处理
- JDBC
- JSP&Servlet
- Web应用
- Tomcat
- JSP
- Scriptlet
- Page 指令
- 包含指令
- 跳转指令
- 用户注册实例
- JSP练习
- 内置对象
- Servlet
- 过滤器
- Web分层思想
- EL表达式
- JSTL
- 分页实现
- AJAX&JSON
- 开发步骤
- 路径问题
- Log4j
- Mybatis框架
- 框架介绍
- Mybatis简单实现
- 表基本操作
- 优化配置文件
- 表字段名与实体类属性名不同的解决方案
- 一对一关联
- 一对多关联
- Spring框架
- IOC/DI
- 注入对象
- 注解方式 IOC/DI
- AOP
- 注解方式AOP
- 注解方式测试
- Spring MVC框架
- Hello SpringMVC
- 视图定位
- 注解方式
- 接受表单数据
- 客户端跳转
- Session
- 中文问题
- 上传文件
- SSM整合
- 整合步骤
- 分页
- PageHelper
- 连接池
- CRUD
- 事务管理
- JSON
- Maven
- 介绍
- 下载与配置MAVEN
- MAVEN仓库
- ECLIPSE中的MAVEN设置
- ECLIPSE下创建MAVEN风格的JAVA项目
- 添加JAR包
- 创建MAVEN风格的JAVA WEB项目
- 创建SSM项目
- 使用ECLIPSE导入一个MAVEN风格的SSM项目
- 教学管理
- 学员名录
- 周测统计
- 20180608
- 20180706
- 20180721
- 课堂作业
- 练习