# mysql常见面试题汇总
整理mysql 笔试面试题,包含基本概念及sql基本语句
# 第一部分
### 添加数据库表
1.学生表
Student(SID,Sname,Sage,Ssex) --SID 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别
2.课程表
Course(CID,Cname,TID) --CID --CID 课程编号,Cname 课程名称,TID 教师编号
3.教师表
Teacher(TID,Tname) --TID 教师编号,Tname 教师姓名
4.成绩表
SC(SID,CID,score) --SID 学生编号,CID 课程编号,score 分数
### 添加测试数据
1.学生表
create table Student(SID varchar(10),Sname nvarchar(10),Sage datetime,Ssex nvarchar(10));
insert into Student values('01' , '赵雷' , '1990-01-01' , '男');
insert into Student values('02' , '钱电' , '1990-12-21' , '男');
insert into Student values('03' , '孙风' , '1990-05-20' , '男');
insert into Student values('04' , '李云' , '1990-08-06' , '男');
insert into Student values('05' , '周梅' , '1991-12-01' , '女');
insert into Student values('06' , '吴兰' , '1992-03-01' , '女');
insert into Student values('07' , '郑竹' , '1989-07-01' , '女');
insert into Student values('08' , '王菊' , '1990-01-20' , '女');
2.课程表
create table Course(CID varchar(10),Cname nvarchar(10),TID varchar(10));
insert into Course values('01' , '语文' , '02');
insert into Course values('02' , '数学' , '01');
insert into Course values('03' , '英语' , '03');
3.教师表
create table Teacher(TID varchar(10),Tname nvarchar(10));
insert into Teacher values('01' , '张三');
insert into Teacher values('02' , '李四');
insert into Teacher values('03' , '王五');
4.成绩表
create table SC(SID varchar(10),CID varchar(10),score decimal(18,1));
insert into SC values('01' , '01' , 80);
insert into SC values('01' , '02' , 90);
insert into SC values('01' , '03' , 99);
insert into SC values('02' , '01' , 70);
insert into SC values('02' , '02' , 60);
insert into SC values('02' , '03' , 80);
insert into SC values('03' , '01' , 80);
insert into SC values('03' , '02' , 80);
insert into SC values('03' , '03' , 80);
insert into SC values('04' , '01' , 50);
insert into SC values('04' , '02' , 30);
insert into SC values('04' , '03' , 20);
insert into SC values('05' , '01' , 76);
insert into SC values('05' , '02' , 87);
insert into SC values('06' , '01' , 31);
insert into SC values('06' , '03' , 34);
insert into SC values('07' , '02' , 89);
insert into SC values('07' , '03' , 98);
### sql题目
1、查询"01"课程比"02"课程成绩高的学生的信息及课程分数
--1.1、查询同时存在"01"课程和"02"课程的情况
```
select a.* , b.score 课程01的分数,c.score 课程02的分数 from Student a , SC b , SC c where a.SID = b.SID and a.SID = c.SID and b.CID = '01' and c.CID = '02' and b.score > c.score
```
--1.2、查询同时存在"01"课程和"02"课程的情况和存在"01"课程但可能不存在"02"课程的情况(不存在时显示为null)(以下存在相同内容时不再解释)
```
select a.* , b.score 课程01的分数,c.score 课程02的分数 from Student a
left join SC b on a.SID = b.SID and b.CID = '01'
left join SC c on a.SID = c.SID and c.CID = '02'
where b.score > isnull(c.score)
```
2、查询"01"课程比"02"课程成绩低的学生的信息及课程分数
--2.1、查询同时存在"01"课程和"02"课程的情况
```
select a.* , b.score 课程01的分数 ,c.score 课程02的分数 from Student a , SC b , SC c
where a.SID = b.SID and a.SID = c.SID and b.CID = '01' and c.CID = '02' and b.score < c.score
```
--2.2、查询同时存在"01"课程和"02"课程的情况和不存在"01"课程但存在"02"课程的情况
```
select a.* , b.score 课程01的分数 ,c.score 课程02的分数 from Student a
left join SC b on a.SID = b.SID and b.CID = '01'
left join SC c on a.SID = c.SID and c.CID = '02'
where isnull(b.score,0) < c.score
```
3、查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩
```
select a.SID , a.Sname , cast(avg(b.score) as decimal(18,2)) avg_score
from Student a , sc b
where a.SID = b.SID
group by a.SID , a.Sname
having cast(avg(b.score) as decimal(18,2)) >= 60
order by a.SID
```
4、查询平均成绩小于60分的同学的学生编号和学生姓名和平均成绩
--4.1、查询在sc表存在成绩的学生信息的SQL语句。
```
select a.SID , a.Sname , cast(avg(b.score) as decimal(18,2)) avg_score
from Student a , sc b
where a.SID = b.SID
group by a.SID , a.Sname
having cast(avg(b.score) as decimal(18,2)) < 60
order by a.SID
```
--4.2、查询在sc表中不存在成绩的学生信息的SQL语句。
```
select a.SID , a.Sname , isnull(cast(avg(b.score) as decimal(18,2)),0) avg_score
from Student a left join sc b
on a.SID = b.SID
group by a.SID , a.Sname
having isnull(cast(avg(b.score) as decimal(18,2)),0) < 60
order by a.SID
```
5、查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩
--5.1、查询所有有成绩的SQL。
```
select a.SID 学生编号 , a.Sname 学生姓名 , count(b.CID) 选课总数, sum(score) 所有课程的总成绩
from Student a , SC b
where a.SID = b.SID
group by a.SID,a.Sname
order by a.SID
```
--5.2、查询所有(包括有成绩和无成绩)的SQL。
```
select a.SID 学生编号 , a.Sname 学生姓名 , count(b.CID) 选课总数, sum(score) 所有课程的总成绩
from Student a left join SC b
on a.SID = b.SID
group by a.SID,a.Sname
order by a.SID
```
--6、查询"李"姓老师的数量
--方法1
```
select count(Tname) 李姓老师的数量 from Teacher where Tname like '李%'
```
--方法2
```
select count(Tname) 李姓老师的数量 from Teacher where left(Tname,1) = '李'
```
--7、查询学过"张三"老师授课的同学的信息
```
select distinct Student.* from Student , SC , Course , Teacher
where Student.SID = SC.SID and SC.CID = Course.CID and Course.TID = Teacher.TID and Teacher.Tname = '张三'
order by Student.SID
```
--8、查询没学过"张三"老师授课的同学的信息
```
select m.* from Student m where SID not in (select distinct SC.SID from SC , Course , Teacher where SC.CID = Course.CID and Course.TID = Teacher.TID and Teacher.Tname = '张三') order by m.SID
```
--9、查询学过编号为"01"并且也学过编号为"02"的课程的同学的信息
--方法1
```
select Student.* from Student , SC where Student.SID = SC.SID and SC.CID = '01' and exists (Select 1 from SC SC_2 where SC_2.SID = SC.SID and SC_2.CID = '02') order by Student.SID
```
--方法2
```
select Student.* from Student , SC where Student.SID = SC.SID and SC.CID = '02' and exists (Select 1 from SC SC_2 where SC_2.SID = SC.SID and SC_2.CID = '01') order by Student.SID
```
--方法3
```
select m.* from Student m where SID in
(
select SID from
(
select distinct SID from SC where CID = '01'
union all
select distinct SID from SC where CID = '02'
) t
group by SID having count(1) = 2
)
order by m.SID
```
--10、查询学过编号为"01"但是没有学过编号为"02"的课程的同学的信息
--方法1
```
select Student.* from Student , SC where Student.SID = SC.SID and SC.CID = '01' and not exists (Select 1 from SC SC_2 where SC_2.SID = SC.SID and SC_2.CID = '02') order by Student.SID
```
--方法2
```
select Student.* from Student , SC where Student.SID = SC.SID and SC.CID = '01' and Student.SID not in (Select SC_2.SID from SC SC_2 where SC_2.SID = SC.SID and SC_2.CID = '02') order by Student.SID
```
--11、查询没有学全所有课程的同学的信息
--11.1、
```
select Student.* from Student , SC where Student.SID = SC.SID
group by Student.SID , Student.Sname , Student.Sage , Student.Ssex having count(CID) < (select count(CID) from Course)
```
--11.2
```
select Student.* from Student left join SC
on Student.SID = SC.SID group by Student.SID , Student.Sname , Student.Sage , Student.Ssex having count(CID) < (select count(CID)
mysql常见面试题汇总
需积分: 0 147 浏览量
更新于2023-05-31
收藏 6KB RAR 举报
MySQL是世界上最受欢迎的关系型数据库管理系统之一,尤其在Web应用程序中被广泛应用。对于求职者来说,掌握MySQL的基础知识和常见面试题是至关重要的。本篇文章将深入解析MySQL的一些基础概念和SQL基本语句,帮助你更好地准备面试。
1. **基本概念**
- **数据库(Database)**:存储数据的容器,可以理解为电子化的文件柜。
- **表(Table)**:数据库中的数据结构,由列(Column)和行(Row)组成。
- **列(Column)**:定义数据类型的字段,如INT、VARCHAR等。
- **行(Row)**:表中的记录,每行代表一个独立的数据项。
- **主键(Primary Key)**:表中一个或多个字段的组合,用于唯一标识每一行,不允许有重复值。
- **索引(Index)**:用于加速查询速度的数据结构,可以创建在表的任意列上。
- **视图(View)**:虚拟表,由SQL查询结果形成,不实际存储数据,但可以像操作普通表一样进行查询。
- **事务(Transaction)**:数据库操作的基本单位,具有ACID特性(原子性、一致性、隔离性和持久性)。
2. **SQL基本语句**
- **SELECT**:用于查询数据,如`SELECT * FROM table_name;`可获取表的所有数据。
- **INSERT INTO**:用于插入数据,如`INSERT INTO table_name (column1, column2) VALUES (value1, value2);`。
- **UPDATE**:用于更新数据,如`UPDATE table_name SET column1 = new_value WHERE condition;`。
- **DELETE FROM**:用于删除数据,如`DELETE FROM table_name WHERE condition;`。
- **CREATE DATABASE**:创建数据库,如`CREATE DATABASE db_name;`。
- **CREATE TABLE**:创建表,如`CREATE TABLE table_name (column1 datatype, column2 datatype, ...);`。
- **ALTER TABLE**:修改表结构,如`ALTER TABLE table_name ADD COLUMN new_column datatype;`。
- **DROP DATABASE/TABLE**:删除数据库或表,如`DROP DATABASE db_name;`或`DROP TABLE table_name;`。
- **JOIN**:用于合并两个或更多表的数据,如`INNER JOIN`、`LEFT JOIN`、`RIGHT JOIN`和`FULL OUTER JOIN`。
- **GROUP BY**和**HAVING**:用于数据分组和筛选,`GROUP BY`对数据按列分组,`HAVING`在分组后设置条件。
3. **性能优化**
- **索引优化**:合理创建和使用索引可以大大提高查询效率,但过多的索引会影响写操作速度。
- **查询优化**:避免全表扫描,使用合适的JOIN策略,减少子查询等。
- **存储引擎选择**:InnoDB支持事务处理,MyISAM适合读多写少的场景。
- **分区与分表**:大表可以通过分区或分表提高查询性能。
- **内存配置**:调整缓冲池大小以提高缓存效果。
4. **安全与权限**
- **用户管理**:创建、删除和管理用户,控制其访问特定数据库和表的权限。
- **GRANT/REVOKE**:授予或回收用户权限,如`GRANT ALL PRIVILEGES ON db_name.* TO 'username'@'localhost';`。
- **视图权限**:通过视图限制用户访问敏感数据。
5. **备份与恢复**
- **mysqldump**:用于数据库备份,`mysqldump -u username -p db_name > backup.sql`。
- **LOAD DATA INFILE**:从CSV或其他文本文件快速导入数据。
- **mysqlpump**:MySQL 5.7及更高版本的高效备份工具。
了解并熟练掌握以上知识点,将极大地提升你在MySQL面试中的表现。记住,理论知识与实践经验相结合,才能在面试中脱颖而出。不断练习和深入学习,是成为MySQL大师的关键。
学习资源网
- 粉丝: 940
- 资源: 2101
最新资源
- 基于java+ssm+mysql的大学生社团管理系统任务书.docx
- 客户流失预测/产品推荐算法介绍
- 基于java+ssm+mysql的蛋糕甜品店管理系统开题报告.doc
- 应急响应实战笔记:入侵分析、日志分析、权限维持、windows实战篇、LInux实战篇、WEB实战篇
- 基于java+ssm+mysql的点餐系统开题报告.docx
- 工作汇报ppt模板(黑色主题)
- 基于java+ssm+mysql的点餐系统任务书.docx
- python-7.纪念品分组-我的啦.py
- 基于java+ssm+mysql的公交车信息管理系统开题报告.doc
- python-8.统计数字-但是很大.py
- 基于java+ssm+mysql的公交车信息管理系统任务书.docx
- python-9.字符串的展开-领域!展开!.py
- browser-protocol
- 良人啊_Signed.apk
- 数智化时代医院临床试验人才培养的创新路径与实践探索.pdf
- KUKA OMNIMOVE重载型移动式运输平台工程图机械结构设计图纸和其它技术资料和技术方案非常好100%好用.zip