上一篇给大家介绍了数据的单表查询,相信大家对于单表的查询应该都有了一些了解。单表查询在数据库中的使用会有一些,但并不是很多,但是作为初学者,我们需要学习单表查询的思路。今天呢,我们为大家介绍一下数据库中的多表查询,左查询和右查询。因为多表查询在实际项目中的应用还是比较广泛的。我们一定要掌握,掌握了多表查询对于后面的子查询、分组查询的学习就非常的简单了!

第一步:首先开启数据库监听服务:

1.Win + R   ---> cmd --->输入lsnrctl start --->显示如下图,则开启成功!开启监听服务使用的命令是:lsnrctl start

第二步:然后在开启数据库的主服务orcl,使用的命令是:net start oracleserviceorcl

我们使用自己提前造好的测试数据进行本篇文章的详解。接着往下看。

我们创建一个t_student表和一个t_score表。

通过sql语句查看两张表中的信息,如下:

select * from t_student;
select * from t_score;

t_student表:

t_score表:

需求1:如果我想查询张山的数学成绩,应该怎么办呢?很显然张山和成绩并不在一个表中,他们分别在不同的表中,所以,我们需要将两张表结合看。我们通过上面的截图可以狠清晰的发现t_student表和t_score表是通过主键ID关联的,所以我们可以通过主键ID来把两张表进行关联,在查询我们想要的结果。在做这个操作之前呢?我们先来看一个概念:笛卡尔积。

笛卡尔是一个叫法而已,源于数学家,笛卡尔。之所以这么叫是因为,在数据库中在进行多张表直接关联的时间会产生笛卡尔积,那么我们具体来看一下什么情况下会产生笛卡尔积呢?

需求2:我们继续需求1讨论,现在我想通过一条sql语句把学生表和成绩表关联起来,如果不知道笛卡尔积的可能会出现下面的情况:

select * from t_student,t_score;  #查询学生表和成绩表

查询结果:

通过上面的图,可以狠清楚的看见产生了12条数据,这12条数据的由来是怎么样的呢?因为我们是4个学生,但是只有三个学生有对应的各科成绩,所以最后执行select * from s_student,t_score;语句时,会产生 4*3 =12条数据,这种现象在数据中就是产生了笛卡尔积了,很显然这个结果并不是我们想要的,因为我们只要看每一位学生,对应的成绩。那么如何去掉笛卡尔积,只显示我们想要的数据呢?继续往下看。

select * from t_student t1,t_score t2 where t1.id=t2.id;

我们运行上面这条sql语句会发现,下面的查询结果是我们真正想要的。查看结果如下:

对于上面的sql语句,我们来解析一下:

select * from t_student t1,t_score t2 where t1.id=t2.id;

#t1 t2 是表的别名
#t1.id = t2.id 是通过主键将t_student表和t_score表进行关联,筛选我们要找的数据,剔除不符合的数据。
# * 代表查找的所有结果

当然,除了上面的这种写法,还有一个比较变态的写法,这种写法对比第一种写法在展示上面不是那么容易理解,但是这里面小编也为大家介绍一下,因为多了解一些总是没错的。来,我们看一下另外一种sql的语法格式,我们还是以上面的例子为基础给大家演示:

select * from t_student t1 inner join t_student t2 on t1.id=t2.id;

#语法解析:
------>inner join 是链接另一个表的命令
------> on 后面跟的是两个表之间通过什么关联在一起的 很显然我们使用的是id进行关联的

同样的查询的结果也是和上面的一样的,我们截图来看下:

所以,通过上面的例子,我们应该知道一点,在进行多张表关联的时候,一定要通过主键进行关联。不然的话无法有效链接,会产生笛卡尔积。如果表的数据有成百上千条,那估计产生的笛卡尔积会相当的庞大,所以,请小伙伴一定要注意哈!

我们知道了笛卡尔积以后呢,继续分享下一个知识点:左查询和右查询。来先看一下概念:

  • 左查询:以左表的数据为准,将右表中不满足的数据过滤掉,其中left左边的为左边,右边的为右表。
  • 右查询:以右边的数据为准,将左表中不满足的数据过滤掉,其中right右边的为右边,左边的为左边。

来看一下左链接的实例,查询的sql语句如下:

select * from t_student t1 left join t_score t2 on t1.id=t2.id;

#sql解析:
-----left join 链接另一张表的sql命令 以left左边的表为主,将left右表中不满足的数据显示出来。

如果你知道了左查询,那么同样的,右查询就变得很easy了,好了,那me我们在看一下右查询的使用:

查询的右查询的sql语句如下:

select  * from t_student t1 right join t_score t2 on t1.id=t2.id;

#sql语句解析:
---right join 链接另一张表的sql命令 right代表的是right单词右表的为主表,将左边不符合条件的表筛选出来 ---on 是通过什么进行关联的 很显然我们是通过id进行关联的

我们查看一下查看的结果:

关于左查询和右查询的实例是不是很简单理解呢?OK,那么我们总结一下知识点吧!

  • 1.多张表进行关联的时候,一定不要忘记要通过主键关联,不然会产生笛卡尔积
  • 2.左查询:以left关键字左边的表为主,将left右边的表中不满足条件的数据过滤掉
  • 3.右查询:以right关键字右表的表为主,将right左边的表中不满足条件的数据过滤掉

好了,关于多表查询、左查询、右查询方面的知识我们就介绍到这里了哈!!!

Oracle数据库之多表查询一的更多相关文章

  1. Oracle数据库之单表查询

    接着上一篇的分享,今天主要给大家分享的是关于数据中的单表查询,单表查询很基础,也很重要,但是任何一个初学者必须要掌握的姿势,单表查询就是对单个表进行操作,查询我们想要的数据.单表查询里面的内容也是比较 ...

  2. Oracle数据库之七 多表查询

    七.多表查询 ​ 对于查询在之前已经学过了简单查询.限定查询.查询排序,这些都属于 SQL 的标准语句,而上一章的单行函数,主要功能是为了弥补查询的不足. ​ 而从多表查询开始就正式进入到了复杂查询部 ...

  3. oracle数据库之多表查询二

    多表查询解题思路: 1.分析题目要查询的结果涉及到那几张表 2.将每张表建立关联条件,否则会产生笛卡尔积 3.分清楚查询的条件,然后使用and将条件链接 4.涉及到分组查询的需要使用聚合函数 5.分组 ...

  4. Oracle数据库--解决单张表中数据量巨大(大数据、数据量上百万级别,后查询,更新数据等耗时剧增)

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/QQ578473688/article/details/54561397 思路1:采用备份表 备份表中 ...

  5. PowerDesigner生成Oracle数据库时,表名会带引号问题

    使用PowerDesigner生成数据库建表SQL脚本时,尤其是Oracle数据库时,表名一般会带引号.其实加引号是PL/SQL的规范,数据库会严格按照""中的名称建表,如果没有& ...

  6. oracle数据库误删的表以及表中记录的恢复

    oracle数据库误删的表以及表中记录的恢复 一.表的恢复 对误删的表,只要没有使用PURGE永久删除选项,那么从flash back区恢复回来希望是挺大的.一般步骤有: --1.从flash bac ...

  7. oracle 数据库下所有表结构、数据量及缺失值统计

    表结构 SELECT t1.TABLE_NAME, t1.COLUMN_NAME, t1.DATA_TYPE || '(' || t1.DATA_LENGTH || ')', t2.COMMENTS ...

  8. MySQL/MariaDB数据库的多表查询操作

    MySQL/MariaDB数据库的多表查询操作 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.单表查询小试牛刀 [root@node105.yinzhengjie.org.cn ...

  9. Oracle数据库对象(表空间/同义词/序列/视图/索引)

    数据库对象 Oracle数据库对象: 数据库对象是数据库的组成部分,常常用 CREATE 命令进行创建,可以使用 ALTER 命令修改,用 DROP 执行删除操作. 种类: (1)表空间:所有的数据对 ...

随机推荐

  1. UVA - 11019 Matrix Matcher (二维字符串哈希)

    给你一个n*m的矩阵,和一个x*y的模式矩阵,求模式矩阵在原矩阵中的出现次数. 看上去是kmp在二维情况下的版本,但单纯的kmp已经无法做到了,所以考虑字符串哈希. 类比一维情况下的哈希算法,利用容斥 ...

  2. 2017-2018-1 20179215 第十一周 ShellShock攻击实验

    <Linux内核原理与设计>第十一周作业 ShellShock攻击实验 分组:和20179205王雅哲共同完成实验及博客攥写 实验内容:  Bash中发现了一个严重漏洞shellshock ...

  3. python_广州房价热力图

    调用百度地图api,获取经纬度数据,然后在调用百度地图api,生成热力图 import pandas as pd import numpy as np data = pd.read_excel(r'D ...

  4. 【java规则引擎】之规则引擎解释

    转载:http://www.open-open.com/lib/view/open1417528754230.html 现实生活中,规则无处不在.法律.法规和各种制度均是:对于企业级应用来说,在IT技 ...

  5. CommonJS 规范

    CommonJS 是以在浏览器环境之外构建 JavaScript 生态系统为目标而产生的项目,比如在服务器和桌面环境中. 这个项目最开始是由 Mozilla 的工程师 Kevin Dangoor 在2 ...

  6. Linux之时间、地点、人物、事件、情节

    时间 date 显示当前时间 time cmd 显示 cmd的运行时间 地点 locate 根据文件名,迅速找到文件.基于系统构建的索引 find 根据各种规则找到文件,更强大,但比较慢 wherei ...

  7. Vue项目开启步骤

    ## Build Setup # install cnpm //安装淘宝CNPM镜像npm install -g cnpm --registry=http://registry.npm.taobao. ...

  8. 【转】 Pro Android学习笔记(八七):了解Handler(1):组件和线程

    目录(?)[-] 主线程消息队列和线程池 查看线程信息 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingf ...

  9. 【转】 Pro Android学习笔记(八四):了解Package(3):包间数据共享

    目录(?)[-] 共享User ID的设置 共享资源例子 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowing ...

  10. du 命令 -目前的目录所占的磁盘空间

    Linux du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的. 1.命令格式: du [选项][文件] 2.命令功能 ...