您当前的位置: 站长圈 > 技术文章 > 数据库技术 > MySQL数据库查询——子查询

MySQL数据库查询——子查询

来源:站长圈 作者:adminzzq 点击: 0
子查询
所谓的子查询就是在一个select语句中嵌套一个select语句。where子句和having子句可以嵌套select子句。
例:查询天天学生选学了哪门课
select * from 学生_学课 where student_id=(select 学号 from student where sname='天天') 
结果见图29.jpg
 
在本例中,SELECT * FROM 学生_学课...是外部查询(或外部语句),(select 学号 from student where sname='天天')是子查询。我们可以说子查询嵌套在外部查询中。实际上,子查询也可以嵌套在其它子查询中,嵌套程度可以很深。子查询必须要位于圆括号中。
子查询的主要优势为:
子查询允许结构化的查询,这样就可以把一个语句的每个部分隔离开。
有些操作需要复杂的联合和关联。子查询提供了其它的方法来执行这些操作。
在许多人看来,子查询是可读的。实际上,子查询给予人们调用早期SQL“结构化查询语言”的原本的想法,这是子查询的创新。
一个子查询会返回一个标量(单一值)、一个行、一个列或一个表(一行或多行及一列或多列)。这些子查询被称为标量、列、行和表子查询。
子查询可以包括普通SELECT可以包括的任何关键词或子句:DISTINCT, GROUP BY, ORDER BY, LIMIT等
一个子查询的外部语句必须是以下语句之一:SELECT, INSERT, UPDATE, DELETE
 
从一个表(源表)中取出满足条件的数据,插入到另一个表(目标表)中
关键字:insert [into] ... select ...
基本语法结构
insert [into] 目标表名(列1[,列2,...,列n])select 列1[,列2,...,列n] from  源表表名 where 条件表达式
例:从学生表中选取学号插入到“学生_学课”表
insert into `学生_学课`(`student_id`) select `学号` from `student` 
\
例:查询学习PHP课程并成绩在90分及以上的学生信息
SELECT *
FROM `student`
WHERE 学号
IN (
SELECT student_id
FROM `学生成绩`
WHERE php >=90
AND class_id = (
SELECT id
FROM `课程`
WHERE 课程名称 = 'php' )
AND 学号 = student_id
)
\