您好,欢迎访问一九零五行业门户网

mysql不支持子查询吗

mysql支持子查询。子查询是指将一个查询语句嵌套在另一个查询语句中,它是mysql中比较常用的查询方法,通过子查询可以实现多表查询。子查询可以在select、update和delete语句中使用,而且可以进行多层嵌套;在实际开发时,子查询经常出现在where子句中,语法为“where a8db8f1ba937e93d98acf65ecbbdce13 9e2afa6730b748eca425cf9bdb173637 (子查询)”,子查询必须在括号中关闭。
本教程操作环境:windows7系统、mysql8版本、dell g3电脑。
mysql支持子查询。
mysql中的子查询
子查询是 mysql 中比较常用的查询方法,通过子查询可以实现多表查询。子查询指将一个查询语句嵌套在另一个查询语句中。子查询可以在 select、update 和 delete 语句中使用,而且可以进行多层嵌套。在实际开发时,子查询经常出现在 where 子句中。
子查询在 where 中的语法格式如下:
where <表达式> <操作符> (子查询)
其中,操作符可以是比较运算符和 in、not in、exists、not exists 等关键字;子查询必须在括号中关闭
1)in | not in
当表达式与子查询返回的结果集中的某个值相等时,返回 true,否则返回 false;若使用关键字 not,则返回值正好相反。
2)exists | not exists
用于判断子查询的结果集是否为空,若子查询的结果集不为空,返回 true,否则返回 false;若使用关键字 not,则返回的值正好相反。
例 1
使用子查询在 tb_students_info 表和 tb_course 表中查询学习 java 课程的学生姓名
mysql> select name from tb_students_info -> where course_id in (select id from tb_course where course_name = 'java');
结果显示,学习 java 课程的只有 dany 和 henry。上述查询过程也可以分为以下 2 步执行,实现效果是相同的。
1)首先单独执行内查询,查询出 tb_course 表中课程为 java 的 id,sql 语句和运行结果如下。
mysql> select id from tb_course -> where course_name = 'java';
可以看到,符合条件的 id 字段的值为 1。
2)然后执行外层查询,在 tb_students_info 表中查询 course_id 等于 1 的学生姓名。sql 语句和运行结果如下。
mysql> select name from tb_students_info -> where course_id in (1);
习惯上,外层的 select 查询称为父查询,圆括号中嵌入的查询称为子查询(子查询必须放在圆括号内)。mysql 在处理上例的 select 语句时,执行流程为:先执行子查询,再执行父查询。
例 2
与例 1 类似,在 select 语句中使用 not in 关键字,查询没有学习 java 课程的学生姓名,sql 语句和运行结果如下。
mysql> select name from tb_students_info -> where course_id not in (select id from tb_course where course_name = 'java');
可以看出,运行结果与例 1 刚好相反,没有学习 java 课程的是除了 dany 和 henry 之外的学生。
例 3
使用=运算符,在 tb_course 表和 tb_students_info 表中查询出所有学习 python 课程的学生姓名,sql 语句和运行结果如下。
mysql> select name from tb_students_info -> where course_id = (select id from tb_course where course_name = 'python');
结果显示,学习 python 课程的学生只有 jane。
例 4
使用<>运算符,在 tb_course 表和 tb_students_info 表中查询出没有学习 python 课程的学生姓名,sql 语句和运行结果如下。
mysql> select name from tb_students_info -> where course_id <> (select id from tb_course where course_name = 'python');
可以看出,运行结果与例 3 刚好相反,没有学习 python 课程的是除了 jane 之外的学生。
例 5
查询 tb_course 表中是否存在 id=1 的课程,如果存在,就查询出 tb_students_info 表中的记录,sql 语句和运行结果如下。
mysql> select * from tb_students_info -> where exists(select course_name from tb_course where id=1);
由结果可以看到,tb_course 表中存在 id=1 的记录,因此 exists 表达式返回 true,外层查询语句接收 true 之后对表 tb_students_info 进行查询,返回所有的记录。
exists 关键字可以和其它查询条件一起使用,条件表达式与 exists 关键字之间用 and 和 or 连接。
例 6
查询 tb_course 表中是否存在 id=1 的课程,如果存在,就查询出 tb_students_info 表中 age 字段大于 24 的记录,sql 语句和运行结果如下。
mysql> select * from tb_students_info -> where age>24 and exists(select course_name from tb_course where id=1);
结果显示,从 tb_students_info 表中查询出了一条记录,这条记录的 age 字段取值为 25。内层查询语句从 tb_course 表中查询到记录,返回 true。外层查询语句开始进行查询。根据查询条件,从 tb_students_info 表中查询 age 大于 24 的记录。
拓展
子查询的功能也可以通过表连接完成,但是子查询会使 sql 语句更容易阅读和编写。
一般来说,表连接(内连接和外连接等)都可以用子查询替换,但反过来却不一定,有的子查询不能用表连接来替换。子查询比较灵活、方便、形式多样,适合作为查询的筛选条件,而表连接更适合于查看连接表的数据。
【相关推荐:mysql视频教程】
以上就是mysql不支持子查询吗的详细内容。
其它类似信息

推荐信息