【MYSQL】update/delete/select语句中的子查询

update或delete语句里含有子查询时,子查询里的表不能在update或是delete语句中,如含有运行时会报错;但select语句里含有子查询时,子查询里的表可以在select语句中。

如:把总成绩小于100的学生名称修改为天才

select stu_id from score group by stu_id having sum(grade)<100; #查询总成绩小于100的学生ID
update students set name=‘天才‘ where id in (select stu_id from score group by stu_id having sum(grade)<100);

另外,做查询时,能用单表就不要用多表。这样一来,逻辑清晰,出错的概率也就少多了。

时间: 2024-10-26 12:38:58

【MYSQL】update/delete/select语句中的子查询的相关文章

在 SQL Server 数据库的 WHERE 语句中使用子查询

这是关于子查询语句的一系列文章中的第三篇.在这篇文章中我们将讨论WHERE语句中的子查询语句.其他的文章讨论了其他语句中的子查询语句. 本次课程中的所有例子都是基于Microsoft SQL Server Management Studio和AdventureWorks2012数据库的.读者可以阅读我的SQL Server使用入门学习使用这些免费的工具. 在WHERE语句中使用子查询 在WHERE语句中使用子查询是非常常见的.常见的用法是用EXISTS或IN测试存在性.在某些情况下重新考虑查询语

在update语句中使用子查询

在update 中的 where 子句中使用子查询: UPDATE mg_page_log as a  SET  page_num=1 WHERE id in( SELECT id  from mg_page_log WHERE id < 100 GROUP BY visit_id) 会报: You can't specify target table 'a' for update in FROM clause 错误 所以正确的是: UPDATE mg_page_log as a ,( SELE

子查询四(在select子句中使用子查询)

示例一.查询出每个部门的编号,名称,位置,部门人数,平均工资 SELECT d.deptno,d.dname,d.loc, (SELECT COUNT(empno) FROM emp WHERE emp.deptno=d.deptno GROUP BY deptno) con, (SELECT AVG(sal) FROM emp WHERE emp.deptno=d.deptno GROUP BY deptno) avgsal FROM dept d WITH 子句 示例二.使用with子句将e

MYSQL 学习笔记记录整理之三:子查询

1.利用子查询进行过滤 eg:假如需要列出订购物品TNT2的所有客户,具体步骤: 检索包含物品TNT2的所有订单编号 检索具有前一步骤列出的订单编号的所有客户的ID 检索前一步骤返回的所有客户ID的客户信息 上述每个步骤都可以单独作为一个查询来执行,可以把一条SELECT语句返回的结果用于另一条SELECT语句的WHERE语句.也可以使用子查询把3个查询组合成一条语句. select order_num FROM orderitems WHERE prod_id='TNT2'; 输出结果为: o

Mysql高手系列 - 第12篇:子查询详解

这是Mysql系列第12篇. 环境:mysql5.7.25,cmd命令中进行演示. 本章节非常重要. 子查询 出现在select语句中的select语句,称为子查询或内查询. 外部的select查询语句,称为主查询或外查询. 子查询分类 按结果集的行列数不同分为4种 标量子查询(结果集只有一行一列) 列子查询(结果集只有一列多行) 行子查询(结果集有一行多列) 表子查询(结果集一般为多行多列) 按子查询出现在主查询中的不同位置分 select后面:仅仅支持标量子查询. from后面:支持表子查询

详细讲述MySQL中的子查询操作 (来自脚本之家)

继续做以下的前期准备工作: 新建一个测试数据库TestDB: ? 1 create database TestDB; 创建测试表table1和table2: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 CREATE TABLE table1 (   customer_id VARCHAR(10) NOT NULL,   city VARCHAR(10) NOT NULL,   PRIMARY KEY(customer_id) )ENGINE=INNODB DEFAULT CH

MySQL中IN子查询会导致无法使用索引

原文:MySQL中IN子查询会导致无法使用索引 今天看到一个博客园的一篇关于MySQL的IN子查询优化的案例,一开始感觉有点半信半疑(如果是换做在SQL Server中,这种情况是绝对不可能的,后面会做一个简单的测试.)随后动手按照他说的做了一个表来测试验证,发现MySQL的IN子查询做的不好,确实会导致无法使用索引的情况(IN子查询无法使用所以,场景是MySQL,截止的版本是5.7.18) MySQL的测试环境 测试表如下 create table test_table2 ( id int a

sql的基础语句-select语句中出现的操作符号

2. select语句中出现的操作符号 2.1 合并操作符select a.ename||' '||to_char(sal) from emp a; 2.2 消除重复的行 select distinct deptno from emp; 2.3 空格.空串.null的区别 select ascii(' '),ascii(null),ascii('') from dual; 区别:  从显式上看,空串跟null在数据库中存储的值是一样的,但是NULL可以赋给任何数据类型,而空串只能赋给字符串类型

SQL SERVER SELECT语句中加锁选项的详细说明 [转]

SQL Server提供了强大而完备的锁机制来帮助实现数据库系统的并发性和高性能.用户既能使用SQL Server的缺省设置也可以在select 语句中使用“加锁选项”来实现预期的效果. 本文介绍了SELECT语句中的各项“加锁选项”以及相应的功能说明. 功能说明: NOLOCK(不加锁) 此选项被选中时,SQL Server 在读取或修改数据时不加任何锁. 在这种情况下,用户有可能读取到未完成事务(Uncommited Transaction)或回滚(Roll Back)中的数据, 即所谓的“