大家好,在日常学习中分享一下所学的笔记,希望可以帮助到大家~

本篇将多表联查分为三部分来介绍:

1. 通过Select子句进行查询

2.  通过内连接 inner join进行查询

3. 通过外连接left join,left outer join,right join,right outer join,union进行查询

一、通过SELECT子句进行多表查询

语法:

select  字段名

from 表1,表2 …

where 表1.字段 = 表2.字段

and 其它查询条件

例:以学生表student和班级表class为例

Select   student.sid,  student.sname,  student.classid, class.classid,  class.classname

from student,class

where student.classid = class.classid

注意:上面的代码中,以两张表相同的字段信息作为条件,进行两个表联查,但在实际开发中不建议这样使用,最好用主外键约束来实现。

二、通过内连接 inner join进行查询

语法:

select  字段名

from 表1

inner join 表2

on 表1.字段 = 表2.字段

例:以学生表student和班级表class为例

select   student.sid,  student.sname,  student.classid, class.classid,  class.classname

from student

inner join class

on student.classid = class.classid

这种场景下得到的是满足某一条件的student,class内部的数据;正因为得到的是内部共有数据,所以连接方式称为内连接。

三、通过外连接left join,left outer join,right join,right outer join,union进行查询

1.left join

语法:

select  字段名

from 表1

left join 表2

on 表1.字段 = 表2.字段

例:以学生表student和班级表class为例

select   student.*  , class.*

from student

left join class

on student.classid = class.classid

结果如下,class表中不存在的记录填充Null:

这种场景下得到的是student的所有数据,和满足某一条件的class的数据;

2.left outer join(相当于left join  +  [where 表2.字段 is null])

语法:

select 字段名

from 表1

left join 表2

on 表1.字段 = 表2.字段

where 表2.字段 is null

例:以学生表student和班级表class为例

select   student.sid,student.sname,class.classid,class.classname

from student

left join class

on student.classid = class.classid

where class.classid is null

这种场景下得到的是student中的所有数据减去"与class满足同一条件 的数据",然后得到的student剩余数据

3.right join

语法:

select  字段名

from 表1

right  join 表2

on 表1.字段 = 表2.字段

例:以学生表student和班级表class为例

select  student.*  , class.*

from student

right join class

on student.classid = class.classid

这种场景下得到的是class的所有数据,和满足某一条件的student的数据;

4.right outer join(相当于right join  +  [where 表1.字段 is null])

语法:

select 字段名

from 表1

right join 表2

on 表1.字段 = 表2.字段

where 表1.字段 is null

例:以学生表student和班级表class为例

select   student.sid,student.sname,class.classid,class.classname

from student

right join class

on student.classid = class.classid

where student.classid is null

这种场景下得到的是class中的所有数据减去 "与student满足同一条件 的数据“,然后得到的class剩余数据;

4.left join  union right join

语法:

select  字段名

from 表1

left join 表2

on 表1.字段 = 表2.字段

union

select  字段名

from 表1

right  join 表2

​​​​​​​on 表1.字段 = 表2.字段

例:以学生表student和班级表class为例

select   student.*  , class.*

from student

left join class

on student.classid = class.classid

union

select  student.*  , class.*

from student

right join class

on student.classid = class.classid

这种场景下得到的是满足某一条件的公共记录,和独有的记录

以上分享希望能帮到你,有错误及时指正哦~

数据库多表链接查询的方式相关推荐

  1. MySql 数据库多表链接查询的方式

    数据库中多表联查可以通过连接运算实现,即将多张表通过主外键关系关联在一起进行查询,分为非等值查询和等值查询两大类. 一.非等值查询: 语法: select * from 表1,表2 此查询方式的实质是 ...

  2. 数据库实验3 数据库的单表查询

    数据库的单表查询 3.1实验目的及要求 掌握简单表的数据查询.数据排序和表链接查询的操作方法 3.2实验内容 简单查询操作和连接查询方式. 3.3实验步骤 3.3.1单表查询: 1.查询全体学生的学号 ...

  3. 数据库实验:数据库和表、查询、视图与安全性、存储过程及游标、触发器、综合实验-水果商店进阶

    数据库实验:数据库和表.查询.视图与安全性.存储过程及游标.触发器.综合实验-水果商店进阶 实验一.数据库和表 源码1: 源码2: 小结 实验二.查询 源码 小结 实验三.视图.安全性 源码: 小结 ...

  4. 关系型数据库到HBase的数据储存方式变迁

    如今Bigtable型(列族)数据库应用越来越广,功能也很强大.但是很多人还是把它当做关系型数据库在使用,用原来关系型数据库的思维建表.存储.查询.本文以hbase举例讲述数据模式的变化. 传统关系型 ...

  5. oracle 10g 连接语句,Oracle 10g数据库基础之基本查询语句-下-连接子查询

    实验18:表的连接查询 该实验的目的是掌握基本的联合查询. 表的连接 我们要从多张表中要得到信息,就得以一定的条件将表连接在一 实验18:表的连接查询 该实验的目的是掌握基本的联合查询. 表的连接 我 ...

  6. Android中实现SQLite数据库CRUD操作的两种方式

    Android中实现SQLite数据库CRUD操作的两种方式 SQLite是一款轻量级的关系型数据库,具有运行速度.占用资源少的特点.通常只需要几百KB的内存就够了,因此特别适合在移动设备上使用.SQ ...

  7. Oracle 10g数据库基础之基本查询语句-中-函数

    Oracle 10g数据库基础之基本查询语句-中-函数 --资料参考:张烈 张建中<数据库管理员培训讲义> 函数: 使用函数的目的是为了操作数据 将输入的变量处理,返回一个结果. 变量可以 ...

  8. mysql关键字使用顺序_MySQL数据库之单表查询中关键字的执行顺序

    MySQL数据库之单表查询中关键字的执行顺序 1 语法顺序 select distinct from where group by having order by limit 2 执行顺序 from ...

  9. 使用cglib实现数据库框架的级联查询

    写在前面的 这一章是之前写的 <手把手教你写一个Java的orm框架> 的追加内容.因为之前写的数据库框架不支持级联查询这个操作,对于有关联关系的表用起来还是比较麻烦,于是就准备把这个功能 ...

  10. linux查询hive sql输出文件,数据库-如何将HiveQL查询的结果输出到CSV?

    数据库-如何将HiveQL查询的结果输出到CSV? 我们希望将Hive查询的结果放入CSV文件. 我认为该命令应如下所示: insert overwrite directory '/home/outp ...

最新文章

  1. OpenERP 7.0版本发布
  2. 超线程技术——超线程技术让(P4)处理器增加5%的裸晶面积,就可以换来15%~30%的效能提升,本质单核模拟双核!和异步编程的思想无异。...
  3. 【词汇】ab-前缀、al-后缀、norm-词根
  4. iOS容易造成循环引用的三种场景,就在你我身边!
  5. 举例什么时候会用到 call(), apply()
  6. leetcode 112. Path Sum, 113. Path Sum II | 112,113. 路径总和 I, II(Java)
  7. SharedSDK微信分享不成功,分享之后没有反应
  8. mysql shell
  9. .net 通过泛型取值
  10. MFC dialog 间 交互[2]
  11. python中静态变量和静态方法_从静态变量引用静态方法
  12. oracle查看本机字符集,查看、修改oracle字符集,查看oracle版本
  13. Python使用ffmpeg下载m3u8拼接为视频
  14. iPhone的OpenGL ES的资源- 18,你必须知道 !
  15. eXeScope之类的程序资源修改器的使用,很牛! 【只是针对VC++和DELPHI写的程序】
  16. MySQL和SQLyog安装配置教程
  17. NC65新增按钮、新增按钮拦截器,某个字段制作超链接
  18. css样式代码的基本格式
  19. ireport 5.6.0 添加 Conditional Style 动态加粗字体
  20. RIP和IGRP实验

热门文章

  1. vb.net oracle数据库,vb.net 如何与oracle数据库连接
  2. html显示链接音乐,歌曲链接怎么填_HTML中如何链接本地音乐
  3. 数学建模之预测模型简要分析
  4. web前端性能优化的方法
  5. autojs之提取图片中的红色文字(通过找边界进行裁剪)
  6. oracle中isnumber函数,Oracle 函数isnumber问题
  7. 你了解软件测试吗?软件测试和调试有什么区别??
  8. 第四章 软件项目进度管理
  9. MySQL建表语句解析表名
  10. python美女源代码_python程序员爬取百套美女写真集,同样是爬虫,他为何如此突出...