MYSQL子查询

子查询

一.定义:

某些情况下,当进行一个查询时,需要的条件或数据要用另外一个 select 语句的结果,这个时候,就要用到子查询。(为了给主查询(外部查询)提供数据而首先执行的查询(内部查询)被叫作子查询。)

二.分类(子查询的种类有四种)

1.select子查询(外语句先执行,后执行子语句)
在select后加‘子’的部分,将另一张表的内容当作一列,变成一个列标进行查询,个人用的较少。可见图中被标记的部分就是‘子’,获取老师的名字,好处在于此处并未进行常规的关联查询,而是直接加入了一列name。

image.png

2.where子查询(先执行子查询,再执行外查询)
image.png

3.from子查询(先执行子查询,再执行外查询)from子查询子的部分直接当成一张表写在from后面
image.png

4.exist子查询(先执行外语句,再执行子查询)
exist你可以理解为in,同样是作为筛选,图1时获得课程有01的学生,图2执行外查询后,判断输出,符合子表中的条件的才输出,值得一提的时子表中必须有子和外的链接部分,如同图1中的and后部分,通过主键进行关联
SELECT * FROM t_department
WHERE EXISTS (SELECT * FROM t_employee WHERE t_employee.dept_id = t_department.did);

三.使用子查询必须遵循以下几个规则:

子查询必须括在圆括号中。
子查询的 SELECT 子句中只能有一个列,除非主查询中有多个列,用于与子查询选中的列相比较。
子查询不能使用 ORDER BY,不过主查询可以。在子查询中,GROUP BY 可以起到同 ORDER BY 相同的作用。
返回多行数据的子查询只能同多值操作符一起使用,比如 IN 操作符。
SELECT 列表中不能包含任何对 BLOB、ARRAY、CLOB 或者 NCLOB 类型值的引用。
子查询不能直接用在集合函数中。
BETWEEN 操作符不能同子查询一起使用,但是 BETWEEN 操作符可以用在子查询中。

四.子查询可以在 SELECT、[INSERT]、UPDATE 和 DELETE 语句中

1.SELECT子查询语句
通常情况下子查询都与 SELECT 语句一起使用,其基本语法如下所示:
SELECT column_name [,column_name]
FROM table1 [,table2]
WHERE column_name OPERATOR
(SELECT column_name [,column_name]
FROM table1 [,table2 ]
[WHERE])
2.INSERT 子查询语句
子查询还可以用在 INSERT 语句中。INSERT 语句可以将子查询返回的数据插入到其他表中。子查询中选取的数据可以被任何字符、日期或者数值函数所修饰。
其基本语法如下所示:
INSERT INTO
table_name [(column1 [,column2])]
SELECT [*|column1 [,column2]
FROM table1 [,table2]
[WHERE VALUE OPERATOR]
3.UPDATE子查询语句
子查询可以用在 UPDATE 语句中。当子查询同 UPDATE 一起使用的时候,既可以更新单个列,也可更新多个列。
其基本语法如下:
UPDATE table
SET column_name = new_value
[WHERE OPERATOR [VALUE]
(SELECT COLUMN_NAME
FROM TABLE_NAME)
[WHERE)]
4.DELETE 子查询语句
如同前面提到的其他语句一样,子查询还可以同 DELETE 语句一起使用。
其基本语法如下所示:
DELETE FROM TABLE_NAME
[ WHERE OPERATOR [VALUE]
(SELECT COLUMN_NAME
FROM TABLE_NAME)
[WHERE)]

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容