SQLCookbook 学习笔记 3操作多个表

来源:互联网 发布:怎么订购淘宝视频服务 编辑:程序博客网 时间:2024/05/22 05:03

记录集叠加

mysql> select name from menpiao_2015 where num = '12' union all select user_mobile from user_info_bd where user_mobile = '13126512870';

需要注意的是 所有表项中 的项目数 和 对应的数据类型 必须匹配。


组合相关的行

 select name , package_name from mcp_content a, mcp_content_appinfo b where b.c_id = a.id and a.id = 63039;

连表查询

还有一种方案是 内连接 inner join

select name ,package_name from mcp_content a inner join mcp_content_appinfo b on a.id = b.c_id  

where a.id = 63039

这将 连接的逻辑 放在了 FROM 子句中,而不是where子句中。


在SQL中

TRUE or NULL 结果是 TRUE 

FALSE or  NULL  结果是 NULL


外连接 可以返回一个表中所有的行 ,以及另一个表中 匹配到的行。


或者使用 标量子查询

select e.name, d.loc,

(select eb.received from emp_bonus where eb.empno = e.empno) as receive

from emp e, dept d

where e.deptno = d.deptno order by 2


识别和消除 笛卡尔积

select e.name, d.loc from

emp e, dept d

where e.deptno = 10;

上面这个SQL 会产生多余的数据。

应该改成

select e.name, d.loc from

emp e, dept d

where e.deptno = 10 and d.depno = e.depno;


虽然笔记本电脑 又叫 laptop ,但是最好不要把笔记本直接放在 腿上。 会腿疼的。

避免笛卡尔积 要使用 n-1 规则。

n 是 表的数量, n-1是最小连接数。


产生笛卡尔积的 原因是 表1 限制了某个条件, 但是 表2 的这个条件 没有关联或者限制。就导致多余的错误数据。


当处理聚集与联接 的混合操作时候,连接可能产生重复行。

要再调用聚集函数时,使用DISTINCT 。


内连接 取交集, 外连接 是增加额外的字段,这种字段不是每个记录都有的。


full join = left join + right join


NULL 值永远不会等于或者不等于 任何值。


select ename, comm from emp

where coalesce(comm, 0) < (

select  comm from emp where  ename = 'WORD'

)

上面这个SQL,在于 最后比较的时候,是另一个SQL查询的结果。以及将NULL值 转化为可以比较的 0值。








0 0