SQL版本:

   数据准备:

#创建一个数据库company
CREATE DATABASE IF NOT EXISTS company;#创建部门表
CREATE TABLE dept(id INT PRIMARY KEY AUTO_INCREMENT,`name` VARCHAR(20)
);#往部门表中插入多条数据
INSERT INTO dept(`name`) VALUES ('研发部'),('销售部'),('财务部');#查询部门表中数据
SELECT * FROM dept;#创建员工表
CREATE TABLE employee(id INT PRIMARY KEY AUTO_INCREMENT,`name` VARCHAR(10),address VARCHAR(30),age INT,sex CHAR(1),dept_id INT,FOREIGN KEY (dept_id) REFERENCES dept(id)  #外键,关联部门表(部门表的主键)
);#往员工表中插入多条员工信息
INSERT INTO employee VALUES(NULL,'小明','南昌',24,'男',1),(NULL,'小红','九江',20,'女',1),(NULL,'小兰','抚州',19,'女',2),(NULL,'小龙','宜春',18,'男',2),(NULL,'小军','赣州',23,'男',3);#查询员工表中的数据
SELECT * FROM employee;

 显式内连接 --(不显示没有匹配记录的数据)

  • 概念:无论是显式内连接还是隐式内连接其查询结果是一样的,只是写法不同。显式内连接使用INNER JOIN …ON语句,可以省略INNER

select 列名 from 左表 inner join 右表 on 主表.主键=从表.外键

案例:查询小龙的信息,显示员工id,姓名,地址,年龄和所在的部门名称,我们发现需要联合2张表同时才能查询出需要的数据,使用内连接。

SELECT e.id,e.name,e.address,e.age,d.name
FROM employee e INNER JOIN dept d
ON d.id = e.dept_id
WHERE e.name = "小龙";

左外连接 --(显示没有匹配记录的数据)
左连接的概念:查询的数据以左表为准,即使在其他表中没有匹配的记录也会显示出来。

select 列名 from 左表 left join 右表 on 表连接条件

注:左外连接使用LEFT OUTER JOIN … ON,其中OUTER可以省略

案例:在部门表中增加一个行政部,需要查询所有的部门和员工,将部门表设置成左表,员工表设置成右表;比较内连接和左外连接的区别。

#左外连接
SELECT * FROM dept d LEFT JOIN employee e ON d.id = e.dept_id

全连接
根据上面简述,我们知道左连接是无论如何左表的数据都能够显示全,右连接是右表的数据无论如何都能够显示全,那么如果我们希望左表和右表的数据都能够显示全面呢(在对方表中没有匹配的数据就以null补齐)?这种连接查询我们称之为全连接(full join),但是很遗憾,MySQL并没有提供全连接,但Oracle支持;

虽然MySQL不支持全连接,但是我们可以利用MySQL提供的其它功能来完成全连接的功能:left join + right join

SELECT * FROM dept d LEFT JOIN employee e ON d.id = e.dept_id
UNION        --union 是并集的意思
SELECT * FROM dept d RIGHT JOIN employee e ON d.id =e.dept_id;

SQL版本:多表连接查询(两张表为例)相关推荐

  1. SQL三个表连接查询

    t_type_info(类别信息表) 序号 字段名称 字段类型 大小 允许为空 备注 1 type_id int 11 主键 类型id 2 type_name Varchar 30 否 类别名 t_b ...

  2. 动人的牵线美的连接符-两张表的查询(一)

            牵线,想起过去不久的七夕,喜鹊为牛郎织女搭起约会的鹊桥,看是多美丽的天衣无缝的相逢.         最近在做高校云4.0项目,从考评跑到UI,成功地被调到成绩系统.说实话对成绩系统的 ...

  3. mysql 左连接两张表_mysql左连接右连接(查询两张表不同的数据)

    left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 : right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录: inner join(等值连 ...

  4. SQL多表连接查询(具体实例)

    本文主要列举两张和三张表来讲述多表连接查询. 新建两张表: 表1:student  截图例如以下: 表2:course  截图例如以下: (此时这样建表仅仅是为了演示连接SQL语句.当然实际开发中我们 ...

  5. SQL多表连接查询(详细实例)

    本文主要列举两张和三张表来讲述多表连接查询. 新建两张表: 表1:student 截图如下: 表2:course 截图如下: (此时这样建表只是为了演示连接SQL语句,当然实际开发中我们不会这样建表, ...

  6. mysql 连接查询两个条件_MySQL之多表查询一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习...

    一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都会建一个数据库,那数据库里面是不是存了好多张表啊,不可能把所有的数据都放到一张表里面,肯定要分表来存数据,这样节 ...

  7. server多笔记录拼接字符串 sql_第四章、SQL Server数据库查询大全(单表查询、多表连接查询、嵌套查询、关联子查询、拼sql字符串的查询、交叉查询)...

    4.1.查询的类型 declare @value as int set @value = 50 select  'age:'as age,2008 years,@valueas va --这种查询时跟 ...

  8. SQL——多表连接查询

    若一个查询同时涉及两个或两个以上的表, 则称之为连接查询(在FROM子句中体现). 参与连接的表可有多个,但连接操作在两个表之间进行,即两两连接. 连接查询包括: 内连接 等值连接:用"=& ...

  9. Oracle数据库表连接查询并分页SQL语句提示未明确定义列

    Oracle数据库表连接查询并分页SQL语句提示未明确定义列 两张表中的字段: t_product t_category product_id category_id product_name cat ...

最新文章

  1. BZOJ 1194: [HNOI2006]潘多拉的盒子 [DP DFA]
  2. 企业单点登录解决方案(CAS)之二安装要求
  3. android 数字时钟代码大全,Android自定义view实现数字时钟
  4. 某office前台任意文件上传漏洞分析
  5. 【Mybatis】 mapper XML 文件中使用 collection实现一对多关联
  6. jquery css 定义背景不重复
  7. FreeBSD从零开始---安装后配置(三)
  8. docker php composer 使用_「PHP编程」如何使用Docker制作自己的LNMP/LAMP镜像
  9. Android开源源码推荐(一)
  10. 大学计算机专业的实验室图片,清华大学计算机系人工智能实验室.PDF
  11. Android组件化开发实践
  12. java http 401_401 API请求状态错误
  13. 2021-08-11好奇心
  14. win11关闭防火墙
  15. 童年游戏 世嘉MD 美少女战士 最高难度 一命通关视频
  16. 【机房合作】——数风流人物,还看今朝
  17. 抓取微信群聊人数,并保存到excel表格
  18. MyBatis执行一次数据库操作的原理以及顺序
  19. ​docker容器加速
  20. Python爬虫_某宝网案例

热门文章

  1. i3处理器_i3-8100F是什么意思?i3-8100F和8100的区别
  2. 【Windows】C盘找不到目录?——显示被系统隐藏的目录的方法
  3. Uniapp选项卡切换(有图示例)
  4. QT中调佣FindWindow返回空值
  5. 台式计算机会淘汰吗,一体机电脑VS台式机,台式机会被淘汰吗?
  6. 解决mongodb查询慢的问题
  7. 分享一个黑苹果OC引导AMD 2700X+微星x370Gaming PlusEFI
  8. web浏览器获取摄像头并拍照
  9. 毕业论文开题报告---范文---基于Android的学生考勤管理系统的设计与实现
  10. go-elasticsearch 官方包操作合集