SQl Server 数据库多表连接
【缘由】
为了防止数据的冗余,我们会将数据库中表进行拆分,这样就产生了多张表,表与表之间通过主外键关联,但这样又造成了我们查找和修改的困难,如何进行多表之间的查找呢?
我们将一个查询同时设计两个或两个以上的表,称之为连接查询。连接查询是关系数据库中最主要的查询,主要包括内连接、左外连接、右外连接、全外连接等。接下来我们分别来论述每一种连接方式。
首先我有两张表,一张为学生表T_Student,一张为选课信息表T_ChooseCorse表,这两张表中的字段分别如下表:
(为了方便说明问题,表中字段比较少)
【内连接】
使用内连接时,如果两个表的相关字段满足连接条件,则将信息从两个表中提取数据并组合成新的记录。
语句:
SELECT * FROM T_Student
INNER JOIN T_ChooseCourse
ON T_Student.Sno = T_ChooseCourse.Sno
Where T_Student.Dept = '计算机系'
INNER JOIN 将两张表连接起来,ON是连接两个表的条件,只有当学生表的学号和课程选择表的学号相等时将两张表连接起来组合成新的记录,Where后连接查询的条件,该示例查询条件为专业是'计算机系'。 当需要连接多张表时,只需要在ON后面再连接新的表和连接条件就可以,这里不再举例。
【自连接】
自连接:是一种特殊的内连接,它是指相互连接的表在物理上是一张表,但在逻辑上将其看成是两张表。用通俗的话来讲就是:在数据库中是一张表比如T_Student,但是我们在使用时可以将其认为是两张表。
下面举一个例子:要查询与李晨在同一个系学习的学生的姓名
语句:
SELECT S2.Sname FROM T_Student
S1 JOIN T_Student
S2
ON S1.Dept = S2.Dept
Where S1.SName = '李晨'
AND S2.Name != '李晨'
解释:自连接使用的是同一个表,必须有别名,此例中别名分别为S1、S2,这个语句首先从表中找到李晨在哪个系,然后找到此系的其他学生(李晨除外)。
【外链接】
1、左外链接
语句:
SELECT S.SNo,SName,Cno,Grade
FROM T_Student S
LEFT OUTER JOIN T_ChooseCourse
ON S.SNo = T_ChooseCourse.SNo
解释:LEFT OUTER JOIN 只指定了左表的所有行,左表的某行在右表中可以有匹配的行,也可以没有匹配的行,如果没有匹配的行,则在相关联的结果集行中右表的所有选择列均为空值。
2、右外连接
右外连接时左外连接的反向连接,将右表中所有行返回。左表中可以有匹配的行,也可以没有。如果左表没有匹配的行,则将返回空值。
3、全外连接
当需要保留两个表中都不满足连接条件的的数据行,则可使用完全外连接。用FULL [OUTER] JOIN,该结果将包含两个表中的所有行,不论另一个表中是否有匹配的值,只要没有匹配的行,就用空值来填充。
【总结】
通过对数据库多表直接操作的总结,对数据库表操作有了更深一步的了解,在原来的基础之上的一个更深层次的学习,联系之前自考学习数据库的知识,方便现在的理解。总结一句话:数据库多表查询,关键在于掌握表之间连接的条件,这样不管是几个表,我们都没有问题。
SQl Server 数据库多表连接的更多相关文章
- SQL Server三种表连接原理
在SQL Server数据库中,查询优化器在处理表连接时,通常会使用一下三种连接方式: 嵌套循环连接(Nested Loop Join) 合并连接 (Merge Join) Hash连接 (Hash ...
- MS Sql Server 数据库或表修复(DBCC CHECKDB)
MS Sql Server 提供了很多数据库修复的命令,当数据库质疑或是有的无法完成读取时可以尝试这些修复命令. 1. DBCC CHECKDB 重启服务器后,在没有进行任何操作的情况下,在SQL ...
- SQL server 数据库用户表名称
转自(http://blog.163.com/jlj_sk/blog/static/22579293200861422833924/) 取得SQL server 数据库中 所有用户表名称 select ...
- SQL Server数据库、表、数据类型基本概念
一.SQL Server的数据存储结构 SQL Server是一个数据库管理系统,需要以有效方式存储高容量数据.要更好地理解SQL Server处理数据的方式,就需要了解数据的存储结构. 1.文件类型 ...
- SQL Server数据库(表的创建)
表的创建 1.创建列(字段):列名+类型 2.设置主键列:能够唯一表示一条数据 3.设置唯一键:设计--索引/键--添加--唯一键(选择列)--确定 唯一键的内容不能重复 4.外键关系:一张表(从表) ...
- SQL SERVER数据库的表中修改字段的数据类型后,不能保存
在数据库里面建了一个表,可是由于对SQL SERVER的建表功能不熟悉,不知道把主键设成什么是好,就先设置了个TEXT类型,可是后来朋友们告诉我说,TEXT类型容易让数据文件变得很大,还 是改成一 ...
- SQL Server中多表连接时驱动顺序对性能的影响
本文出处:http://www.cnblogs.com/wy123/p/7106861.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错 ...
- sql server 实现多表连接查询
项目中要实现多表查询,用外连接实现. a表 a(aid,aname) 其中aid为pk b表 b(aid,bname,aid) 其中 bid为pk,aid为fk c表 c(cid,cname,aid) ...
- MS Sql Server 数据库或表修复(Log日志文件损坏的修复方法)
----------------- [1] use master go sp_configure reconfigure with override go ----------------- [2] ...
随机推荐
- 第07组 Beta冲刺(2/4)
队名:秃头小队 组长博客 作业博客 组长徐俊杰 过去两天完成的任务:学习了很多东西 Github签入记录 接下来的计划:继续学习 还剩下哪些任务:后端部分 燃尽图 遇到的困难:自己太菜了 收获和疑问: ...
- 什么是渐进式Web App(PWA)?为什么值得关注?
转载自:https://blog.csdn.net/mogoweb/article/details/79029651 在开始PWA这个话题之前,我们先来看看Internet现状. 截至2017年1月, ...
- 10 Spring框架--基于注解和xml的配置的应用案例
1.项目结构 2.基于xml配置的项目 <1>账户的业务层接口及其实现类 IAccountService.java package lucky.service; import lucky. ...
- [转帖]抢先AMD一步,英特尔推出新处理器,支持LPDDR5!
抢先AMD一步,英特尔推出新处理器,支持LPDDR5! http://www.eetop.cn/cpu_soc/6946240.html 2019.10 intel的最新技术发展. 近日,知名硬件爆料 ...
- Kafka Broker | 命令行选项和过程
1.目标 在这个Apache Kafka教程中,我们将学习Kafka Broker.Kafka Broker管理主题中的消息存储.如果Apache Kafka有多个代理,那就是我们所说的Kafka集群 ...
- Java基础笔试练习(九)
1.下面所示的java代码,运行时,会产生()类型的异常 ? int Arry_a[] = new int[10]; System.out.println(Arry_a[10]); A.Arithme ...
- Java开发笔记(一百一十四)利用Socket传输文本消息
前面介绍了HTTP协议的网络通信,包括接口调用.文件下载和文件上传,这些功能固然已经覆盖了常见的联网操作,可是HTTP协议拥有专门的通信规则,这些规则一方面有利于维持正常的数据交互,另一方面不可避免地 ...
- jmeter_图形监控
图形监控插件下载: http://jmeter-plugins.org/downloads/all/ 下载: JMeterPlugins-Standard-1.4.0 ServerAgent-2. ...
- vue3 父组件给子组件传值 provide & inject
介绍 provide() 和 inject() 可以实现嵌套组件之间的数据传递. 这两个函数只能在 setup() 函数中使用. 父级组件中使用 provide() 函数向下传递数据. 子级组件中使用 ...
- Deep one-class classification
Deep one-class classification 2019-03-17 23:09:59 zpainter 阅读数 1027 收藏 文章标签: 单分类问题异常检测 更多 分类专栏: 论文 ...