Day05数据库基础之多表查询(内连接、外连接、子查询)

前言

前面我们学习了DQL,都是基于1张表的基本查询和条件查询,今天学习的内容是关于多表查询~

1、使用内连接进行多表查询
1.隐式内连接
2.显式内连接

2、用外连接进行多表查询

1.左外连接查询
2.右外连接查询

3、使用子查询进行多表查询
1.基本子查询
2.子查询的不同情况
(1)单行单列
(2)多行单列
(3)多行多列
4、关于多表查询的练习
在这里插入图片描述

一、多表查询

1、例子

  • 1.创建两张表:
创建部门表:
CREATE TABLE dept(
			id INT PRIMARY KEY AUTO_INCREMENT,
			NAME VARCHAR(20)
		);
		INSERT INTO dept (NAME) VALUES ('开发部'),('市场部'),('财务部');
创建员工表:
	CREATE TABLE emp (
		id INT PRIMARY KEY AUTO_INCREMENT,
		NAME VARCHAR(10),
		gender CHAR(1), -- 性别
		salary DOUBLE, -- 工资
		join_date DATE, -- 入职日期
		dept_id INT,
		FOREIGN KEY (dept_id) REFERENCES dept(id) -- 外键,关联部门表(部门表的主键)
	);
	INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('孙悟空','男',7200,'2013-02-24',1);
	INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('猪八戒','男',3600,'2010-12-02',2);
	INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('唐僧','男',9000,'2008-08-08',2);
	INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('白骨精','女',5000,'2015-10-07',3);
	INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('蜘蛛精','女',4500,'2011-03-14',1);
  • 2.查询emp员工表 select * from emp;
    在这里插入图片描述

  • 3.查询的dept部门表select * from dept;
    在这里插入图片描述

  • 4.当我们同时查询两张表时select * from emp,dept;
    在这里插入图片描述
    为什么上面的是无用的数据呢?
    dept_id 作为外键是需要与主键id一一对应的,所以标记的数据对我们来说是没有用的。

  • 引入新概念
    查询的这15条数据,有个专有的名词,叫笛卡尔积

2、笛卡尔积

1.定义:有两个集合A,B ,取这两个集合的所有组成情况

~~所以应该怎样查询才不会出现这些无用数据呢?

3、多表查询的分类

1.内连接查询

(1)隐式内连接:使用where条件消除无用数据
语法:select 列名(即字段名) from 表1,表2 where 条件

  • 查询所有员工信息和对应的部门信息
select * from emp,dept where emp.dept_id = dept.id;

运行结果:
在这里插入图片描述

  • 查询员工表的姓名、性别、部门表的姓名
方法一:
select emp.name,emp.gender,dept.name from emp,dept where emp.dept_id=dept.id; 
方法二:起别名
select 
t1.name, --员工表的姓名
t1.gender,-- 员工表的性别
t2.name   -- 部门表的姓名
from 
emp t1,-- 员工表起别名t1
dept t2 -- 部门表起别名t2
where t1.dept_id = t2.id;

运行结果:
在这里插入图片描述
(2)显式内连接

  • 语法select 列名 from 表名1 [inner] join 表名2 on 条件;

例如:查询唐僧的信息,显示员工 id,姓名,性别,工资和所在的部门名称

  • 分析:
    1)确定查询哪些表?—员工 id,姓名,性别,工资在emp表,部门在dept表;
    2)条件:emp.dept_id=dept.id
    3)确定查询条件:唐僧的信息,emp.name=‘唐僧’
    4)确定查询字段:查询唐僧的信息,显示员工 id,姓名,性别,工资和所在的部门名称
select 
	e.`id`,
	e.`name`
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值