-- (1)用子查询查询员工“张小娟”所做的订单信息。
SELECT *
FROM order_master
WHERE saler_no = (
SELECT employee_no
FROM employee
WHERE employee_name = '张小娟'
); -- (2)查询没有订购商品的且在北京地区的客户编号,客户名称和邮政编码,并按邮政编码降序排序。
SELECT customer_no, customer_name, zip
FROM customer x
WHERE address = '北京市'
AND NOT EXISTS (
SELECT *
FROM order_master y
WHERE x.customer_no = y.customer_no
)
ORDER BY zip DESC; -- (3)查询订购了“32M DRAM”商品的订单编号,订货数量和订货单价。
SELECT order_no, quantity, price
FROM order_detail
WHERE product_no = (
SELECT product_no
FROM product
WHERE product_name = '32M DRAM'
); -- (4)查询与员工编号“E2008005”在同一个部门的员工编号,姓名,性别,所属部门。
SELECT employee_no, employee_name, sex, department
FROM employee
WHERE department = (
SELECT department
FROM employee
WHERE employee_no = 'E2008005'
); --(5)查询既订购了P2005001商品,又订购了P2007002商品的客户编号,订单编号和订单金额
SELECT customer_no, order_no, order_sum
FROM order_master x
WHERE EXISTS (
SELECT *
FROM order_detail y
WHERE x.order_no = y.order_no
AND product_no = 'P2005001'
)
AND EXISTS (
SELECT *
FROM order_detail z
WHERE x.order_no = z.order_no
AND product_no = 'P2007002'
); -- NOT EXISTS VS. NOT IN 写两个然后比较性能
--(6)查询没有订购“52倍速光驱”或“17寸显示器”的客户编号,客户名称。
SELECT customer_no, customer_name
FROM customer
WHERE customer_no NOT IN (
SELECT customer_no
FROM order_master
WHERE order_no IN (
SELECT order_no
FROM order_detail
WHERE product_no IN (
SELECT product_no
FROM product
WHERE product_name IN ('52倍速光驱', '17寸显示器')
)
)
); -- ORDER BY VS. ALL VS MIN MAX
--(7)查询订单金额最高的订单编号,客户姓名,销售员名称和相应的订单金额。
SELECT order_no
, (
SELECT customer_name
FROM customer y
WHERE y.customer_no = x.customer_no
) AS customer_name
, (
SELECT employee_name
FROM employee
WHERE employee_no = saler_no
) AS employee_name, order_sum
FROM order_master x
ORDER BY order_sum DESC
LIMIT 1; -- IN 与 = 以及 OR
--(8)查询订购了“52倍速光驱”商品的订购数量,订购平均价和订购总金额。
SELECT SUM(quantity), AVG(price)
, (
SELECT order_sum
FROM order_master y
WHERE y.order_no = x.order_no
) AS order_sum
FROM order_detail x
WHERE product_no = (
SELECT product_no
FROM product
WHERE product_name = '52倍速光驱'
); -- BETWEEN 2 AND 4
--(9)查询订购了“52倍速光驱”商品且订货数量界于2~4之间的订单编号,订货数量和订货金额。
SELECT order_no, quantity, price
FROM order_detail
WHERE product_no = (
SELECT product_no
FROM product
WHERE product_name = '52倍速光驱'
)
AND quantity BETWEEN 2 AND 4; -- GROUP BY
--(10)在订单主表中查询每个业务员的订单数量
SELECT saler_no, COUNT(*) AS order_num
FROM order_master
GROUP BY saler_no; -- COUNT(*) VS. COUNT(id) 任何性能对比都是基于特定 的存储引擎!
--(11)统计在业务科工作且在1973年或1967年出生的员工人数和平均工资。
SELECT COUNT(employee_no) AS employee_num, AVG(salary)
FROM employee
WHERE department = '业务科'
AND YEAR(birthday) IN (1973, 1967); -- (12)在订单明细表中统计每种商品的销售数量和金额,并按销售金额的升序排序输出。
SELECT product_no, SUM(quantity) AS quantity
, SUM(quantity * price) AS total
FROM order_detail
GROUP BY product_no
ORDER BY total; -- (13)统计客户号为“C20050001”的客户的订单数,订货总额和平均订货金额
SELECT COUNT(*), SUM(order_sum)
, AVG(order_sum)
FROM order_master
WHERE customer_no = 'C2005001'; -- (14)统计每个客户的订单数,订货总额和平均订货金额。
SELECT customer_no, COUNT(*), SUM(order_sum)
, AVG(order_sum)
FROM order_master
GROUP BY customer_no; -- (15)查询订单中至少包含3种(含3种)以上商品的订单编号及订购次数,且订购的商品数量在3件(含3件)以上。
SELECT order_no, COUNT(*)
FROM order_detail
GROUP BY order_no
HAVING COUNT(DISTINCT product_no) >= 3
AND SUM(quantity) >= 3; -- (16)查找订购了“32M DRAM”的商品的客户编号,客户名称,订货总数量和订货总金额。
SELECT customer_no
, (
SELECT customer_name
FROM customer y
WHERE y.customer_no = x.customer_no
) AS customer_name
, (
SELECT SUM(quantity)
FROM order_detail z
WHERE z.order_no = x.order_no
) AS total_quantity, order_sum
FROM order_master x
WHERE order_no IN (
SELECT order_no
FROM order_detail
WHERE product_no = (
SELECT product_no
FROM product
WHERE product_name = '32M DRAM'
)
); --(17)查询每个客户订购的商品编号,商品所属类别,商品数量及订货金额,结果显示客户名称,商品所属类别,商品数量及订货金额,并按客户编号升序和按订货金额的降序排序输出。
SELECT (
SELECT customer_name
FROM customer n
WHERE n.customer_no = m.customer_no
) AS customer_name, product_class, quantity, price
FROM (
SELECT (
SELECT customer_no
FROM order_master x
WHERE x.order_no = z.order_no
) AS customer_no
, (
SELECT product_class
FROM product y
WHERE y.product_no = z.product_no
) AS product_class, quantity, price
FROM order_detail z
) m
ORDER BY customer_no, price DESC; -- (18)按商品类别查询每类商品的订货平均单价在280元(含280元)以上的订货总数量,订货平均单价和订货总金额。
SELECT product_class, SUM(quantity), AVG(price)
, SUM(quantity * price)
FROM order_detail x
LEFT JOIN product y ON x.product_no = y.product_no
GROUP BY product_class
HAVING AVG(price) >= 280; -- (19)查找至少有2次销售的业务员名称和销售日期。
SELECT (
SELECT employee_name
FROM employee
WHERE employee_no = saler_no
) AS employee_name, order_date
FROM order_master x
WHERE x.saler_no IN (
SELECT y.saler_no
FROM order_master y
GROUP BY saler_no
HAVING COUNT(*) >= 2
)
ORDER BY saler_no; -- (20)查询销售金额最大的客户名称和总货款额
SELECT (
SELECT customer_name
FROM customer y
WHERE y.customer_no = x.customer_no
) AS customer_name, SUM(order_sum) AS sum
FROM order_master x
GROUP BY customer_no
ORDER BY sum DESC
LIMIT 1; -- (21)查找销售总额小于5000元的销售员编号,姓名和销售额
SELECT x.employee_no, employee_name, SUM(order_sum)
FROM employee x
LEFT JOIN order_master y ON x.employee_no = y.saler_no
GROUP BY employee_no
HAVING SUM(order_sum) < 5000
OR SUM(order_sum) IS NULL; -- (22)查找至少订购了3种商品的客户编号,客户名称,商品编号,商品名称,数量和金额。
SELECT e.customer_no, e.customer_name, r.product_no, r.product_name, quantity
, price
FROM order_detail q
LEFT JOIN order_master w ON w.order_no = q.order_no
LEFT JOIN customer e ON e.customer_no = w.customer_no
LEFT JOIN product r ON r.product_no = q.product_no
WHERE q.order_no IN (
SELECT t.order_no
FROM order_detail t
GROUP BY t.order_no
HAVING COUNT(*) >= 3
)
ORDER BY w.customer_no; -- 待修改,剪掉冗余中间表、无用列,用 EXISTS 重写
--(23)查找同时订购了商品为“P2007002”和商品编号为“P2007001”的商品的客户编号,客户姓名,商品编号,商品名称和销售数量,按客户编号排序输出。
SELECT a.customer_no, a.customer_name, e.product_no, e.product_name, d.quantity
FROM customer a
LEFT JOIN order_master s ON a.customer_no = s.customer_no
LEFT JOIN order_detail d ON s.order_no = d.order_no
LEFT JOIN product e ON e.product_no = d.product_no
WHERE a.customer_no IN (
SELECT customer_no
FROM (
SELECT x.customer_no, x.customer_name, m.product_no, m.product_name, quantity
FROM customer x
LEFT JOIN order_master y ON x.customer_no = y.customer_no
LEFT JOIN order_detail z ON z.order_no = y.order_no
LEFT JOIN product m ON m.product_no = z.product_no
WHERE m.product_no = "P2007001"
GROUP BY x.customer_no
UNION ALL
SELECT x.customer_no, x.customer_name, m.product_no, m.product_name, quantity
FROM customer x
LEFT JOIN order_master y ON x.customer_no = y.customer_no
LEFT JOIN order_detail z ON z.order_no = y.order_no
LEFT JOIN product m ON m.product_no = z.product_no
WHERE m.product_no = "P2007002"
GROUP BY x.customer_no
) p
GROUP BY p.customer_no
HAVING COUNT(*) >= 2
)
AND e.product_no IN ("P2007001", "P2007002")
ORDER BY a.customer_no; -- (24)计算每一商品每月的销售金额总和,并将结果首先按销售月份然后按订货金额降序排序输出。
SELECT MONTH(order_date) AS month, x.product_no, product_name
, SUM(quantity * price) AS totoal
FROM product x
LEFT JOIN order_detail y ON x.product_no = y.product_no
LEFT JOIN order_master z ON z.order_no = y.order_no
GROUP BY MONTH(order_date), x.product_no
ORDER BY MONTH(order_date), totoal DESC; -- (25)查询订购了“键盘”商品的客户姓名,订货数量和订货日期
SELECT (
SELECT customer_name
FROM customer z
WHERE z.customer_no = y.customer_no
) AS customer_name, quantity, order_date
FROM order_detail x
LEFT JOIN order_master y ON x.order_no = y.order_no
WHERE product_no = (
SELECT product_no
FROM product
WHERE product_name = "键盘"
); -- (26)查询每月订购“键盘”商品的客户名称。
SELECT (
SELECT customer_name
FROM customer z
WHERE z.customer_no = y.customer_no
) AS customer_name, MONTH(order_date) AS month
FROM order_detail x
LEFT JOIN order_master y ON x.order_no = y.order_no
WHERE product_no = (
SELECT product_no
FROM product
WHERE product_name = "键盘"
)
ORDER BY order_date; -- (27)查询至少销售了5种商品的销售员编号,姓名,商品名称,数量及相应的单价,并按销售员编号排序输出。
SELECT employee_no, employee_name, product_name, quantity, price
FROM employee x
LEFT JOIN order_master y ON x.employee_no = y.saler_no
LEFT JOIN order_detail z ON z.order_no = y.order_no
LEFT JOIN product m ON m.product_no = z.product_no
WHERE (
SELECT COUNT(DISTINCT product_no)
FROM order_master w
LEFT JOIN order_detail e ON w.order_no = e.order_no
WHERE w.saler_no = x.employee_no
) >= 5
ORDER BY employee_no; -- (28)查询没有订购商品的客户编号和客户名称。
SELECT customer_no, customer_name
FROM customer x
WHERE NOT EXISTS (
SELECT *
FROM order_master y
WHERE y.customer_no = x.customer_no
)

MySQL SELECT练习题*28的更多相关文章

  1. mysql select 练习题

    10. 查询Score表中的最高分的学生学号和课程号.(子查询或者排序) select sno,cno from score where degree  in(select max(degree) f ...

  2. mysql 5.7.28 中GROUP BY报错问题 SELECT list is not in GROUP BY clause and contains no

    ----mysql 5.7.28 中GROUP BY报错问题 SELECT list is not in GROUP BY clause and contains no------ 解决方案: sel ...

  3. 【Python全栈-后端开发】MySQL数据库-练习题

    MySQL数据库-练习题 一.表关系 请创建如下表,并创建相关约束 二.操作表 1.自行创建测试数据 2.查询“生物”课程比“物理”课程成绩高的所有学生的学号: 3.查询平均成绩大于60分的同学的学号 ...

  4. mysql 及练习题

    if() 函数的用法 IF(expr1,expr2,expr3),如果expr1的值为true,则返回expr2的值,如果expr1的值为false, mysql,'女','男') as sex fr ...

  5. MYSQL经典练习题,熟悉DQL

    MYSQL经典练习题 (本练习题可让你熟悉DQL,快速的上手DQL) 首先,先在数据库中建立基本数据库以及表项: DROP DATABASE IF EXISTS `test`; CREATE DATA ...

  6. mysql select

    select 查询: 赋值:赋值不能应用在where中,因为where操作的是磁盘上的文件,可以应用在having筛选中. 例:select (market_price-shop_price) as ...

  7. 源代码安装 MySQL 5.6.28

    本文内容 创建 MySQL 用户和组 解压 MySQL 源代码包 生成配置安装文件 编译和安装 MySQL 配置文件 创建 MySQL 授权表 MySQL 目录授权 启动 MySQL 验证 MySQL ...

  8. LAMP: 分布式 HTTP 2.4.25 + PHP 5.4.13 + MySQL 5.5.28 分离部署

    目录 A. 环境说明:B. 效果截图:C. HTTP编译安装D. MySQL二进制安装E. PHP源码编译安装F. PHP连接HTTPG. PHP支持扩展功能xcacheH. PHP连接MySQLI. ...

  9. Mysql入门练习题

    1.在students表中,查询年龄大于25岁,且为男性的同学的名字和年龄 mysql> select name,age from students where age>25 and ge ...

随机推荐

  1. word2vec训练出来的相似词歧义

    [问题]word2vec训练以后,得到预付卡和购物卡非常接近,可是实际上这两个东西是不一样的,如何区分这两个东西? 解决:建立一个独立词典,这个词典里的词是没有近义词的,独立的词,比如预付卡是很独特的 ...

  2. vue作用域 this

    设计到异步 function 回调的.this指向 需要用内部代替this 如果是箭头符号写法 就不需要 this永远是当前vue实例

  3. [Leetcode] Template to rotate matrix

    Rotate the image by 90 degrees (clockwise). Given input matrix = [ [1,2,3,4], [5,6,7,8], [9,10,11,12 ...

  4. 启动Jenkins

    启动Jenkins? 进入到Jenkins的war包所在的目录  ->CMD 到 Jenkins的war包所在的目录 输入: Java -jar jenkins.war 启动Jenkins服务n ...

  5. Objective-C中NSArray的基本用法示例

    NSArray的一些用法 NSArray只允许装OC对象,并且不能装空值,空代表数组元素的结束 #pragma mark - NSArray的基本用法 // 创建一个空数组 NSArray *arra ...

  6. 兼容PC和手机触摸代码

    测试环境:unity3d 4.6.1 using UnityEngine; using System.Collections; public class neccc : MonoBehaviour { ...

  7. C#将List<>转换为Json,将DataSet转成List<T>

    转换  参考:https://blog.csdn.net/u011176794/article/details/52670339 参考:https://blog.csdn.net/my98800/ar ...

  8. 34.js----JS 开发者必须知道的十个 ES6 新特性

    JS 开发者必须知道的十个 ES6 新特性 这是为忙碌的开发者准备的ES6中最棒的十个特性(无特定顺序): 默认参数 模版表达式 多行字符串 拆包表达式 改进的对象表达式 箭头函数 =&> ...

  9. jQuery-手风琴效果-2

    动画 高级函数:基于底层函数又进行了封装 两大块:简化版的动画函数和万能动画函数 简化版动画函数 显示/隐藏$().show; $(...).hide(); 强调:无参数的show()/hide()使 ...

  10. <meta>标签中,X-UA-Compatible和IE=Edge,chrome=1的作用

    用来指定浏览器优先以什么模式来渲染页面,ie=edge表示以最高版本内核渲染,ie=8表示以id8内核渲染页面,此外还有ie=9.id=10等. 而chrome=1意思是,优先以chrome内核来渲染 ...