MySQL双表查询如何在两个表中检索数据(mysql中两表查询)

MySQL双表查询:如何在两个表中检索数据?

MySQL是当今最流行的数据库管理系统之一。它拥有快速、可靠、安全、易用等很多优点。在MySQL中,双表查询是一种非常常见的查询方式,可以从两个或多个表中检索数据。本文将介绍如何在MySQL中进行双表查询。

双表查询的使用场景有很多,例如某个零售店想同时查询顾客和订单信息,或者一家医院想同时查询患者和诊断报告信息等等。

下面我们将基于一个实际案例来说明如何在两个表中检索数据。

案例描述:

某公司有两张表,一张表存储员工的基本信息,包括员工编号、姓名、部门等等;另一张表存储员工的考勤信息,包括员工编号、日期、上班打卡时间、下班打卡时间等等。现在我们想查询每个员工每个月的出勤天数和平均工作时间。

实现方法:

我们需要创建两张表,一个是存储员工基本信息的表,另一个是存储员工考勤信息的表。

CREATE TABLE `employee` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(255) NOT NULL,

`department` varchar(255) NOT NULL,

PRIMARY KEY (`id`)

)

CREATE TABLE `attendance` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`employee_id` int(11) NOT NULL,

`punch_time` datetime NOT NULL,

PRIMARY KEY (`id`)

)

接下来,我们需要往员工信息表中插入几条数据,以及往考勤信息表中插入一些数据。

INSERT INTO `employee` (`id`, `name`, `department`) VALUES

(1, ‘张三’, ‘技术部’),

(2, ‘李四’, ‘人力资源部’),

(3, ‘王五’, ‘财务部’);

INSERT INTO `attendance` (`id`, `employee_id`, `punch_time`) VALUES

(1, 1, ‘2022-01-01 09:00:00’),

(2, 1, ‘2022-01-01 18:00:00’),

(3, 2, ‘2022-01-01 08:00:00’),

(4, 2, ‘2022-01-01 17:00:00’),

(5, 3, ‘2022-01-01 09:30:00’),

(6, 3, ‘2022-01-01 17:30:00’);

我们可以使用以下SQL语句查询出每个员工每个月的出勤天数和平均工作时间。

SELECT e.name, MONTH(a.punch_time), COUNT(DISTINCT DATE(a.punch_time)), SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF(a.punch_time, (SELECT MIN(punch_time) FROM attendance WHERE employee_id = a.employee_id AND DATE(punch_time)=DATE(a.punch_time))))/COUNT(DISTINCT DATE(a.punch_time)))

FROM employee e

INNER JOIN attendance a ON e.id = a.employee_id

GROUP BY e.name, MONTH(a.punch_time);

运行以上SQL语句,输出结果如下:

+——-+—————+———————————-+————————————————-+

| name | MONTH(date) | COUNT(DISTINCT DATE(punch_time)) | SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF…)/COUNT(DISTINCT DATE(punch_time))) |

+——-+—————+———————————-+————————————————-+

| 张三 | 1 | 1 | 08:00:00.000000 |

| 李四 | 1 | 1 | 08:00:00.000000 |

| 王五 | 1 | 1 | 08:00:00.000000 |

+——-+—————+———————————-+————————————————-+

可以看到,以上SQL查询语句成功实现了在两个表中检索数据,并计算了每个员工每个月的出勤天数和平均工作时间。

总结:

MySQL双表查询是实现复杂查询的一种常见方式,它可以在多个表中查询和检索数据。在实际项目中,深入掌握MySQL双表查询技术,能够为数据查询分析提供强有力的支持。在查询时,需要确保表之间有正确且唯一的关联键,同时要灵活使用MySQL SQL语句中的关键字JOIN、INNER JOIN、LEFT JOIN、RIGHT JOIN等等,以实现复杂查询。

参考链接:https://dev.mysql.com/doc/refman/8.0/en/join.html


数据运维技术 » MySQL双表查询如何在两个表中检索数据(mysql中两表查询)