数据库多表链接查询的方式
大家好,在日常学习中分享一下所学的笔记,希望可以帮助到大家~
本篇将多表联查分为三部分来介绍:
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
这种场景下得到的是满足某一条件的公共记录,和独有的记录
以上分享希望能帮到你,有错误及时指正哦~
数据库多表链接查询的方式相关推荐
- MySql 数据库多表链接查询的方式
数据库中多表联查可以通过连接运算实现,即将多张表通过主外键关系关联在一起进行查询,分为非等值查询和等值查询两大类. 一.非等值查询: 语法: select * from 表1,表2 此查询方式的实质是 ...
- 数据库实验3 数据库的单表查询
数据库的单表查询 3.1实验目的及要求 掌握简单表的数据查询.数据排序和表链接查询的操作方法 3.2实验内容 简单查询操作和连接查询方式. 3.3实验步骤 3.3.1单表查询: 1.查询全体学生的学号 ...
- 数据库实验:数据库和表、查询、视图与安全性、存储过程及游标、触发器、综合实验-水果商店进阶
数据库实验:数据库和表.查询.视图与安全性.存储过程及游标.触发器.综合实验-水果商店进阶 实验一.数据库和表 源码1: 源码2: 小结 实验二.查询 源码 小结 实验三.视图.安全性 源码: 小结 ...
- 关系型数据库到HBase的数据储存方式变迁
如今Bigtable型(列族)数据库应用越来越广,功能也很强大.但是很多人还是把它当做关系型数据库在使用,用原来关系型数据库的思维建表.存储.查询.本文以hbase举例讲述数据模式的变化. 传统关系型 ...
- oracle 10g 连接语句,Oracle 10g数据库基础之基本查询语句-下-连接子查询
实验18:表的连接查询 该实验的目的是掌握基本的联合查询. 表的连接 我们要从多张表中要得到信息,就得以一定的条件将表连接在一 实验18:表的连接查询 该实验的目的是掌握基本的联合查询. 表的连接 我 ...
- Android中实现SQLite数据库CRUD操作的两种方式
Android中实现SQLite数据库CRUD操作的两种方式 SQLite是一款轻量级的关系型数据库,具有运行速度.占用资源少的特点.通常只需要几百KB的内存就够了,因此特别适合在移动设备上使用.SQ ...
- Oracle 10g数据库基础之基本查询语句-中-函数
Oracle 10g数据库基础之基本查询语句-中-函数 --资料参考:张烈 张建中<数据库管理员培训讲义> 函数: 使用函数的目的是为了操作数据 将输入的变量处理,返回一个结果. 变量可以 ...
- mysql关键字使用顺序_MySQL数据库之单表查询中关键字的执行顺序
MySQL数据库之单表查询中关键字的执行顺序 1 语法顺序 select distinct from where group by having order by limit 2 执行顺序 from ...
- 使用cglib实现数据库框架的级联查询
写在前面的 这一章是之前写的 <手把手教你写一个Java的orm框架> 的追加内容.因为之前写的数据库框架不支持级联查询这个操作,对于有关联关系的表用起来还是比较麻烦,于是就准备把这个功能 ...
- linux查询hive sql输出文件,数据库-如何将HiveQL查询的结果输出到CSV?
数据库-如何将HiveQL查询的结果输出到CSV? 我们希望将Hive查询的结果放入CSV文件. 我认为该命令应如下所示: insert overwrite directory '/home/outp ...
最新文章
- OpenERP 7.0版本发布
- 超线程技术——超线程技术让(P4)处理器增加5%的裸晶面积,就可以换来15%~30%的效能提升,本质单核模拟双核!和异步编程的思想无异。...
- 【词汇】ab-前缀、al-后缀、norm-词根
- iOS容易造成循环引用的三种场景,就在你我身边!
- 举例什么时候会用到 call(), apply()
- leetcode 112. Path Sum, 113. Path Sum II | 112,113. 路径总和 I, II(Java)
- SharedSDK微信分享不成功,分享之后没有反应
- mysql shell
- .net 通过泛型取值
- MFC dialog 间 交互[2]
- python中静态变量和静态方法_从静态变量引用静态方法
- oracle查看本机字符集,查看、修改oracle字符集,查看oracle版本
- Python使用ffmpeg下载m3u8拼接为视频
- iPhone的OpenGL ES的资源- 18,你必须知道 !
- eXeScope之类的程序资源修改器的使用,很牛! 【只是针对VC++和DELPHI写的程序】
- MySQL和SQLyog安装配置教程
- NC65新增按钮、新增按钮拦截器,某个字段制作超链接
- css样式代码的基本格式
- ireport 5.6.0 添加 Conditional Style 动态加粗字体
- RIP和IGRP实验
热门文章
- vb.net oracle数据库,vb.net 如何与oracle数据库连接
- html显示链接音乐,歌曲链接怎么填_HTML中如何链接本地音乐
- 数学建模之预测模型简要分析
- web前端性能优化的方法
- autojs之提取图片中的红色文字(通过找边界进行裁剪)
- oracle中isnumber函数,Oracle 函数isnumber问题
- 你了解软件测试吗?软件测试和调试有什么区别??
- 第四章 软件项目进度管理
- MySQL建表语句解析表名
- python美女源代码_python程序员爬取百套美女写真集,同样是爬虫,他为何如此突出...