网站首页 > 技术文章 正文
多表查询
1、 多表查询的操作、限制、笛卡尔积的问题;
2、 统计函数及分组统计的操作;
3、 子查询的操作,并且结合限定查询、数据排序、多表查询、统计查询一起完成各个复杂查询的操作;
但是如果要进行多表查询之前,首先必须先查询出几个数据 —— 雇员表和部门表中的数据量,这个操作可以通过COUNT()函数完成。
范例:查询emp表中的数据量 ——返回了14条记录
SQL> SELECT COUNT(*) FROM emp;
COUNT(*)
----------
14
范例:查询dept表中的数据量 ——4条记录
SQL> SELECT COUNT(*) FROM dept;
COUNT(*)
----------
4
额外补充一点:何为经验?
在日后的开发之中,很多人都肯定要接触到许多新的数据库和数据表,那么在这种时候有两种做法:
做法一:新人做法,上来直接输入以下的命令:
SELECT * FROM 表名称;
如果此时数据量较大的话,一上无法浏览数据,二有可能造成系统的死机;
做法二:老人做法,先看一下有多少条记录:
SELECT COUNT(*) FROM 表名称;
如果此时数据量较小,则可以查询全部数据,如果数据量较大则不能直接使用SELECT查询。现在确定好了emp和dept表中的记录之后,下面完成一个基本的多表查询:
SELECT * FROM emp, dept;
但是现在查询之后发现一共产生了56条记录 = 雇员表的14条记录 * 部门表的4条记录,之所以会造成这样的问题,主要都是由数据库的查询机制所决定的
本问题在数据库的操作之中被称为笛卡尔积,就表示多张表的数据乘积的意思,但是这种查询结果肯定不是用户所希望的,那么该如何去掉笛卡尔积呢?
最简单的方式是采用关联字段的形式,emp表和dept表之间现在存在了deptno的关联字段,所以现在可以从这个字段上的判断开始。
当在查询之中,不同的表中有了相同字段名称的时候,访问这些字段必须加上表名称,即“表.字段”。
SELECT * FROM emp
WHERE emp.deptno=dept.deptno;
此时的查询结果之中已经消除了笛卡尔积,但是现在只属于显示上的消除,而真正笛卡尔积现在依然存在,因为数据库的操作机制就属于逐行的进行数据的判断,那么如果按照这个思路理解的话,现在假设两张表的数据量都很大的话,那么使用这种多表查询的性能。
范例:以sh用户的大数据表为例
SELECT COUNT(*) FROM sales, costs
WHERE sales.prod_id=costs.prod_id;
这两张表即便消除了笛卡尔积的显示,但是本身也会有笛卡尔积的问题,所以最终的查询结果会很慢显示,甚至是不显示,所以通过这道程序一定要记住,多表查询的性能是很差的,当然,性能差是有一个前提的:数据量大。
范例:通过别名.字段的方式进行查询
SELECT * FROM emp e, dept d
WHERE e.deptno=d.deptno;
范例:查询出每一位雇员的编号、姓名、职位、部门名称、位置
1、确定所需要的数据表:
?emp表:可以查询出雇员的编号、姓名、职位;
?dept表:可以查询出部门名称和位置;
2、确定表的关联字段:emp.deptno=dept.deptno;
第一步:查询出每一位雇员的编号、姓名、职位
SELECT e.empno, e.ename, e.job
FROM emp e;
第二步:为查询中引入部门表,同时需要增加一个消除笛卡尔积的条件
SELECT e.empno, e.ename, e.job, d.dname, d.loc
FROM emp e, dept, d
WHERE e.deptno=d.deptno;
以后遇到问题,发现没有解决问题的思路,就按照上面的步骤进行,慢慢的分析解决,因为多表查询不可能一次性全部写出,需要逐步分析的。
猜你喜欢
- 2024-11-08 oracle update 批量更新数据提示单行子查询返回多个行如何解决
- 2024-11-08 Sql常用子句查询 sql语句的子查询
你 发表评论:
欢迎- 519℃Oracle分析函数之Lag和Lead()使用
- 518℃几个Oracle空值处理函数 oracle处理null值的函数
- 515℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 504℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 501℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 491℃【数据统计分析】详解Oracle分组函数之CUBE
- 471℃Oracle有哪些常见的函数? oracle中常用的函数
- 470℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端富文本编辑器 (47)
- 前端路由 (61)
- 前端数组 (73)
- 前端排序 (47)
- 前端定时器 (47)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle的函数 (57)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)