欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

mysql学习笔记——select嵌套

程序员文章站 2022-06-23 08:38:25
现有js表如上图所示SELECT * FROM `js`WHERE Tno IN('T001');这是最基本的查询语句,要注意带单引号-- 会报错SELECT * FROM `js`WHERE Tno IN(T001);现在考虑能不能不把IN函数中的内容罗列出来CREATE TABLE tmp( tnoo VARCHAR(5));INSERT INTO tmp VALUES('T002'),('T003');SELECT * FROM `js`,`tmp`WHERE Tn....

mysql学习笔记——select嵌套
现有js表如上图所示

SELECT * FROM `js`
WHERE Tno IN('T001');

这是最基本的查询语句,要注意带单引号

-- 会报错
SELECT * FROM `js`
WHERE Tno IN(T001);

现在考虑能不能不把IN函数中的内容罗列出来

CREATE TABLE tmp(
 tnoo VARCHAR(5)
);

INSERT INTO tmp VALUES('T002'),('T003');

SELECT * FROM `js`,`tmp`
WHERE Tno IN(`tmp`.tnoo);

结果如下:
mysql学习笔记——select嵌套
如果再对tmp表插入两行

INSERT INTO tmp VALUES('T002'),('T003');

SELECT `js`.* FROM `js`,`tmp`
WHERE Tno IN(`tmp`.tnoo);

就会出现这样的结果:
mysql学习笔记——select嵌套
想要解决这个问题,可以用distinct。
由此可见IN函数的算法相当于是两层for循环嵌套,当匹配不break

同理,IN函数可以嵌套SELECT

SELECT `js`.* FROM `js`,`tmp`
WHERE Tno IN(
SELECT `js`.`Tno` FROM  `js` WHERE Tsex='男'
);

这里有一个问题,from后面不可以加tmp,正确结果是5行,加了tmp后会先做笛卡尔积,会出现5n行(n为tmp中列为合法值的列数)。

本文地址:https://blog.csdn.net/qlanBy/article/details/110706338

相关标签: mysql 数据库