多表查询
来源:互联网 发布:js validate取消验证 编辑:程序博客网 时间:2024/06/16 19:48
表关系简介
一、语法
SELECT 字段列表 FROM TABLE1 [CROSS JOIN TABLE2 ] | [NATURAL JOIN TABLE2 ] | [JOIN TABLE2 USING (字段名) ] | [JOIN TABLE2 ON (TABLE.COLUMN_NAME = TABLE2.COLUMN_NAME) ] |[(LEFT | RIGHT | FULL OUT) JOIN TABLE2 ON (TABLE1.COLUMN_NAME = TABLE2.COLUMN_NAME) ];
二、自然连接
- USING
如果不希望参照被连接表的所有同名列进行等值连接,自然连接将无法满足要求,可以在连接时使用USING子句来设置用于等值连接的列(参照列)名。
不允许在参照列上使用表名或者别名作为前缀--99语法SELECT EMPNO, ENAME, SAL, EMP.DEPTNO, DNAME FROM EMP JOIN DEPT USING (DEPTNO); --92语法SELECT EMPNO, ENAME, SAL, EMP.DEPTNO, DNAME FROM EMP, DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO;
- ON
如果要参照非同名的列进行等值连接,或想设置任意的连接条件,可以使用On子句SELECT EMPNO, ENAME, SAL, EMP.DEPTNO, DNAME FROM EMP JOIN DEPT ON (EMP.DEPTNO = DEPT.DEPTNO);
三、自连接
自己和自己做链接--99SELECT WORKER.LAST_NAME EMP, MANAGER.LAST_NAME MGR FROM EMPLOYEES WORKER JOIN EMPLOYEES MANAGER ON (WORKER.MANAGER_ID = MANAGER.EMPLOYEE_ID);--92SELECT WORKER.LAST_NAME EMP, MANAGER.LAST_NAME MGR FROM EMPLOYEES WORKER, EMPLOYEES MANAGER WHERE WORKER.MANAGER_ID = MANAGER.EMPLOYEE_ID;
四、非等值连接
--99SELECT E.LAST_NAME, E.SALARY, J.GRADE_LEVEL FROM EMPLOYEES E JOIN JOB_GRADES J ON E.SALARY BETWEEN J.LOWEST_SAL AND J.HIGHEST_SAL;--92SELECT E.LAST_NAME, E.SALARY, J.GRADE_LEVEL FROM EMPLOYEES E, JOB_GRADES J WHERE E.SALARY BETWEEN J.LOWEST_SAL AND J.HIGHEST_SAL;
五、INNER|OUTER 连接
- INNER 连接
两个表连接,只返回匹配的行,被称为内连接。--查询所有员工以及其部门名字--99SELECT LAST_NAME, DEPARTMENT_NAME FROM EMPLOYEES E INNER JOIN DEPARTMENTS D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID;--92SELECT LAST_NAME, DEPARTMENT_NAME FROM EMPLOYEES E, DEPARTMENTS D WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID;
- LEFT OUTER | RIGHT OUTER 连接
两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的行,这种连接称为左(或右)外连接。--哪些部门没有员工,看出部门名字--99SELECT DEPARTMENT_NAME FROM EMPLOYEES E RIGHT JOIN DEPARTMENTS D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID WHERE LAST_NAME IS NULL;--92SELECT DEPARTMENT_NAME FROM EMPLOYEES E, DEPARTMENTS D WHERE E.DEPARTMENT_ID(+) = D.DEPARTMENT_ID AND LAST_NAME IS NULL;
- FULL OUTER 连接
两个表在连接过程中除了返回满足连接条件的行以外还返回两个表中不满足条件的行,这种连接称为全外联接。--99SELECT E.LAST_NAME, D.DEPARTMENT_ID, D.DEPARTMENT_NAME FROM EMPLOYEES E FULL OUTER JOIN DEPARTMENTS D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID;--92SELECT E.LAST_NAME, D.DEPARTMENT_ID, D.DEPARTMENT_NAME FROM EMPLOYEES E, DEPARTMENTS D ON E.DEPARTMENT_ID(+) = D.DEPARTMENT_ID(+);
六、笛卡尔积
笛卡尔集会在下面条件下产生:- 连接条件被遗漏
- 连接条件不正确
- 所有表中的所有行互相连接
--99SELECT E.LAST_NAME, D.DEPARTMENT_ID, D.DEPARTMENT_NAME FROM EMPLOYEES E CROSS JOIN DEPARTMENTS D;--92SELECT E.LAST_NAME, D.DEPARTMENT_ID, D.DEPARTMENT_NAME FROM EMPLOYEES E, DEPARTMENTS D;
阅读全文
0 0
- 关联查询(多表查询)
- 多表查询,嵌套查询
- 多表查询----连接查询
- 多表查询----合并查询
- 数据库操作,内外联查询,分组查询,嵌套查询,交叉查询,多表查询,语句小结。
- 数据库操作,内外联查询,分组查询,嵌套查询,交叉查询,多表查询,语句小结
- 数据库操作,内外联查询,分组查询,嵌套查询,交叉查询,多表查询,语句小结。
- 数据库操作,内外联查询,分组查询,嵌套查询,交叉查询,多表查询,语句小结。
- 内外联查询,分组查询,嵌套查询,交叉查询,多表查询,语句小结转
- 复杂Oracle查询 限定查询+多表查询+统计查询+子查询
- SQL单表查询、多表查询、嵌套查询
- sql 复杂查询 多表查询 分页查询
- Hibernate数据库查询中DetachedCriteria数据库查询多表查询
- oracle 多表查询,子查询,集合运算,分页查询
- sql 多表查询,3表查询
- MySQL单表查询多表查询
- SQL中的多表查询查询
- SQL查询语句《三》:多表查询
- GHO文件转iso文件能启动安装
- 定义View元素和他们的属性
- iOS应用层加密相关
- HDFS读写流程
- Keymaster/ROT/MOTA功能的关联
- 多表查询
- PHP正则
- UITextView的使用
- 计蒜客-2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛-J-Our Journey of Dalian Ends
- 【整理】uclibc,eglibc,glibc之间的区别和联系
- Ubuntu 16.04 下 Matlab 2013a 中文乱码问题解决
- ProgressBar(进度条)-常用属性讲解与基础实例
- pix2code:从UI截图直接生成代码的神经网络工具
- openface 训练自己的训练集