目录
1.WHERE 子句
2.FROM 子句
3.EXISTS 子句
4.扩展-自连接
上篇文章总结了一下关联查询的点,本文继续总结涉及到多表查询相关的子查询。不过,比较复杂的sql容易造成效率低下,而且不好维护。所以现在开发过程中,不建议关联查询。建议将一些业务放到代码中解决。
关联子查询大概涉及到三类:WHERE,FROM以及EXISTS子查询。数据基础表参见上一篇博客:漫话mysql多表关联——几种连接(join)。
(1)SQL代码
SELECT * FROM test_user WHERE test_user.id IN ( SELECT test_score.user_id FROM test_score WHERE test_score.score >= 95 )(2)运行结果
(1)SQL代码
SELECT * FROM ( SELECT test_user.id, test_user.user_name, test_score.`subject`, test_score.score FROM test_user INNER JOIN test_score ON test_user.id = test_score.user_id ) AS tmp_table ORDER BY tmp_table.id DESC(2)运行结果
(1)SLQ代码
SELECT * FROM test_user WHERE EXISTS ( SELECT test_score.user_id FROM test_score WHERE test_score.score >= 95 AND test_user.id = test_score.user_id )(2)运行结果
自连接是连接的一种用法,但并不是连接的一种类型,因为他的本质是把一张表当成两张表来使用。
mysql有时在信息查询时需要进行对自身连接(自连接),所以我们需要为表定义别名。
(1)SQL代码
下面是查询语文科目成绩大于李四的表。
SELECT ts2.* FROM test_score ts1, test_score ts2 WHERE ts1.user_id=2 AND ts1.`subject` = '语文' AND ts1.score<ts2.score AND ts2.`subject` = '语文'(2)运行结果
Aldeo 认证博客专家 Python Java 数据库 喜欢写博客的码农小青年。工作7年,从事过金融,电商,教育等行业。热爱编程,善于合作,喜欢学习,迎难而上,结交朋友。人生格言:果断出击,不断改变。
