SQL的四种连接-左外连接、右外连接、内连接、全连接


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 (它只是一个筛选条件用的)


你可能感兴趣的:(JAVA)