SQL版本:多表连接查询(两张表为例)
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版本:多表连接查询(两张表为例)相关推荐
- SQL三个表连接查询
t_type_info(类别信息表) 序号 字段名称 字段类型 大小 允许为空 备注 1 type_id int 11 主键 类型id 2 type_name Varchar 30 否 类别名 t_b ...
- 动人的牵线美的连接符-两张表的查询(一)
牵线,想起过去不久的七夕,喜鹊为牛郎织女搭起约会的鹊桥,看是多美丽的天衣无缝的相逢. 最近在做高校云4.0项目,从考评跑到UI,成功地被调到成绩系统.说实话对成绩系统的 ...
- mysql 左连接两张表_mysql左连接右连接(查询两张表不同的数据)
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 : right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录: inner join(等值连 ...
- SQL多表连接查询(具体实例)
本文主要列举两张和三张表来讲述多表连接查询. 新建两张表: 表1:student 截图例如以下: 表2:course 截图例如以下: (此时这样建表仅仅是为了演示连接SQL语句.当然实际开发中我们 ...
- SQL多表连接查询(详细实例)
本文主要列举两张和三张表来讲述多表连接查询. 新建两张表: 表1:student 截图如下: 表2:course 截图如下: (此时这样建表只是为了演示连接SQL语句,当然实际开发中我们不会这样建表, ...
- mysql 连接查询两个条件_MySQL之多表查询一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习...
一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都会建一个数据库,那数据库里面是不是存了好多张表啊,不可能把所有的数据都放到一张表里面,肯定要分表来存数据,这样节 ...
- server多笔记录拼接字符串 sql_第四章、SQL Server数据库查询大全(单表查询、多表连接查询、嵌套查询、关联子查询、拼sql字符串的查询、交叉查询)...
4.1.查询的类型 declare @value as int set @value = 50 select 'age:'as age,2008 years,@valueas va --这种查询时跟 ...
- SQL——多表连接查询
若一个查询同时涉及两个或两个以上的表, 则称之为连接查询(在FROM子句中体现). 参与连接的表可有多个,但连接操作在两个表之间进行,即两两连接. 连接查询包括: 内连接 等值连接:用"=& ...
- Oracle数据库表连接查询并分页SQL语句提示未明确定义列
Oracle数据库表连接查询并分页SQL语句提示未明确定义列 两张表中的字段: t_product t_category product_id category_id product_name cat ...
最新文章
- BZOJ 1194: [HNOI2006]潘多拉的盒子 [DP DFA]
- 企业单点登录解决方案(CAS)之二安装要求
- android 数字时钟代码大全,Android自定义view实现数字时钟
- 某office前台任意文件上传漏洞分析
- 【Mybatis】 mapper XML 文件中使用 collection实现一对多关联
- jquery css 定义背景不重复
- FreeBSD从零开始---安装后配置(三)
- docker php composer 使用_「PHP编程」如何使用Docker制作自己的LNMP/LAMP镜像
- Android开源源码推荐(一)
- 大学计算机专业的实验室图片,清华大学计算机系人工智能实验室.PDF
- Android组件化开发实践
- java http 401_401 API请求状态错误
- 2021-08-11好奇心
- win11关闭防火墙
- 童年游戏 世嘉MD 美少女战士 最高难度 一命通关视频
- 【机房合作】——数风流人物,还看今朝
- 抓取微信群聊人数,并保存到excel表格
- MyBatis执行一次数据库操作的原理以及顺序
- ​docker容器加速
- Python爬虫_某宝网案例