sql连接查询的技巧 (sql server连接查询和分组查询)

sql七种连接方法,多表连接查询sql语句

在使用数据库查询语句时,单表的查询有时候不能满足项目的业务需求;在项目开发过程中,有很多需求都是要涉及到多表的连接查询。

连接查询:也可以叫跨表查询,需要关联多个表进行查询。

以下通过两表实例来详细介绍连接的使用方式。

department表:

sql七种连接方法,多表连接查询sql语句

建表语句:

DROP TABLE IF EXISTS `department`;
CREATE TABLE `department` (
 `id` int(11) NOT  AUTO_INCREMENT,
 `deptName` varchar(30) DEFAULT ,
 `address` varchar(40) DEFAULT ,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

表数据:

INSERT INTO `department`
VALUES (’1’, ’研发部(RD)’, ’2层’);

INSERT INTO `department`
VALUES (’2’, ’人事部(HR)’, ’3层’);

INSERT INTO `department`
VALUES (’3’, ’市场部(MK)’, ’4层’);

INSERT INTO `department`
VALUES (’4’, ’后勤部(MIS)’, ’5层’);

INSERT INTO `department`
VALUES (’5’, ’财务部(FD)’, ’6层’);

employee表:

sql七种连接方法,多表连接查询sql语句

建表语句:

DROP TABLE IF EXISTS `employee`;
CREATE TABLE `employee` (
 `id` int(11) NOT  AUTO_INCREMENT,
 `name` varchar(20) DEFAULT ,
 `dep_id` int(11) DEFAULT ,
 `age` int(11) DEFAULT ,
 `salary` decimal(10,2) DEFAULT ,
 `cus_id` int(11) DEFAULT ,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=109 DEFAULT CHARSET=utf8;

表数据:

INSERT INTO `employee`
VALUES (’1’, ’鲁班’, ’1’, ’10’, ’1000.00’, ’1’);
INSERT INTO `employee`
VALUES (’2’, ’后裔’, ’1’, ’20’, ’2000.00’, ’1’);
INSERT INTO `employee`
VALUES (’3’, ’孙尚香’, ’1’, ’20’, ’2500.00’, ’1’);
INSERT INTO `employee`
VALUES (’4’, ’凯’, ’4’, ’20’, ’3000.00’, ’1’);
INSERT INTO `employee`
VALUES (’5’, ’典韦’, ’4’, ’40’, ’3500.00’, ’2’);
INSERT INTO `employee`
VALUES (’6’, ’貂蝉’, ’6’, ’20’, ’5000.00’, ’1’);
INSERT INTO `employee`
VALUES (’7’, ’孙膑’, ’6’, ’50’, ’5000.00’, ’1’);
INSERT INTO `employee`
VALUES (’8’, ’蔡文姬’, ’30’, ’35’, ’4000.00’, ’1’);

下面进入正题!

01 内连接

图示:

sql七种连接方法,多表连接查询sql语句

作用: 查询两张表的共有部分

语句:

Select <select_list> from tableA A
Inner join tableB B
on A.Key = B.Key

原表数据:

sql七种连接方法,多表连接查询sql语句

示例:

SELECT * from employee e
INNER JOIN department d
on e.depart_id = d.id;

查询结果数据:

sql七种连接方法,多表连接查询sql语句

02 左连接

图示:

sql七种连接方法,多表连接查询sql语句

作用: 把左边表的内容全部查出,右边表只查出满足条件的记录

语句:

Select <select_list> from tableA A
Left Join tableB B
on A.Key = B.Key

原表数据:

sql七种连接方法,多表连接查询sql语句

示例:

SELECT * from employee e
LEFT JOIN department d
on e.depart_id = d.id;

查询结果数据:

sql七种连接方法,多表连接查询sql语句

03 右连接

图示:

sql七种连接方法,多表连接查询sql语句

作用: 把右边表的内容全部查出,左边表只查出满足条件的记录

语句:

Select <select_list> from tableA A
Left Join tableB B
on A.Key = B.Key

原表数据:

sql七种连接方法,多表连接查询sql语句

示例:

SELECT * from employee e
RIGHT JOIN department d
on e.depart_id = d.id;

查询结果数据:

sql七种连接方法,多表连接查询sql语句

04 查询左表独有数据

图示:

sql七种连接方法,多表连接查询sql语句

作用: 查询A的独有数据

语句:

Select <select_list> from tableA A
Left Join tableB B
on A.Key = B.Key where B.key IS 

原表数据:

sql七种连接方法,多表连接查询sql语句

示例:

SELECT * from employee e
LEFT JOIN department d
on e.depart_id = d.id WHERE d.id IS ; 

查询结果数据:

sql七种连接方法,多表连接查询sql语句

05 查询右表独有数据

图示:

sql七种连接方法,多表连接查询sql语句

作用: 查询B的独有数据

语句:

Select <select_list> from tableA A
Right Join tableB B
on A.Key = B.Key where A.key IS 

原表数据:

sql七种连接方法,多表连接查询sql语句

示例:

SELECT * from employee e
RIGHT JOIN department d
on e.depart_id = d.id WHERE e.id IS ;

查询结果数据:

sql七种连接方法,多表连接查询sql语句

06 全连接

图示:

sql七种连接方法,多表连接查询sql语句

作用: 查询两个表的全部信息

语句:

Select <select_list> from tableA A F
ull Outter Join tableB B on A.Key = B.Key

注:Mysql默认不支持此种写法;Oracle支持,在Mysql中可以使用UNION来实现相应操作。

原表数据:

sql七种连接方法,多表连接查询sql语句

示例:

SELECT * from employee e
LEFT JOIN department d
on e.depart_id = d.id

UNION

SELECT * from employee e
RIGHT JOIN department d
on e.depart_id = d.id

查询结果数据:

sql七种连接方法,多表连接查询sql语句

07 查询左右表各自的独有的数据

图示:

sql七种连接方法,多表连接查询sql语句

作用: 查询A和B各自的独有的数据

语句:

Select <select_list> from tableA A F
ull Outter Join tableB B 
on A.Key = B.Key where A.key =  or B.key=

原表数据:

sql七种连接方法,多表连接查询sql语句

示例:

SELECT * from employee e
LEFT JOIN department d
on e.depart_id = d.id WHERE d.id is 

UNION

SELECT * from employee e
RIGHT JOIN department d
on e.depart_id = d.id
WHERE e.depart_id is 

查询结果数据:

sql七种连接方法,多表连接查询sql语句

End.

作者:冰峰

来源:博客园

零基础入职数据分析就业班

课程的形式主要是“直播+录播”

报名专享:课程项目作业+1v1班主任监督学习+爱数据学院学员专属网站+班级答疑群

课程结束后能熟练掌握SQL、Python、Excel、PPT等工具

适合人群:

1.转行(岗位相关,专业相关、对数据分析感兴趣)

2.从事数据分析工作,但是需要提升技能以及增加实战经验

3.应届毕业生入职数据分析