【缘由】

为了防止数据的冗余,我们会将数据库中表进行拆分,这样就产生了多张表,表与表之间通过主外键关联,但这样又造成了我们查找和修改的困难,如何进行多表之间的查找呢?

我们将一个查询同时设计两个或两个以上的表,称之为连接查询。连接查询是关系数据库中最主要的查询,主要包括内连接、左外连接、右外连接、全外连接等。接下来我们分别来论述每一种连接方式。

首先我有两张表,一张为学生表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,该结果将包含两个表中的所有行,不论另一个表中是否有匹配的值,只要没有匹配的行,就用空值来填充。

【总结】

通过对数据库多表直接操作的总结,对数据库表操作有了更深一步的了解,在原来的基础之上的一个更深层次的学习,联系之前自考学习数据库的知识,方便现在的理解。总结一句话:数据库多表查询,关键在于掌握表之间连接的条件,这样不管是几个表,我们都没有问题。

最新文章

  1. 咱就入个门之NHibernate映射文件配置(一)
  2. tkinter 改变按钮状态
  3. Linux 查看版本详情
  4. sql 随笔 2015-07-02
  5. Bat 中特殊符号
  6. python django 自定义 装饰器
  7. 配置开源项目 SlidingMenu 的问题
  8. COM Interop
  9. 【顶】在node环境下玩转less
  10. PowerPoint实用知识
  11. Gradle下载 Jar 包
  12. JS代码风格自动规整工具Prettier
  13. Chrome浏览器自动填充<input>标签的密码
  14. js JQuery 获取元素和遍历
  15. CentOS 7 Gitlab+Jenkins持续集成+自动化部署
  16. ESLint具体规则设置
  17. Nginx 慢启动与拥塞窗口
  18. 200. Number of Islands (Graph)
  19. php 会话控制(关于cookie的维护与生命周期)
  20. 用css3实现风车效果

热门文章

  1. 高级UI-自定义控件
  2. SQL查询优化思维即SQL子查询
  3. springboot获取上下文ApplicationContext
  4. was8.5和aop的问题:JVMVRFY013 违反类装入约束
  5. 用Python实现扑克牌面试题思路
  6. mysql疑问
  7. ColorMatrixFilter色彩矩阵滤镜
  8. ArcGIS Server SOE地图服务重启特别卡
  9. Maven过滤属性文件,替换属性值
  10. springDataRedis的小demo