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....
现有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);
结果如下:
如果再对tmp表插入两行
INSERT INTO tmp VALUES('T002'),('T003');
SELECT `js`.* FROM `js`,`tmp`
WHERE Tno IN(`tmp`.tnoo);
就会出现这样的结果:
想要解决这个问题,可以用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
上一篇: 京东2021数据分析岗笔试编程题