mysql子查询

发布于:2022-12-26 ⋅ 阅读:(362) ⋅ 点赞:(0)

概念

子查询又叫做嵌套查询,一个语句中包含了查询语句,简单来说,就是你想要的数据,不是直接可以查询出来的,查询的思路要拐个弯。

子查询一般都是用在查询条件中,(查询条件: 列名  运算符 搜索值) 用来代替的是搜索值。

语法:

SELECT * FROM 表名 WHERE 列名 运算符 (子查询语句);

DELETE FROM 表名 WHERE 列名 运算符 (子查询语句);

注意

所有的子查询语句都可以分步骤完成

子查询实现的分析步骤:

1、子查询一定要放在小括号中,优先执行

2、子查询语句放在查询条件的右边,充当的是搜索值

3、子查询语句可以分为单行子查询,多行子查询

单行子查询:子查询语句返回的结果就一个,一个值(一个列)

多行子查询:子查询语句返回的结果就是多个行,多个值(一个列)

单行子查询的运算符: = ,!=,>,<,>=,<=

多行子查询的运算符: IN

例如:

查询王五这个学生的课程的名称,课时,和讲课老师

SELECT sid,did FROM student WHERE sname='王五';   --sid  did

SELECT cid FROM score WHERE sid=(SELECT sid FROM student WHERE sname='王五'); -- cid

SELECT * FROM course WHERE cid IN (SELECT cid FROM score WHERE sid=(SELECT sid FROM student WHERE sname='王五'));

SELECT cname,chour,tname FROM course WHERE cid IN (

SELECT cid FROM score WHERE sid=(

SELECT sid FROM student WHERE sname='王五'))  ---子查询写法

SELECT cname,chour,tname FROM student,course,score WHERE student.`SID`=score.`SID` AND course.`CID`=score.`CID` AND sname="王五";   ---多表联合查询写法

limit嵌套查询

在Mysql中使用嵌套查询,就是在子查询中的select语句带有limit。

比如这样的语句是不能正确查询的:

select * from tableA where id in(select id from tableB limit 0,1);

会报错:

This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

解决办法:

在后面的子查询中再嵌套一层(把子查询当成一张表再查):

select * from tableA where id in(select t.id from (select id from tableB limit 0,1) as t );

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到