上篇写了一些sql查询的知识,这篇接着写一下有关联表查询的知识。

既然是联表查询,那肯定得多个表啊,所以,我们先创建一个教师表,表名为 teacher,并且向表中插入数据。

准备工作:

创建表语句:

create table teacher
(
id int primary key identity(,) not null,
teaName varchar() not null,
teaAge int,
teaGender int,
teaAddress nvarchar(),
majorId int ,
subject nvarchar()
)

 插入数据语句:

 insert into teacher
(teaName,teaAge,teaGender,teaAddress,majorId,subject)
values
('teacher-A',,,'武汉',,'英语'),
('teacher-B',,,'南京',,'数学'),
('teacher-C',,,'长沙',,'物理'),
('teacher-D',,,'汉口',,'编程'),
('teacher-E',,,'武昌',,'计算机'),
('teacher-F',,,'光谷',,'政治'),
('teacher-G',,,'金融港',,'体育'),
('teacher-H',,,'北京',,'电路分析'),
('teacher-I',,,'伦敦',,'信号与系统')

显示结果:

 1.union

union语句用于合并两个或者多个select语句的结果集,用法是酱紫的:

-- union 用法

select 字段1,字段2,字段3,字段4 from 表1

union 

select 字段5,字段6,字段7,字段8 from 表2

union 

select 字段9,字段10,字段11,字段12 from 表3
...
-- 注意点:这里的 字段1-字段4、字段5-字段8、字段9-字段12....每个select语句 -- 后的字段数必须相同,同时这些字段必须具有相同的数据类型

 注意咯,敲黑板:

select 后的字段,字段数量和字段类型必须保持一致

看个示例:

 select teaName  as 'name',teaAge as 'age',teaGender as 'gender' from teacher

 union

 select stuName ,stuAge,stuGender from student

结果如下:

通过上图,可以看到,两个表中的数据显示在同一张表里了。

下面我们看一下,如果不按照字段数和类型相同的约定写,看情况如何:

(1)数目不一致:

(2)顺序不一致:

发现顺序不一致并不会出问题。

(3)字段类型不一致

第二次敲黑板,注意咯,union会把相同的数据省略掉,如果两张表中有的数据完全相同,则只会保留一个,而省略其他的行。

比如:我查询一下性别(因为性别只有2种值,所以查询结果应该只有两行),下面来看看实际情况:

  由图发现,确实如此,那么问题来了,union把重复的信息省略了,那么如果信息表里确实有两个人的信息完全相同,那要怎么弄呢,用union不就把信息遗漏了吗?

莫慌,这里我们只需要在union后面加上 all ,就可以解决这个问题了,这样,重复的信息就不会省略了。看下面:

从图中可以看出,所有的性别信息全都输出出来了。

2.inner join  内连接

内连接的查询条件比较苛刻哦,只有当查询条件完全匹配的时候才会有数据返回。

先写一下 inner join的用法:

select 某某内容 from 主表

inner join  联系表

on  条件(主表.某字段 = 联系表.某字段)

然后看一个示例 —— 查出student表中stuAddress字段值等于teacher中teaAddress字段值的记录:

下面看一个匹配不上的示例:

查询结果为空。

3.外连接

  外连接分为  左外连接、右外连接、全外连接三种情况。

  用法和内连接类似,如下所示:

1 select *  from  左表  left join 右表 on  条件  -- 左外连接

 select *  from  左表  right join 右表 on 条件  -- 右外连接

 full join on  条件   -- 全外连接

 (1)左外连接

下面看示例:

从上面示例我们可以看到:

左表的内容默认是全部显示的,右表中若有匹配条件的数据,则在左表数据行的右边显示,若没有匹配数据,则显示数据为空(null).

 (2)右外连接

直接看示例:

右表的内容默认是全部显示的,左表中若有匹配条件的数据,则在右表数据行的左边显示,若没有匹配数据,则显示数据为空(null)。

显而易见的,左连接和右连接是一样的,只不过一个是完全保留左表的数据,一个是完全保留右表的数据。

 (3)全外连接

看示例:

全外连接,就相当于结合了左外和右外,把两张表里所有的信息都显示出来,不匹配的地方显示为 null,匹配的地方在同一排显示。

3.交叉连接 cross join

交叉连接会把左表中的每一行与右表中的每一行一一进行排列组合,然后全部显示出来,如果左表有6条记录,右表有7条记录,则查询后的结果应该有42条记录。

示例如下:

联表查询就记录到这里啦,后面会看一下多表查询,嘿嘿,加油!

最后附上我本章的sql脚本:

 -- 联表查询 --
select * from student -- 新建表teacher -- drop table teacher create table teacher
(
id int primary key identity(,) not null,
teaName varchar() not null,
teaAge int,
teaGender int,
teaAddress nvarchar(),
majorId int ,
subject nvarchar()
) -- 向表中插入数据
insert into teacher
(teaName,teaAge,teaGender,teaAddress,majorId,subject)
values
('teacher-A',,,'武汉',,'英语'),
('teacher-B',,,'南京',,'数学'),
('teacher-C',,,'长沙',,'物理'),
('teacher-D',,,'汉口',,'编程'),
('teacher-E',,,'武昌',,'计算机'),
('teacher-F',,,'光谷',,'政治'),
('teacher-G',,,'金融港',,'体育'),
('teacher-H',,,'北京',,'电路分析'),
('teacher-I',,,'伦敦',,'信号与系统') select teaName as 'name',teaAge as 'age',teaGender as 'gender' from teacher union select stuName ,stuGender,stuAddress from student -- union 用法 select 字段1,字段2,字段3,字段4 from 表1 union select 字段5,字段6,字段7,字段8 from 表2 union select 字段9,字段10,字段11,字段12 from 表3
...
-- 注意点:这里的 字段1-字段4、字段5-字段8、字段9-字段12....每个select语句 -- 后的字段数必须相同,同时这些字段必须具有相同的数据类型 select stuGender from student union all select teaGender from teacher -- 内连接 inner join select * from student inner join teacher on teacher.teaAge = student.stuAge -- 左外连接 select * from student left join teacher on teacher.teaAddress = student.stuAddress -- 右外连接 select * from student right join teacher on teacher.teaAddress = student.stuAddress -- 全外连接
select * from student full join teacher on teacher.teaAddress = student.stuAddress -- cross join 交叉连接
select * from student cross join teacher

联表查询 sql

我的邮箱:3074596466@qq.com

sql学习笔记(三)—— 联表查询的更多相关文章

  1. SQL学习笔记三之MySQL表操作

    阅读目录 一 存储引擎介绍 二 表介绍 三 创建表 四 查看表结构 五 数据类型 六 表完整性约束 七 修改表ALTER TABLE 八 复制表 九 删除表 一 存储引擎介绍 存储引擎即表类型,mys ...

  2. MySQL数据库学习笔记----MySQL多表查询之外键、表连接、子查询、索引

    本章主要内容: 一.外键 二.表连接 三.子查询 四.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复 ...

  3. mysql学习笔记--数据库多表查询

    一.内连接[inner join] 1. 语法一:select 列名 from 表1 inner join 表2 on 表1.公共字段=表2.公共字段 2. 语法二:select 列名 from 表1 ...

  4. SQL学习笔记三(补充-3)之MySQL完整性约束

    阅读目录 一 介绍 二 not null与default 三 unique 四 primary key 五 auto_increment 六 foreign key 七 作业 一 介绍 约束条件与数据 ...

  5. Oracle学习笔记_04_多表查询

    一.概念: 1.多表连接有以下几种分法: (1)内连接           vs          外连接 (左.右.满) (2)等值连接        vs         不等值连接 (3)非自连 ...

  6. Mybatis学习笔记之---多表查询(1)

    Mybatis多表查询(1) (一)举例(用户和账户) 一个用户可以有多个账户 一个账户只能属于一个用户(多个账户也可以属于同一个用户) (二)步骤 1.建立两张表:用户表,账户表,让用户表和账户表之 ...

  7. Mybatis学习笔记之---多表查询(2)

    Mybatis多表查询(2) (一)举例 用户和角色 一个用户可以有多个角色,一个角色可以赋予多个用户 (二)步骤 1.建立两张表:用户表,角色表,让用户表和角色表具有多对多的关系.需要使用中间表,中 ...

  8. MySQL学习笔记8——多表查询

    多表查询 多表查询 *合并结果集 *连接查询 *子查询 合并结果集 *要求被合并的表中,列的类型和列数相同(实际上是查询的结果集列类型和列数相同即可) *UNION,去除重复行 *UNION ALL, ...

  9. MySql 在cmd下的学习笔记 —— 有关多表查询的操作(内连接,外连接,交叉连接)

    mysql> create table test5( -> id int, ) -> )engine myisam charset utf8; Query OK, rows affe ...

  10. SQL学习笔记三(补充-2)之MySQL数据类型

    阅读目录 一 介绍 二 数值类型 三 日期类型 四 字符串类型 五 枚举类型与集合类型 一 介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的宽度,但宽度是可选的 ...

随机推荐

  1. NavigationView头部设置监听事件

    直接写解决方法吧: 1.将XML里的静态引入删除: <android.support.design.widget.NavigationView android:id="@+id/nav ...

  2. 函数strlen()和sizeof的区别

    函数strlen()和sizeof的区别: #include<stdio.h> #include<stdlib.h> #include<string.h> #def ...

  3. apigateway-kong(二)admin-api(结合实例比官网还详细)

    部署好kong之后,则需要将我们自己的接口加入到kong中管理,kong提供了比较全面的restful api,每个版本会有所不同,下面的记录基于kong v0.13.x kong的8001端口是re ...

  4. .NET高性能编程 - C#如何安全、高效地玩转任何种类的内存之Span的本质(一)。

    前言 作为.net程序员,使用过指针,写过不安全代码吗? 为什么要使用指针,什么时候需要使用它,以及如何安全.高效地使用它? 如果能很好地回答这几个问题,那么就能很好地理解今天了主题了.C#构建了一个 ...

  5. 机器学习web服务化实战:一次吐血的服务化之路

    背景 在公司内部,我负责帮助研究院的小伙伴搭建机器学习web服务,研究院的小伙伴提供一个机器学习本地接口,我负责提供一个对外服务的HTTP接口. 说起人工智能和机器学习,python是最擅长的,其以开 ...

  6. CSS3 之 童年的纸飞机

    今天我们来折纸飞机(可以飞出去的那种哦) 基本全用css来实现,只有一小部分的js 首先看一下飞机的构造 灰色区域为可折叠区域 白色区域为机身 三角形由border画出来的再经过各种平移翻转变成上图 ...

  7. frida的用法--Hook Java代码篇

    frida是一款方便并且易用的跨平台Hook工具,使用它不仅可以Hook Java写的应用程序,而且还可以Hook原生的应用程序. 1. 准备 frida分客户端环境和服务端环境.在客户端我们可以编写 ...

  8. 【ODI】| 数据ETL:从零开始使用Oracle ODI完成数据集成(二)

    前一节已经完成了Oracle数据库和ODI的安装,并已经为ODI在Oracle数据库中创建了两个用户,分别用于存放主资料库数据和工作资料库数据,在ODI中完成主资料库和工作资料库的创建,也分别为其创建 ...

  9. Java集合详解8:Java集合类细节精讲

    今天我们来探索一下Java集合类中的一些技术细节.主要是对一些比较容易被遗漏和误解的知识点做一些讲解和补充.可能不全面,还请谅解. 本文参考:http://cmsblogs.com/?cat=5 具体 ...

  10. 学习python的第二天

    4.26自我总结 一.程序语言 1.机械语言 由于0和1组成 优点:执行效率快 缺点:操作麻烦繁琐 2.汇编语言 比机械语言好点 优点:比机械语言操作方便 缺点,执行慢 3.高级语言 主要两个,jav ...