夺标查询:用单个的select 语句从多个查询相关
在多表查询的时候,如果没有加入等值条件,会产生笛卡尔积
-- 多表查询分为不同的标准
-- sql1992 老标准
-- sql 1999 新标准
等值查询,在父子表关系上,用= 来两家两个表的两个字段或多个表的多个字段
等值查询智能查询两个表中 一一对应的数据,如 部门有员工,员工有所属部门字段
N个表的等值查询,需要n-1个等值查询
非等值查询 ,两个表之间没有父子关系, 用 != 来连接 两个表
--自连接,通过别名,将一个表虚拟成两个表,然后再这两个表上做等值查询
--外连接:在等值查询的基础上,可以查询不满足等值条件的数据。
--左外连接,可以把右边不满足等值条件查询出来
--右外连接,可以把左边不满足等值条件查询出来
+ 号不能同时出现在= 的两边
--1.交叉链接 相当于sql1992 老标准查询的时候没有给出正确的等值条件,会产生笛卡尔积
---2.自然链接:在父子表关系上,自动匹配两个表中列名完整相同的字段(参照列),在这些相同字段上做等值查询。 参照列上不能使用前缀。
缺陷:把所有的参照列都作为等只查询,;2如果参照列类型不同,查询会报错。
3.JOIN ..USING ,自然链接的基础上,加以gaiji
当两个表中没有参照列时候,自然查询会产生笛卡尔乘积
======================= sql 新标准=================
使用union 把两个结果集合并成一个结果集 结果集一致
--使用查询语句来创建表(复制数据)
但是不能复制外键,索引等。
========================子查询================
--为 了给主查询提供条件,而首先执行的一个查询,被称为子查询(子查询是用来给主查询提供条件的)
--子查询首先被执行
-- 主查询使用子查询的查询条件
--子查询通常出现在比较运算符的右边,并且用()包围起来便于理解
-- 子查询的分类,就是根据子查询的返回结果来区分
--1)单行单列子查询 = 、> 、 < 、<> 只要是单行子查询 ,都可以用当行比较运算符
--2)多行单列子查询 ,要使用多行比较运算符,IN,ANAY,ALL
--3)多行多列子查询
--4)子查询也可以出现在having 中 对分组后的数组进行过滤
--5) 子查询没有结果,主查询也没有结果