MySQL中的相关子查询和不相关子查询

本文深入解析了SQL中的子查询概念,区分了相关子查询和不相关子查询,并通过具体示例详细展示了它们在数据检索中的应用。相关子查询依赖于外部查询的每次执行,而独立的不相关子查询只执行一次,为外部查询提供条件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    嵌套在其他查询中的查询即子查询,子查询也叫内部查询。子查询中有相关子查询和不相关子查询:相关子查询是指查询结果依赖于外部查询的子查询,外部查询每执行一次,内部子查询也会执行一次;而不相关子查询是指独立于外部查询的子查询,内部子查询仅执行一次,执行完毕后将查询结果作为外部查询的条件使用。

    下面用具体示例来说明相关子查询和不相关子查询的区别:

数据表说明:

成绩表grade1(id,name,score)参数说明:

    id:学生编号,name:学生姓名,score:学生成绩

成绩表grade2(sid,cid,score)参数说明:

    sid:学生编号,cid:课程编号,score:课程成绩

数据表创建:

          创建数据表grade1:

  • # 创建学生成绩表:
    create table grade1(
    id int,
    name varchar(10),
    score int (10)
    )engine myisam charset utf8;
    
    # 向成绩表中插入数据:
    insert into grade1 values
    (1,'张无忌',85),
    (2,'李隆基',59),
    (3,'王五',60),
    (4,'曹操',79),
    (5,'小明',90),
    (6,'如花',60),
    (7,'尉迟恭',100),
    (8,'欧阳风',90),
    (9,'刘备',90),
    (10,'董永',99),
    (11,'冯钰',83),
    (12,'孙殿英',82);

          创建数据表grade2:

  • # 创建成绩表:
    create table grade2(
    sid varchar(10),
    cid varchar(10),
    score decimal(4,1)
    )engine myisam charset utf8;
    
    # 向成绩表中插入数据:
    insert into grade2 values
    ('01','01',80),
    ('01','02',90),
    ('02','01',70),
    ('02','02',60),
    ('02','03',80),
    ('02','04',85),
    ('03','01',80),
    ('03','02',80),
    ('03','03',80),
    ('03','04',61),
    ('04','01',75),
    ('04','02',30),
    ('04','03',20),
    ('04','04',45),
    ('05','01',76),
    ('05','02',87),
    ('05','03',99),
    ('05','04',75),
    ('06','01',31),
    ('06','02',65),
    ('06','03',34),
    ('07','02',89),
    ('07','03',98),
    ('09','03',82),
    ('10','01',88),
    ('10','02',90),
    ('13','01',59),
    ('13','02',79),
    ('13','04',81);

相关子查询

查看grade2表中的具体数据:

从grade2表中查询出每位学生大于其所修全部课程平均分的课程分数信息:

select * from grade2 as temp1 
where score > (select avg(temp2.score) from grade2 as temp2 where temp2.sid = temp1.sid);

    结果:

不相关子查询

查看grade1表中的具体数据:

select * from grade1

从grade1表中查询出分数大于所有学生平均分的学生的成绩信息:

select * from grade1 where score > (select avg(score) from grade1);

    结果:

参考:

https://dev.mysql.com/doc/refman/5.7/en/correlated-subqueries.html

https://blog.youkuaiyun.com/qiushisoftware/article/details/80874463

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值