首页 > 数据库 >常用的SQL语句小结(三)---复杂查询,CASE表达式,各种连接查询

常用的SQL语句小结(三)---复杂查询,CASE表达式,各种连接查询

时间:2023-10-06 09:05:04浏览次数:34  
标签:CASE product price sale 查询 --- type id SELECT

1.复杂查询

(1)普通子查询

SELECT product_type, cnt_product
FROM (
SELECT Product_type, COUNT(*) AS cnt_product
FROM Product
GROUP BY product_type
) AS ProductSum;

()里的是内层查询会首先执行,然后才会执行外层查询

子查询可以多层嵌套,但是性能会下降,尽量少用多层子查询

 

(2)标量子查询

标量子查询只返回一列一行

 错误案例:选取出销售单价( sale_price)高于全部商品的平均单价的商品

 

SELECT product_id, product_name, sale_price FROM Product
WHERE sale_price > AVG(sale_price);

WHERE子句不能直接使用聚合函数

正确做法:

SELECT product_id, product_name, sale_price FROM Product
WHERE sale_price > (SELECT AVG(sale_price) FROM Product);

 

(3)关联子查询

案例:选取出各商品种类中高于该商品种类的平均销售单价的商品

第一步:按照商品种类计算平均价格
SELECT AVG(sale_price) FROM Product GROUP BY product_type; 
第二步:在细分的组内进行比较时,需要使用关联子查询

SELECT product_type, product_name, sale_price FROM Product AS P1
WHERE sale_price > (SELECT AVG(sale_price) FROM Product AS P2
WHERE P1.product_type = P2.product_type GROUP BY product_type);

GROUP BY product_type去掉也能得到正确结果,因为P1.product_type = P2.product_type这个条件已经相当于AVG函数按照商品种类来计算了

 

(4)行列转换 CASE表达式

-- 对按照商品种类计算出的销售单价合计值进行行列转换
SELECT SUM(CASE WHEN product_type = '衣服'
THEN sale_price ELSE 0 END) AS sum_price_clothes,
SUM(CASE WHEN product_type = '厨房用具'
THEN sale_price ELSE 0 END) AS sum_price_kitchen,
SUM(CASE WHEN product_type = '办公用品'
THEN sale_price ELSE 0 END) AS sum_price_office
FROM Product;

在满足商品种类(product_type)为“衣服”或者“办公用品”
等特定值时,上述 CASE 表达式输出该商品的销售单价(sale_price),
不满足时输出 0。对该结果进行汇总处理,就能够得到特定商品种类的销
售单价合计值了。

(5)UNION和UNION ALL区别

SELECT product_id, product_name
FROM Product
UNION ALL
SELECT product_id, product_name
FROM Product2;


UNION会合并重复行为一行,而UNION ALL不会合并

UNION相当于表的加法,INTERSECT (交集),EXCEPT (减法,Product有而Product2没有)

 

(6)内连接示例

SELECT SP.shop_id, SP.shop_name, SP.product_id, P.product_name,
P.sale_price
FROM ShopProduct AS SP INNER JOIN Product AS P
ON SP.product_id = P.product_id
WHERE SP.shop_id = '000A';

(7)右外连接示例(代表右边的表为主表,跟内连接区别就是,内连接必须两张表同时存在的相同product_id才能查询出来,而右外连接会把只有右边表才存在的product_id也查出来)

SELECT SP.shop_id, SP.shop_name, SP.product_id, P.product_name,
P.sale_price
FROM ShopProduct AS SP RIGHT OUTER JOIN Product AS P
ON SP.product_id = P.product_id;

 

标签:CASE,product,price,sale,查询,---,type,id,SELECT
From: https://www.cnblogs.com/lanhaipeng/p/17743021.html

相关文章

  • 基础算法--字符串
    \(KMP\)\(KMP\)算法(Knuth-Morris-Pratt算法)是一个著名的字符串匹配算法,效率很高,但是确实有点复杂。基本概念\(1\)、s[]是模式串,即比较长的字符串。\(2\)、p[]是模板串,即比较短的字符串。(这样可能不严谨。。。)\(3\)、“非平凡前缀”:指除了最后一个字符以外,一个字符串的全......
  • styled-components & CSS pseudo classes All In One
    styled-components&CSSpseudoclassesAllInOne::after&::beforeCSS伪元素constListItem=styled.li`font-size:70px;font-weight:bold;cursor:pointer;color:transparent;-webkit-text-stroke:1pxwhite;position:relative;&......
  • neovim的插件管理器vim-plug导致代码颜色不显示问题解决
    neovim的帮助文件路径F:\Programs\Neovim\share\nvim\runtime\docruntimepath的帮助文档路径F:\Programs\Neovim\share\nvim\runtime\doc\options.txt$VIM环境变量$VIM被用来确定Vim中不同的用户文件的位置,比如用户启动脚本“.vimrc”。这个是系统设置,详见startup。允许每......
  • 08-定时器的基本原理与应用
    定时器的基本原理与应用1、什么是定时/计数器?在没有钟表的时候,定时的方式通过有一注香的时间,或者一桶水的时间。前者烧香不断减少是减法,后者滴水不断增加是加法。定时/计数器,是一种能够对内部时钟信号或外部输入信号进行计数,当计数值达到设定要求时,向CPU提出中断处理请求,从而实......
  • 【倍增】P3422 [POI2005]LOT-A Journey to Mars 题解
    P3422一道有点意思的题。看到是一个环,先破环为链,即\(a_{n+i}=a_i,b_{n+i}=b_i\),此时就只需要跳到\(x+n\)而无需判环了。如果顺时针走:令\(sum_i=\sum\limits_{j=1}^{i}{a_j-b_j}\),当能从\(x\)跳到\(x+n\)时,有\[sum_{x-1}\lesum_x,sum_{x-1}\lesum_{x+1},\dot......
  • iPhone 15 Pro Max的Type-C接口有多牛?实测USB3比USB2快11倍
    苹果最新的iPhone15系列和iPhone15Pro系列新机,尽管两者都是Type-C接口,但速度相差20倍。据了解,iPhone15Pro/Max搭载的苹果A17Pro芯片内含专门的USB3模块,使其成第一款具备USB3速度的iPhone手机。有了这个模块,iPhone15Pro/Max的USB3比起iPhone15(A16芯片)的USB2来说,速度......
  • nvidia-smi指令报错:Failed to initialize NVML: Driver/library version mismatch NVM
    nvidia-smi指令报错:FailedtoinitializeNVML:Driver/libraryversionmismatchNVMLlibraryversion:535.113我是刚开始没有nvidia-smi命令,输入后,提示我安装。aptinstallnvidia-340#version340.108-0ubuntu5.20.04.2,oraptinstallnvidia-utils-390......
  • Java---多态
    1.多态的概念1.1概念多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。2.多态的定义及实现2.1多态的构成条件多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。那么在继承中要构成多态还有两个条件:必......
  • 【二分】P7795 [COCI2014-2015#7] PROSJEK 题解
    P7795典。显然\(\mathcal{O}(n^2)\)的时间复杂度无法通过。使子段平均值最大,考虑二分。可以二分平均值\(mid\),然后判断是否有满足条件的子段.时间复杂度:\(\mathcal{O}(\dfrac{n\log\max\{a_i\}}{\text{eps}})\),其中\(\text{eps}\)为设置的精度,\(\max\{a_i\}\leq10......
  • Learning Hard C# 学习笔记: 8.C#中的特性 - 委托
    前几章,讲的都是面向对象语言共同的内容,本章开始是C#的独有特性-委托.委托是C#最重要的特性之一,C#后面的所有特性基本都是建立在委托的基础上的.8.1C#委托是什么例如,法庭上律师为当事人辩护,他真正执行的是当事人的陈词,律师就相当于一个委托对象,而当事人则委托律......