1.内联接 ?
内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。
显示两张表共有的列,排除两张表不相同的列。
SELECT * FROM A JOIN B WHERE A.id = B.id;
2. 外联接包括 : 左外联接 右外联接 完整外联接。
左外联接:
两表连接、以左表 A 为基础查询对比右表 B 列,如 B 列数据与 A列数据相同 ,则显示出来。若 B 列没有与 A 列相同数据,则 B 列 表显示 NULL
SELECT * FROM t_a AS A LEFT JOIN t_b AS B ON A.Aid=B.Bnameid;
右联接 :
两表连接、以左表 B 为基础查询对比右表 A 列,如 A 列数据与 B列数据相同 ,则显示出来。若 A 列没有与B 列相同数据,则 A列 表显示 NULL
SELECT * FROM t_a AS A RIGHT JOIN t_b AS B ON A.Aid=B.Bnameid;
3.
SQL查询的基本原理:两种情况介绍。
第一、单表查询:根据WHERE条件过滤表中的记录,形成中间表(这个中间表对用户是不可见的);然后根据SELECT的选择列选择相应的列进行返回最终结果。
第二、两表连接查询:对两表求积(笛卡尔积)并用ON条件和连接连接类型进行过滤形成中间表;然后根据WHERE条件过滤中间表的记录,并根据SELECT指定的列返回查询结果。
第三、多表连接查询:先对第一个和第二个表按照两表连接做查询,然后用查询结果和第三个表做连接查询,以此类推,直到所有的表都连接上为止,最终形成一个中间的结果表,然后根据WHERE条件过滤中间表的记录,并根据SELECT指定的列返回查询结果。
理解SQL查询的过程是进行SQL优化的理论依据。
================
having 和where 都是用来筛选用的 having 是筛选组 而where是筛选记录
* WHERE语句在GROUPBY语句之前;SQL会在分组之前计算WHERE语句。
* HAVING语句在GROUPBY语句之后;SQL会在分组之后计算HAVING语句。
* WHERE 子句作用于表和视图,HAVING 子句作用于组。
1》当分组筛选的时候 用having 2》其它情况用where
用having就一定要和group by连用, 用group by不一有having (它只是一个筛选条件用的)