mysql关联查询语句

前言

MySQL中当查询数据来自多张表时需要用到关联查询,其中关联查询又分为内连接、外连接、交叉连接。
创建两张表,分别是学生表、课程表。建表语句如下:

create table employee(
	empNo INT PRIMARY KEY,
	eName varchar(10) not NULL,
	job varchar(10),
	salary VARCHAR(10),
	dempNo VARCHAR(10) not NULL
);

create table demp(
	dempNo VARCHAR(10) PRIMARY KEY,
	dempName VARCHAR(10) not NULL
);
insert into demp VALUES('1','采购部'),('2','运营部'),('3','开发部'),('4','运维部');
insert INTO employee VALUES(1,'张三','采购','2000','1'),(2,'李四','采购','2000','1'),(3,'王五','采购','3000','1'),(4,'赵六','运营','3000','2'),(5,'田七','开发','6000','3');
alter TABLE employee ADD INDEX(dempNo);
alter table demp add INDEX(dempNo);

内连接

内连接又分为等值内连接与非等值内连接。其中等值内连接涉及where子句、on子句、using子句以及自然连接。

等值内连接

where子句

查询每个员工的编号、姓名、薪资、部门名称。

select employee.empNo,employee.eName,employee.salary,demp.dempName from employee,demp WHERE employee.dempNo=demp.dempNo;

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

on子句

查询员工姓名、薪水、部门名称

select e.eName,e.salary,d.dempName FROM demp d inner JOIN employee e ON e.dempNo=d.dempNo;
using子句

查询员工姓名、薪水、部门名称

select e.eName,e.salary,d.dempName from demp d INNER JOIN employee e USING(dempNo);
自然连接

以左右两表相同字段作为关联条件,会自动去掉重复字段。

select e.eName,e.salary,d.dempName FROM demp d NATURAL JOIN employee e;

非等值内连接

> < != between and都属于非等值条件。

select e.empNo,e.eName,e.dempNo,d.dempName from employee e,demp d WHERE e.dempNo=d.dempNo AND e.empNo BETWEEN 1 AND 3;

外连接

外连接主要分为左外连接、右外连接、全外连接。

左外连接

在内连接的基础上保证左表的数据都有,右表的字段用null补充,同样的字段会重复出现。

select * FROM demp d LEFT JOIN employee e on d.dempNo=e.dempNo;

在这里插入图片描述

右外连接

在内连接的基础上保证右表的数据都有,左表的字段用null补充,同样的字段会重复出现。

select * from employee d RIGHT JOIN demp e on d.dempNo=e.dempNo;

在这里插入图片描述

全外连接

在内连接基础上保证左右表的数据都有,是左连接和有连接的并集

select * from employee e full JOIN demp d on e.dempNo=d.dempNo;

需要关注的是,mysql中并不支持全外连接,想要实现全外连接可以通过union。

交叉连接

左表每条记录与右表每条记录首尾相连,创建数据库demp表中有4条数据,employee表中有5条数据,即查询结果共有4*5=20条记录。

select * from demp d CROSS JOIN employee e;

在这里插入图片描述

over;

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值