子查询可以对查询效率进行优化
1.SELECT子查询
比如查询小刘(所在数据表member)的所在公司名字(数据表company,字段就是公司名)叫什么,需要先找小刘的公司id(字段名comid):
SELEST comid
FROM member
WHERE name = '小刘'
(此时查到小刘公司id等于2, comid= 2),嵌套子查询,写在comid上,comid替换为:
SELECT name FROM company WHERE id = comid;
即SELEST (SELECT name FROM company WHERE id = comid)公司名
FROM member
WHERE name = '小刘'
2.WHERE子查询
仍然拿查找小刘的公司名字举例:
SELECT comid FROM member WHERE name = '小刘'
以上是仍然是第一步寻找小刘公司id,查询结果为2,此时把2当成条件来看,要查询的公司名字在公司表里,查公司表就是FROM company,条件就是WHERE id = 以上写的:
SELECT name 公司名
FROM company
WHERE id = (SELECT comid FROM member WHERE name = '小刘')
eg:查询小刘小王的公司名,name之间用or链接,属于集合不能写等号了,写IN:
SELECT name 公司名
FROM company
WHERE id IN(SELECT comid FROM member WHERE name ='小刘' OR name ='小王')
3.FROM子查询
SELECT子查询和WHERE子查询是把子查询结果当成数据,FROM子查询是把查询结果当成表来看待。
注意:表越多越多好,主要用于三张表以上的连接查询。
比如A,B,C三张表.先查询A和B两张表,再用查询结果和C表链接查询。
第一部还是先找公司id:
SELECT comid FROM member WHERE name = '小刘'
以上括起来放FROM后面,随便起名t1,并且和company表联查:
SELECT c.name 公司名
FROM(SELECT comid FROM member WHERE name = '小刘') t1
company c
WHERE t1.c= c.id
以上是子查询三种普通方法,个人做记录,若有错误,烦请指正