MySql连接查询(内连接)

连接查询

环境准备

-- 创建部门表
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
);

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);


知识点-交叉查询【了解】

1.目标

  • 了解交叉查询

2.分析

交叉查询把若干张表(>=2)没有条件的连接在一起,进行展示

3.讲解

  1. 语法
select ... from1,2 ;  

2.练习: 使用交叉查询部门和员工

-- 练习: 使用交叉查询部门和员工的所有信息
select * from emp,dept;
select * from dept,emp;
select emp.*,dept.* from emp,dept;

-- 练习: 使用交叉查询部门的名称和员工id,名称,salary,join_date信息
select dept.name,emp.id,emp.name,emp.salary,emp.join_date from emp,dept;
-- 取别名
select d.name,e.id,e.name,e.salary,e.join_date from emp e,dept d;

在这里插入图片描述以上数据其实是左表的每条数据和右表的每条数据组合。左表有3条,右表有5条,最终组合后3*5=15条数据。

左表的每条数据和右表的每条数据组合,这种效果称为笛卡尔积

-内连接查询【重点】

1.目标

  • 掌握内连接查询

2.分析

交叉查询产生这样的结果并不是我们想要的,那么怎么去除错误的,不想要的记录呢,当然是通过条件过滤。通常要查询的多个表之间都存在关联关系,那么就通过==关联关系(主外键关系)==去除笛卡尔积。

3.讲解

3.1 隐式内连接

隐式里面是没有inner关键字的

select ... from1,2 where 连接条件 [and 其他条件]  --(外键的值等于主键的值) 

练习:查询员工的id,姓名,性别,薪资,加入日期,所属部门

select emp.id,emp.name,emp.gender,emp.salary,emp.join_date,dept.name from emp,dept where emp.dept_id = dept.id;

结果

在这里插入图片描述

显示内连接

显示里面是有inner关键字的

select ... from a [inner] join b on 连接条件 [ where 其它条件]
select * from emp inner join dept on emp.dept_id = dept.id

在这里插入图片描述

练习

查询所有部门下的员工信息,如果该部门下没有员工则不展示.

-- 隐式内连接查询
select * from emp e,dept d where e.dept_id = d.id;
-- 显示内连接查询
select * from emp e inner join dept d on e.dept_id = d.id;

在这里插入图片描述

小结

  1. 内连接的特点(查的是什么东西)
    内连接查询的是公共部分,满足连接条件(主外键关系)的部分
  2. 使用内连接的关键点
    • 从表外键的值等于主表主键的值,过滤无用数据
    • 显示内连接里面的,on只能用主外键关联作为条件,如果还有其它条件,后面加where
  3. 语法
-- 隐式(不出现inner)
select * from a,b where a.主键=b.外键 [and 其它条件]

-- 显示(出现inner)
select * from a [inner] join b on a.主键=b.外键 [where 其它条件]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值