天天看点

关于SQL92与SQL99语法的区别与PKsql92语法sql99语法SQL查询的基本原理:两种情况介绍。ON后面的条件(ON条件)和WHERE条件的区别:总结

sql92语法

sql分类

1.笛卡尔积 (表乘表)

2.等值连接 表的连接条件使用“=”

3.非等值连接 表的连接条件使用“>、>=、 <、<=、!=、any等”

4.自连接 自己连接自己

5.外连接

1.左外连接,“(+)”在等号右边

2.右外连接,“(+)”在等号左边

3.“(+)”在哪一边的列,该表就补充null

sql99语法

sql分类

1.cross join 交叉连接 (笛卡尔积) ,不需要on关键字

2.natural join 自然连接 (找两个表中相同的列,进行等值匹配),不需要on关键字

3.inner join 内连接

1)必须有on关键字,on表示连接条件

2)inner关键字可以省略

4.outer join 外连接,outer关键字可以省略

  1. left outer join
  2. right outer join
  3. full outer join
    关于SQL92与SQL99语法的区别与PKsql92语法sql99语法SQL查询的基本原理:两种情况介绍。ON后面的条件(ON条件)和WHERE条件的区别:总结
    关于SQL92与SQL99语法的区别与PKsql92语法sql99语法SQL查询的基本原理:两种情况介绍。ON后面的条件(ON条件)和WHERE条件的区别:总结

SQL查询的基本原理:两种情况介绍。

第一、单表查询:根据WHERE条件过滤表中的记录,形成中间表(这个中间表对用户是不可见的);然后根据SELECT的选择列选择相应的列进行返回最终结果。

第二、两表连接查询:对两表求积(笛卡尔积)并用ON条件和连接连接类型进行过滤形成中间表;然后根据WHERE条件过滤中间表的记录,并根据SELECT指定的列返回查询结果。

第三、多表连接查询:先对第一个和第二个表按照两表连接做查询,然后用查询结果和第三个表做连接查询,以此类推,直到所有的表都连接上为止,最终形成一个中间的结果表,然后根据WHERE条件过滤中间表的记录,并根据SELECT指定的列返回查询结果。

理解SQL查询的过程是进行SQL优化的理论依据。

ON后面的条件(ON条件)和WHERE条件的区别:

ON条件:是过滤两个链接表笛卡尔积形成中间表的约束条件。

WHERE条件:在有ON条件的SELECT语句中是过滤中间表的约束条件。在没有ON的单表查询中,是限制物理表或者中间查询结果返回记录的约束。在两表或多表连接中是限制连接形成最终中间表的返回结果的约束。

从这里可以看出,将WHERE条件移入ON后面是不恰当的。推荐的做法是:

ON只进行连接操作,WHERE只过滤中间表的记录。

总结

连接查询是SQL查询的核心,连接查询的连接类型选择依据实际需求。如果选择不当,非但不能提高查询效率,反而会带来一些逻辑错误或者性能低下。下面总结一下两表连接查询选择方式的依据:

1、 查两表关联列相等的数据用内连接。

2、 Col_L是Col_R的子集时用右外连接。

3、 Col_R是Col_L的子集时用左外连接。

4、 Col_R和Col_L彼此有交集但彼此互不为子集时候用全外。

5、 求差操作的时候用联合查询。