前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mysql多表联查

Mysql多表联查

作者头像
暖月寒星
发布2020-03-12 10:17:45
1.5K0
发布2020-03-12 10:17:45
举报
文章被收录于专栏:浅枫沐雪

- 创建三张表

代码语言:javascript
复制
/*
Navicat MySQL Data Transfer

Source Server         : condb
Source Server Version : 50722
Source Host           : localhost:3306
Source Database       : qfmx

Target Server Type    : MYSQL
Target Server Version : 50722
File Encoding         : 65001

Date: 2019-04-16 10:15:59
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for authors
-- ----------------------------
DROP TABLE IF EXISTS `authors`;
CREATE TABLE `authors` (
  `author_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '图书编号',
  `author_name` varchar(55) DEFAULT NULL COMMENT '图书名称',
  PRIMARY KEY (`author_id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of authors
-- ----------------------------
INSERT INTO `authors` VALUES ('1', 'Kimm');
INSERT INTO `authors` VALUES ('2', 'Abel');
INSERT INTO `authors` VALUES ('3', 'Bill');
INSERT INTO `authors` VALUES ('4', 'Bon');
INSERT INTO `authors` VALUES ('5', 'Bob');
INSERT INTO `authors` VALUES ('6', 'Lili');
INSERT INTO `authors` VALUES ('7', 'BErews');
INSERT INTO `authors` VALUES ('8', 'Berton');

-- ----------------------------
-- Table structure for books
-- ----------------------------
DROP TABLE IF EXISTS `books`;
CREATE TABLE `books` (
  `book_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '图书编号',
  `author_id` int(11) DEFAULT NULL COMMENT '作者编号',
  `start_date` datetime DEFAULT NULL COMMENT '开始日期',
  `end_date` datetime DEFAULT NULL COMMENT '结束日期',
  PRIMARY KEY (`book_id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of books
-- ----------------------------
INSERT INTO `books` VALUES ('1', '4', '2019-04-02 09:59:04', '2019-04-19 09:59:12');
INSERT INTO `books` VALUES ('2', '1', '2019-02-13 09:59:25', '2019-04-12 09:59:32');
INSERT INTO `books` VALUES ('3', '6', '2019-01-16 09:59:42', '2019-04-11 09:59:46');
INSERT INTO `books` VALUES ('4', '6', '2018-04-09 10:00:00', '2019-04-01 10:00:04');
INSERT INTO `books` VALUES ('5', '2', '2018-01-05 10:00:23', '2019-04-02 10:00:33');
INSERT INTO `books` VALUES ('6', '7', '2019-04-10 10:00:50', '2019-07-11 10:00:55');
INSERT INTO `books` VALUES ('7', '8', '2019-04-03 10:01:08', '2019-12-16 10:01:12');

-- ----------------------------
-- Table structure for orders
-- ----------------------------
DROP TABLE IF EXISTS `orders`;
CREATE TABLE `orders` (
  `order_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '订单编号',
  `book_id` int(11) DEFAULT NULL COMMENT '图书编号',
  `price` double(8,2) DEFAULT NULL COMMENT '价格',
  `order_date` datetime DEFAULT NULL COMMENT '下单日期',
  PRIMARY KEY (`order_id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of orders
-- ----------------------------
INSERT INTO `orders` VALUES ('1', '4', '52.00', '2019-04-02 10:01:45');
INSERT INTO `orders` VALUES ('2', '3', '55.00', '2019-04-01 10:02:04');
INSERT INTO `orders` VALUES ('3', '5', '66.00', '2019-04-02 10:02:10');
INSERT INTO `orders` VALUES ('4', '1', '54.00', '2019-02-16 10:02:31');
INSERT INTO `orders` VALUES ('5', '3', '44.00', '2019-04-09 10:02:45');
INSERT INTO `orders` VALUES ('6', '2', '47.00', '2019-04-01 10:02:58');
  • 作者表
作者.png
作者.png
  • 图书表
图书.png
图书.png
  • 订单表
订单.png
订单.png

- 作者表和图书表两表联查

代码语言:javascript
复制
SELECT
    a.*, b.book_id
FROM
    `authors` a
LEFT JOIN books b ON a.author_id = b.author_id;
两表查询.png
两表查询.png

- 作者表和图书表,订单表三表联查

代码语言:javascript
复制
SELECT
    a.*, b.book_id,
    o.order_id,
    o.price,
    o.order_date
FROM
    `authors` a
LEFT JOIN books b ON a.author_id = b.author_id
LEFT JOIN orders o ON b.book_id = o.book_id;
三表联查.png
三表联查.png

- 根据book_id计算每一本书的订单总额

代码语言:javascript
复制
SELECT
    `authors`.*, sum(`orders`.price)
FROM
    `authors`
LEFT JOIN `books` ON `authors`.author_id = `books`.author_id
LEFT JOIN `orders` ON `books`.book_id = `orders`.book_id
GROUP BY
    `books`.book_id
每本书的订单总额.png
每本书的订单总额.png

- 选取在一定时间区间范围内的order订单

代码语言:javascript
复制
SELECT
    `authors`.*, `books`.book_id,
    `orders`.order_id,
    sum(`orders`.price)
FROM
    `authors`
LEFT JOIN `books` ON `authors`.author_id = `books`.author_id
LEFT JOIN `orders` ON `books`.book_id = `orders`.book_id
AND `orders`.order_date >= `books`.start_date
AND `orders`.order_date <= `books`.end_date
GROUP BY
    `books`.book_id
多条件的join.png
多条件的join.png

- where不能用于选取列的AS别名判断,MYSQL的处理机制是先进行选取,再进行筛选,在选取阶段就启用了where条件,因为这时并不存在prices的筛选结果后才产生的字段,会抛出错误;选取阶段order表是存在price字段的,所以只有price不为空的记录才会被选取

代码语言:javascript
复制
SELECT
    `authors`.*, `books`.book_id,
    `orders`.order_id,
    sum(`orders`.price) AS prices
FROM
    `authors`
LEFT JOIN `books` ON `authors`.author_id = `books`.author_id
LEFT JOIN `orders` ON `books`.book_id = `orders`.book_id
AND `orders`.order_date >= `books`.start_date
AND `orders`.order_date <= `books`.end_date
WHERE
    `orders`.price IS NOT NULL
GROUP BY
    `books`.book_id
where的使用.png
where的使用.png

- Having子句的使用,查找价格大于52的图书作者

代码语言:javascript
复制
SELECT
    `authors`.*, `books`.book_id,
    sum(`orders`.price) AS prices
FROM
    `authors`
LEFT JOIN `books` ON `authors`.author_id = `books`.author_id
LEFT JOIN `orders` ON `books`.book_id = `orders`.book_id
GROUP BY
    `books`.book_id
HAVING
    prices > 52
having子句.png
having子句.png

- 组合查询

代码语言:javascript
复制
SELECT
    `authors`.*, `books`.book_id,
    sum(`orders`.price) AS prices
FROM
    `authors`
LEFT JOIN `books` ON `authors`.author_id = `books`.author_id
LEFT JOIN `orders` ON `books`.book_id = `orders`.book_id
GROUP BY
    `books`.book_id
HAVING
    prices >= 20
ORDER BY
    prices ASC
LIMIT 1,2
组合查询.png
组合查询.png
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-04-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • - 创建三张表
  • - 作者表和图书表两表联查
  • - 作者表和图书表,订单表三表联查
  • - 根据book_id计算每一本书的订单总额
  • - 选取在一定时间区间范围内的order订单
  • - where不能用于选取列的AS别名判断,MYSQL的处理机制是先进行选取,再进行筛选,在选取阶段就启用了where条件,因为这时并不存在prices的筛选结果后才产生的字段,会抛出错误;选取阶段order表是存在price字段的,所以只有price不为空的记录才会被选取
  • - Having子句的使用,查找价格大于52的图书作者
  • - 组合查询
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档