mysql列怎么相乘_mysql 中的多表关联查询(多列相乘,多行求和,主键索引的运用)...

本文演示了如何在MySQL中进行多表关联查询,包括查询每个客户的订单信息并按地址排序,计算每个客户订购的图书总价,以及如何调整表结构以支持订单包含多种图书。示例SQL语句详细展示了查询和表结构调整的方法。
摘要由CSDN通过智能技术生成

/*

Navicat MySQL Data Transfer

Source Server         : MySQL

Source Server Version : 50625

Source Host           : 127.0.0.1:3306

Source Database       : db_book

Target Server Type    : MYSQL

Target Server Version : 50625

File Encoding         : 65001

Date: 2016-08-16 09:03:05

*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------

-- Table structure for tb_book

-- ----------------------------

DROP TABLE IF EXISTS `tb_book`;

CREATE TABLE `tb_book` (

`book_id` INT(11) NOT NULL,

`book_name` VARCHAR(255) DEFAULT NULL,

`price` VARCHAR(255) DEFAULT NULL,

PRIMARY KEY (`book_id`)

) ENGINE=INNODB DEFAULT CHARSET=utf8;

-- ----------------------------

-- Records of tb_book

-- ----------------------------

INSERT INTO `tb_book` VALUES ('21', '管理学', '30.00');

INSERT INTO `tb_book` VALUES ('22', '计算机', '50');

INSERT INTO `tb_book` VALUES ('23', '地理', '90');

INSERT INTO `tb_book` VALUES ('24', '西游记', '20');

-- ----------------------------

-- Table structure for tb_client

-- ----------------------------

DROP TABLE IF EXISTS `tb_client`;

CREATE TABLE `tb_client` (

`client_id` INT(11) NOT NULL,

`client_name` VARCHAR(255) DEFAULT NULL,

`phone` VARCHAR(255) DEFAULT NULL,

`address` VARCHAR(255) DEFAULT NULL,

PRIMARY KEY (`client_id`)

) ENGINE=INNODB DEFAULT CHARSET=utf8;

-- ----------------------------

-- Records of tb_client

-- ----------------------------

INSERT INTO `tb_client` VALUES ('1', 'a', '1234567', '北京');

INSERT INTO `tb_client` VALUES ('2', 'b', '1234568', '上海');

INSERT INTO `tb_client` VALUES ('3', 'c', '1234569', '太原');

-- ----------------------------

-- Table structure for tb_client_order

-- ----------------------------

DROP TABLE IF EXISTS `tb_client_order`;

CREATE TABLE `tb_client_order` (

`client_id` INT(11) DEFAULT NULL,

`order_id` INT(11) DEFAULT NULL,

KEY `client_id` (`client_id`),

KEY `order_id` (`order_id`),

CONSTRAINT `client_id` FOREIGN KEY (`client_id`) REFERENCES `tb_client` (`client_id`),

CONSTRAINT `order_id` FOREIGN KEY (`order_id`) REFERENCES `tb_order` (`order_id`)

) ENGINE=INNODB DEFAULT CHARSET=utf8;

-- ----------------------------

-- Records of tb_client_order

-- ----------------------------

INSERT INTO `tb_client_order` VALUES ('1', '11');

INSERT INTO `tb_client_order` VALUES ('1', '12');

INSERT INTO `tb_client_order` VALUES ('2', '13');

INSERT INTO `tb_client_order` VALUES ('3', '14');

-- ----------------------------

-- Table structure for tb_order

-- ----------------------------

DROP TABLE IF EXISTS `tb_order`;

CREATE TABLE `tb_order` (

`order_id` INT(11) NOT NULL,

`book_id` INT(11) DEFAULT NULL,

`count` INT(11) DEFAULT NULL,

PRIMARY KEY (`order_id`)

) ENGINE=INNODB DEFAULT CHARSET=utf8;

-- ----------------------------

-- Records of tb_order

-- ----------------------------

INSERT INTO `tb_order` VALUES ('11', '21', '5');

INSERT INTO `tb_order` VALUES ('12', '22', '2');

INSERT INTO `tb_order` VALUES ('13', '23', '2');

INSERT INTO `tb_order` VALUES ('14', '24', '5');

1.请写出一条语句,查询出每个客户的所有订单并按地址排序,要求输出格式如下:address client_name phone order_id;

`tb_order` total_price;

2.请写出一条语句,查询出每个客户订购的图书总价,要求输出格式如下:client_name total_price;

3.如果要求每张订单可以包含多种图书,应该如何修改Order表的主键?为了保证每张订单只被一个客户拥有,应该如何在ClientOrder表上增加怎样的约束?(提示:使用索引)。

1.      SELECT address ,client_name,phone ,c.order_id  FROM tb_book a,tb_client b,tb_client_order c,tb_order d WHERE  a.book_id=d.book_id AND d.order_id =c.order_id AND c.client_id=b.client_id  ORDER BY CONVERT(address USING gbk);

2.

SELECT b.client_name ,SUM(a.price*d.count) AS total_price  FROM tb_book a,tb_client b,tb_client_order c,tb_order d WHERE  a.book_id=d.book_id AND d.order_id =c.order_id AND c.client_id=b.client_id

GROUP BY client_name;

3. ALTER TABLE tb_order DROP PRIMARY KEY ,ADD PRIMARY KEY ( order_id , book_id )

ALTER TABLE tb_client_order DROP INDEX client_id ,ADD UNIQUE (client_id)

2. SELECT tt1.client_name,SUM(tt2.count* tt2.price) AS total_price FROM

(SELECT client_name,order_id

FROM tb_client A

INNER JOIN tb_client_order B

ON A.client_id=B.client_id) tt1

INNER JOIN

(SELECT order_id,COUNT,price

FROM tb_order C

INNER JOIN tb_book D

ON C.book_id=D.book_id) tt2

ON tt1.order_id=tt2.order_id

GROUP BY tt1.client_name;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值