–关系型数据库 : 表与表之间是有关联的
–非关系型数据库 : 底层就是一张表 , 与其他表没有关系
–关联查询的结果集中的字段来自多张表,
–需要在查询的时候联合多张表进行查询,
–根据给定的连接条件将表与表的数据建立对应关系,
–再分别从这些记录中提取要查询的字段来形成结果集中的每条记录
SELECT *
FROM emp,dept;
–这个叫笛卡尔积~~
–查询中不指定连接条件或连接条件无意义时,会产生笛卡尔积。这通常是无意义的
SELECT ename,emp.deptno,dname
FROM emp,dept
WHERE emp.deptno = dept.deptno;
–查询每个员工的名字和他所在的部门名称
SELECT ename,loc
FROM emp,dept
WHERE emp.deptno = dept.deptno AND dept.loc = 'NEW YORK';
–查看在NEW YORK工作的都有谁
–内连接 :
SELECT ename,emp.deptno,dname,loc
FROM emp JOIN dept
ON emp.deptno = dept.deptno
WHERE loc = 'NEW YORK';
–JOIN连接两个表 , ON 后面是关联条件
–左内连接时,以左边表为主 (主表内容必须显示)
SELECT ename,dname
FROM emp LEFT JOIN dept
ON emp.deptno = dept.deptno;
–左连接(左表的数据都有)
SELECT ename,dname
FROM emp RIGHT JOIN dept
ON emp.deptno = dept.deptno;
–右连接(右表的数据都有)
SELECT ename,emp.deptno,dname
FROM emp,dept
WHERE emp.deptno(+) = dept.deptno;
–这也是右连接的一种查询方式
–(+)在哪边,哪边的表就无效(也就是以另一个表为主表)
–全连接 :左表右表都作为主表查询一下
SELECT ename,dname
FROM emp FULL JOIN dept
ON emp.deptno = dept.deptno;
–全连接(左表右表的数据都显示出来)
–自连接 :(自连接的时候一定要取别名)
SELECT e.empno,e.ename,e.mgr,m.ename
FROM emp e,emp m
WHERE e.mgr = m.empno(+);
–查看每个员工的上司
–这个时候如果用内连接的话 , 会漏数据(没有领导的员工就被漏掉了)
emp表↑
dept表↑