MySQL
数据库第五部分讲义
重点掌握子查询
一 理解并口述(技术要点和面试题)
【口述
1
】什么是子查询?
【口述
2
】什么时候使用子查询 ?
【口述
3
】子查询的编写思路
【口述
4
】使用子查询的注意事项
【口述
5
】常规
SQL
语句优化
【口述
6
】什么是索引
?
【口述
7
】索引的作用有哪些?
【口述
8
】索引的分类有哪些?
【口述
9
】创建索引的原则有哪些?
二 动手做(
TODO)
(
一
)
子查询
1.
单行子查询 (
TODO 4
个任务)
(1).
在
WHERE
子句中的单行子查询
(2).
在
HAVING
子句中的单行子查询
2.
多行子查询
(TODO 8
个任务
)
2.1
多行子查询中使用
IN
操作符
2.2
多行子查询中使用
ANY
操作符
2.3
多行子查询中使用
ALL
操作符
2.4
子查询中使用
EXISTS
操作符
3.
多列子查询(
TODO 1
个任务)
4.
关联子查询 (
TODO 2
个任务)
5.
在
DDL
的建表语句中使用子查询
(TODO 2
个任务
)
6.
在
SELECT
语句中使用子查询 (
TODO 1
个任务)
7.
插入语句中使用子查询 (
TODO 1
个任务)
8. FROM
子句中使用子查询 (
TODO 2
个任务)
9.
合并查询结果(
UNION,UNION ALL) (TODO 2
个任务
)
(
二
)
索引 (
TODO 2
个任务)
1.
如何创建索引?
2.
如何删除索引?
三 课后任务
(TODO 9
个任务
)
四 拓展(了解
MySQL
数据库中的触发器,存储函数和存储过程)
4.1
什么是触发器?
4.2
如何创建一个触发器?
4.3
什么是存储过程?
4.4
什么是存储函数(自定义函数)?
4.5
存储过程与存储函数(自定义函数)的区别?
4.4
如何创建及调用一个存储过程?
4.5
如何创建及调用一个存储函数?
4.6
如何使用游标?
4.7
如何删除存储过程?
4.8
如何删除存储函数?
MySQL
数据库第五部分讲义
重点掌握子查询
一 理解并口述(技术要点和面试题)
【口述
1
】什么是子查询?
子查询是指插入在其他
SQL
语句中的
SELECT
语句,也称为嵌套查询。 使用子查询主要是将结果作为外部主查询
的查询条件来使用的查询。
【口述
2
】什么时候使用子查询 ?
1.
当要显示的数据在表里并不存在,但可以通过对已有数据的加工获得,可通过子查询实现。
2.
子查询可以出现在
SELECT
、
WHERE
子句、
FROM
子句、
DML
语句、
DDL
语句中。
3.
在
SELECT
、
INSERT
、
UPDATE
或
DELETE
命令中允许是一个表达式的地方都可以包含子查询,子查询甚至可以
包含在另外一个子查询中。
【口述
3
】子查询的编写思路
子查询的编写思路 :
1.
仔细分析题目,确定要查询的表及字段(数据)
2.
分析要查询的字段(数据)哪些在表里直接存在,哪些不存在
3.
考虑如何把要显示的数据造出来(通过查询语句获得)
4.
考虑子查询与表的连接点是什么
(
通常是主外键、共有字段
)
5.
考虑子查询放在什么位置
6.
组合成完整的
SQL
语句
【口述
4
】使用子查询的注意事项
【口述
5
】常规
SQL
语句优化
【口述
6
】什么是索引
?
索引:类似
“
目录
”
,给一张表添加了一个目录。
1.
要将子查询放入圆括号中。
2.
子查询可出现在
WHERE
子句、
FROM
子句、
SELECT
列表(此处只能是一个单行子查询)和
HAVING
子句
,DDL,DML
中。
3.
子查询不能出现在主查询的
GROUP BY
语句中
4.
子查询和主查询可以使用不同表,只要子查询返回的结果能够被主查询使用即可。
5.
单行子查询只能使用单行操作符,多行子查询只能使用多行操作符。
6.
在多行子查询中,
ALL
和
ANY
操作符不能单独使用,而只能与单行比较符(
=
、
<
、
>
、
<=
、
>=
、
<>)
结合使用。
7.
要注意子查询中的空值问题。如果子查询返回了一个空值,则主查询将不会查询任何结果。
8.
在
WHERE
子句中进行子查询的时候,不能带有
GROUP BY
子句。
9.
子查询允许嵌套多层,但不能超过
255
层。
1.
建议不用
"*"
来代替所有列名