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