MySQL随记 - 子查询

# 进阶7:子查询
/*
含义:
出现在其他语句中的select语句,成为子查询或内查询
外部的查询语句,称为主查询或外查询

分类:
按子查询出现的位置:
    select后面[标量子查询]
    from后面[表子查询]
    ☆where或having后面[标量子查询/列子查询/行子查询]
    exists后面(相关子查询)[表子查询]
按结果集的行列数不同
    标量子查询(结果集只有一行一列)
    列子查询(结果集只有一列多行)
    行子查询(结果集有一行多列)
    表子查询(结果集一般为多行多列)
*/

# 一、where或having后面
# 特点:
# ①子查询放在小括号内
# ②子查询一般放在条件右侧
# ③标量子查询,一般搭配单行操作符使用 > < = <>
# ④列子查询,一般搭配 IN/ANY/SOME/ALL

# 案例1:查询谁工资比Abel高
SELECT * FROM employees WHERE salary > (SELECT salary FROM employees WHERE last_name = 'Abel')

原文地址:https://www.cnblogs.com/hq82/p/12243153.html

时间: 2024-11-11 15:01:31

MySQL随记 - 子查询的相关文章

MySQL学习笔记-子查询和连接

MySQL学习笔记-子查询和连接 使客户端进入gbk编码方式显示: mysql> SET NAMES gbk; 1.子查询 子查询的定义: 子查询(Subquery)是指出现在其他SQL语句内的SELECT子句. 例如:  SELECT * FROM t1 WHERE col1 = (SELECT col2 FROM t2); 其中SELECT * FROM t1 称为Outer Query / Outer Statement (外部查询) SELECT col2 FROM t2 , 被称为Su

MySQL里面的子查询

一.子查询定义 定义: 子查询允许把一个查询嵌套在另一个查询当中. 子查询,又叫内部查询,相对于内部查询,包含内部查询的就称为外部查询. 子查询可以包含普通select可以包括的任何子句,比如:distinct. group by.order by.limit.join和union等:但是对应的外部查询必须是以下语句之一:select.insert.update.delete.set或 者do. 子查询的位置: select 中.from 后.where 中.group by 和order by

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

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

mysql update from 子查询

mssql 子查询更新 update log set uin= b.uinfrom log a,logs bwhere a.accountuin = b.accountuin mysql 不支持 update 子查询更新 找了半天资料 终于搞定了... update `log` a inner join `logs` b on a.`accountuin` = b.`accountuin`set a.`uin` = b.`uin` where a.`accountuin` = b.`accoun

详细讲述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中的子查询等操作

1.delete和truncate 区别? 1.1 delete慢 ,Truncate快 1.20delete记录日志,所以慢 truncate不记录日志 1.31 删除所有记录后,主键值delete 不是从1编号,Truncate会从1开始编号 1.43 truncate不能删除有外键的主表 1.5 delete 可以 加where ,删除部分记录 2.两种引擎 InnoDB:支持事务 MyISAM: 3.添加 insert into grade(字段名称) values(对应) 修改 upd

MySql学习(三) —— 子查询(where、from、exists) 及 连接查询(left join、right join、inner join、union join)

同样的,使用goods表来练习子查询,表结构如下: 所有数据(cat_id与category.cat_id关联): 类别表: mingoods(连接查询时作测试) 一.子查询 1.where型子查询:把内层查询的结果作为外层查询的比较条件 1.1 查询id最大的一件商品(使用排序+分页实现) :mysql> SELECT goods_id,goods_name,shop_price FROM goods ORDER BY goods_id DESC LIMIT 1; 1.2 查询id最大的一件商

mysql数据类型和子查询

电脑的一个字节等于8位,也就是1Byte=8bit.字节(Byte /bait/ n. [C])是计算机信息技术用于计量存储容量的一种计量单位,也表示一些计算机编程语言中的数据类型和语言字符.bit中文名称是位,音译"比特",是用以描述电脑数据量的最小单位.计算机容量单位的换算关系是:1Byte=8bit,1KB=1024B,1MB=1024KB,1GB=1024MB,1TB=1024GB,1PB=1024TB,1EB=1024PB,1ZB=1024EB,1YB=1024ZB 二进制转

mysql 数据操作 子查询 带比较运算符的子查询

带比较运算符的子查询 #比较运算符:=.!=.>.>=.<.<=.<> #查询大于所有人平均年龄的员工名与年龄 思路 先拿到所有人的平均年龄然后 再用另外一条sql语句 进行比较 拿所有员工的年龄 > 所有人的平均年龄 做比较 mysql> select name,age from employee where age >(select avg(age) from employee) ; +------+------+ | name | age | +