论表与表之间的关系--半连接改写
来源:互联网 发布:查看本地网络ip 编辑:程序博客网 时间:2024/05/17 09:45
昨天听了落落的课,讲到了表与表之间的关系。
以下是我的测试案例:
SQL改写范例–SQL1(1:N关系)
SELECT * FROM DEPARTMENTS D WHERE D.DEPARTMENT_ID IN (SELECT E.DEPARTMENT_ID FROM EMPLOYEES E);
查询表DEPARTMENTS(department_id)与表EMPLOYEES(department_id)之间的关系
select count(*),department_id from departments group by department_id;
SELECT COUNT(*),DEPARTMENT_ID FROM EMPLOYEES GROUP BY DEPARTMENT_ID;
所以可以得知表DEPARTMENTS(department_id)与表EMPLOYEES(department_id)之间关系为1 : N
所以以上SQL可以等价改写成以下形式:
SELECT D.* FROM DEPARTMENTS D,(SELECT DEPARTMENT_ID FROM EMPLOYEES E GROUP BY DEPARTMENT_ID) C WHERE D.DEPARTMENT_ID=C.DEPARTMENT_ID
SQL改写范例–SQL2(N:1关系)
SELECT * FROM EMPLOYEES E WHERE E.DEPARTMENT_ID IN (SELECT D.DEPARTMENT_ID FROM DEPARTMENTS D);
由案例1可以得知:
表EMPLOYEES(department_id)与表DEPARTMENTS(department_id)之间的关系为N:1
所以以上SQL可以等价改写成以下形式:
SELECT E.* FROM EMPLOYEES E, DEPARTMENTS D WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID
SQL改写范例–SQL3(N:N关系)
创建以下表,并插入数据:
CREATE TABLE EMP_TEST AS SELECT * FROM EMPLOYEES ;INSERT INTO EMP_TEST SELECT * FROM EMP_TEST;...重复插入至3000多条数据后commit;CREATE TABLE DEPT_TEST AS SELECT * FROM DEPARTMENTS;INSERT INTO DEPT_TEST SELECT * FROM DEPT_TEST;...重复插入至1700多条数据后commit;
现在对以下SQL改写:
SELECT COUNT(*) FROM EMP_TEST E WHERE E.DEPARTMENT_ID IN (SELECT D.DEPARTMENT_ID FROM DEPT_TEST D);count(*)-------3392
由以上建表时语句可以得知,
表EMP_TEST (department_id)与表DEPT_TEST (department_id)之间的关系为N:N
错误改写:
SELECT COUNT(*) FROM EMP_TEST E, DEPT_TEST D WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID;count(*)-------434176
正确改写:
SELECT COUNT(*) FROM EMP_TEST E, (SELECT DEPARTMENT_ID FROM DEPT_TEST D GROUP BY D.DEPARTMENT_ID) C WHERE E.DEPARTMENT_ID = C.DEPARTMENT_ID;count(*)-------3392
阅读全文
1 0
- 论表与表之间的关系--半连接改写
- 数据库表与表之间的关系
- 表与表之间的关系
- hibernate 表与表之间的关系
- 关系型数据库表与表之间的关系
- 表之间的关系
- 表与表之间关系 --------实体与实体之间关系
- 多表查询、外键、表与表之间的关系
- SSH之 配置表与表之间的关系
- myBatis处理表与表之间的关系
- mybatis处理表与表之间的关系
- MyBatis处理表与表之间的关系
- mybatis处理表与表之间的关系
- mybatis处理表与表之间的关系
- 数据库设计(表与表之间的3种关系)
- 数据库设计>>表与表之间的3种关系<<
- Hibernate表与表之间的关联关系配置
- 表与表之间的关系(转载)
- 堆排序(HeapSort)
- 设计模式的艺术之道--单例模式
- mpi并行程序的基本框架
- 细聊冗余表数据一致性(架构师之路)
- 最小代价
- 论表与表之间的关系--半连接改写
- ELK简介及架构分析
- 正则表达式 简单的表单验证
- Eclipse中link方式安装插件
- 【算法分析与设计】【第十四周】647. Palindromic Substrings
- jquery属性的相关js实现方法
- 关于《Java多线程编程核心技术》P113页的2.2.15内部类与同步:实验2
- unity 5.5 遇到个奇葩的粒子bug
- 安卓设计模式の观察者模式