SQL联表查询
数据库中最最常用的语法----select.简单的select语法很直白:
select column from table where expression;
从((from)存储数据的地方(table)按照(where)一定的条件(expression)查找(select)我要的数据(column);
但是在实际工作中用到的比较多的往往还是多联表查询,所以在这里记下自己学习多联表查询的心得。
首先聊一聊笛卡尔积,这是几乎所有数据库书籍在讲多联表查询时第一个要讲的东西,我等P民也只能是把笛卡尔积放在第一位了。用初中数学来解释笛卡尔积其实就是因式展开(各位大神不要打我),类似于下面这种:
A=(a+b),B=(c+d),A*B=ac+ad+bc+bd;
嗯虽然不一样,但是其实表面上就是这样过的。
然后基础语法其实和单表查询还是差不多的:
select column from table1 (方式) join table2 on expression;
多表查询和单表查询最打区别就是多表查询多了join on 语句,讲专业点叫连接。连接常用的有三种inner、left、right,这里我们不展开讲三种方式的区别(因为我自己也讲不清楚!如果想知道请自行谷歌笛卡尔积、SQL多表联合查询十篇文章九篇会讲的),只讲怎么用,用哪个好。
首先,放出结论(一般情况下):
1)、如果table1符合条件数据量远大于table2,且table2数据非常多,用left join;
2)、如果table1符合条件数据量远小于table2,且table1数据非常多,用right join;
3)、如果一样多且数据量不多推荐使用inner join;
4)、但是如果都非常多请用联合查询 + where,后面会讲到。
当然结论并非绝对,会受到两表中Null数据行的影响,但是我想说的是!实际中Null数据行是比较少的,所以这个结论大致上还是可以用的!!!不要问我为什么,就是这么粗暴!就是这么任性!
最后放大招--嵌套查询
嵌套查询顾名思义就是个嵌套,以内查询语句的输出作为外查询语句的输入或条件语句,以求达到缩减数据量的目的。在实际应用中,如果两表的数据量非常大,那么强烈推荐嵌套查询。假设有下表;
那么嵌套查询的典型语法如下:
在where条件中使用嵌套查询
select account from userbindinfo where user_id in ( select user_id -- 该处内查询语句的输出必须与外部查询语句的条件一一对应 from users where user_type = 1 )