SQL——1、查询执行顺序
这才是完整的SELECT查询
SELECT DISTINCT column, AGG_FUNC(column_or_expression), … #SELECT 选择;DISTINCT 关键字来指定某个或某些属性列唯一返回;AGG_FUNC统计函数
FROM mytable
JOIN another_table #JOIN ON 连接表
ON mytable.column = another_table.column
WHERE constraint_expression
GROUP BY column #GROUP BY进行分组,HAVING对分组结果进行筛选
HAVING constraint_expression
ORDER BY column ASC/DESC #ORDER BY对结果进行排序,ASC升序,DESC降序,默认升序
LIMIT count OFFSET count; #LIMIT OFFSET,对排序结果进行截取
查询执行顺序
1、 FROM 和 JOIN
FROM或JOIN会第一个执行,确定一个整体的数据范围。如果要JOIN不同表,可能会生成一个临时Table来用于下面的过程。
2、 WHERE
我们确定了数据来源 WHERE 语句就将在这个数据源中按要求进行数据筛选,并丢弃不符合要求的数据行,所有的筛选col属性 只能来自FROM圈定的表。 AS别名还不能在这个阶段使用,因为可能别名是一个还没执行的表达式。
3、 GROUP BY
如果你用了 GROUP BY 分组,那GROUP BY 将对之前的数据进行分组,统计等,并将是结果集缩小为分组数。这意味着 其他的数据在分组后丢弃。
4、 HAVING
如果你用了 GROUP BY 分组, HAVING 会在分组完成后对结果集再次筛选。AS别名也不能在这个阶段使用。
5、 SELECT
确定结果之后,SELECT用来对结果col简单筛选或计算,决定输出什么数据。
6、 DISTINCT
如果数据行有重复DISTINCT 将负责排重。
7、 ORDER BY
在结果集确定的情况下,ORDER BY 对结果做排序。因为SELECT中的表达式已经执行完了。此时可以用AS别名。
8、 LIMIT / OFFSET
最后 LIMIT 和 OFFSET 从排序的结果中截取部分数据。
————————————————
版权声明:本文为CSDN博主「风中凌乱的小精灵」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/shujian_tianya/article/details/81067206
1、基本查询
1 /*2.1供应商名称、地址、联系电话*/ 2 SELECT name,address,phone 3 FROM supplier; 4 5 /*2.2最近一周内提交的总价大于1000元的订单编号、顾客编号等订单的所有信息*/ 6 SELECT * 7 FROM orders 8 WHERE Datediff(dd,orderdate,GETDATE())<=7 9 AND totalprice>1000; 10 11 /*2.3每个顾客的订单金额*/ 12 SELECT orders.custkey,name,SUM(totalprice) sumprice 13 FROM customer,orders 14 WHERE customer.custkey=orders.custkey 15 GROUP BY orders.custkey,name 16 ORDER BY SUM(totalprice) DESC; 17 18 /*2.4订单平均金额超过元的顾客编号以及姓名*/ 19 SELECT orders.custkey,name,AVG(totalprice) avgerage 20 FROM customer,orders 21 WHERE customer.custkey=orders.custkey 22 GROUP BY orders.custkey,name 23 HAVING AVG(totalprice)>1000 24 ORDER BY orders.custkey DESC; 25 26 /*2.5 查询与“上海黎顺服装经营部”在同一个国家的供应商编号、名称和地址信息*/ 27 SELECT suppkey,name,address 28 FROM supplier 29 WHERE nationkey= 30 ( 31 SELECT nationkey 32 FROM supplier 33 WHERE name='上海黎顺服装经营部' 34 ); 35 36 SELECT a.suppkey,a.name,a.address 37 FROM supplier a , supplier b 38 WHERE b.nationkey=b.nationkey 39 AND b.name ='上海黎顺服装经营部'; 40 41 /*2.6 供应商价格大于零售价格的零件名、制造商名、零售价格和供应商价格*/ 42 SELECT name,mfgr,retailprice,supplycost 43 FROM part,partsupp 44 WHERE supplycost >retailprice 45 AND part.partkey=partsupp.partkey 46 47 /*2.8顾客“阿波罗"订单的订单编号、总价、订购的零件编号、数量和明细价格*/ 48 SELECT orders.orderkey,totalprice,partkey,quantity,extendedprice 49 FROM orders,lineitem 50 WHERE orders.orderkey=lineitem.orderkey 51 AND custkey = 52 ( 53 SELECT custkey 54 FROM customer 55 WHERE name='阿波罗' 56 );
2、高级查询
1 /*3.1订购“沈阳市新民高中压阀门厂”制造“竹炭黄土按摩皂”的顾客*/ 2 SELECT custkey,name /* 找出订购的顾客的编号和姓名*/ 3 FROM customer 4 WHERE custkey IN 5 ( 6 SELECT custkey/*含有该订单编号的顾客编号*/ 7 FROM orders 8 WHERE orderkey IN 9 ( 10 SELECT orderkey /*含有该零件编号的的订单编号*/ 11 FROM lineitem 12 WHERE partkey= 13 ( 14 SELECT partkey/* 找出零件编号*/ 15 FROM part 16 WHERE name='竹炭黄土按摩皂' 17 AND mfgr='沈阳市新民高中压阀门厂' 18 ) 19 ) 20 ); 21 22 /*3.2 没有购买过“沈阳市新民高中压阀门厂”制造的“竹炭黄土按摩皂”的顾客*/ 23 SELECT custkey,name /* 找出订购的顾客的编号和姓名*/ 24 FROM customer 25 WHERE custkey NOT IN 26 ( 27 SELECT custkey/*含有该订单编号的顾客编号*/ 28 FROM orders 29 WHERE orderkey IN 30 ( 31 SELECT orderkey /*含有该零件编号的的订单编号*/ 32 FROM lineitem 33 WHERE partkey= 34 ( 35 SELECT partkey/* 找出零件编号*/ 36 FROM part 37 WHERE name='竹炭黄土按摩皂' 38 AND mfgr='沈阳市新民高中压阀门厂' 39 ) 40 ) 41 ); 42 43 /*3.3 至少购买过顾客“董浩川”购买过的全部零件的顾客姓名*/ 44 45 SELECT name FROM customer WHERE custkey IN 46 ( 47 SELECT custkey FROM orders WHERE orderkey IN 48 ( 49 SELECT orderkey FROM lineitem WHERE partkey IN 50 ( 51 SELECT partkey FROM lineitem WHERE orderkey IN 52 ( 53 SELECT orderkey FROM orders WHERE custkey= 54 ( 55 SELECT custkey FROM customer WHERE name='董浩川' 56 ) 57 ) 58 ) 59 ) 60 ); 61 62 GROUP BY name 63 HAVING(COUNT(*)= 64 ( 65 SELECT count ( DISTINCT partkey) FROM lineitem WHERE orderkey IN 66 ( 67 SELECT orderkey FROM orders WHERE custkey= 68 ( 69 SELECT custkey FROM customer WHERE name='董浩川' 70 ) 71 ) 72 ) 73 ); 74 75 /*3.4查询订单平均金额超过万元的顾客的中国国籍顾客信息*/ 76 SELECT * 77 FROM customer 78 WHERE customer.custkey IN 79 ( 80 SELECT orders.custkey 81 FROM customer,orders 82 WHERE customer.custkey=orders.custkey 83 GROUP BY orders.custkey 84 HAVING AVG(totalprice)>10000 85 ) 86 AND nationkey= 87 ( 88 SELECT nationkey 89 FROM nation 90 WHERE name='中国' 91 ); 92 93 /*3.5“董浩川”和“戴美竹”都订购过的全部零件信息*/ 94 SELECT * 95 FROM part 96 WHERE partkey IN 97 ( 98 SELECT partkey FROM lineitem WHERE orderkey IN 99 ( 100 SELECT orderkey FROM orders WHERE custkey= 101 ( 102 SELECT custkey FROM customer WHERE name='董浩川' 103 ) 104 ); 105 106 107 INTERSECT 108 SELECT partkey FROM lineitem WHERE orderkey IN 109 ( 110 SELECT orderkey FROM orders WHERE custkey= 111 ( 112 SELECT custkey FROM customer WHERE name='戴美竹' 113 ) 114 ) 115 116 ); 117 118 /*3.6“董浩川”和“戴美竹”订购过的全部零件信息*/ 119 SELECT * 120 FROM part 121 WHERE partkey IN 122 ( 123 SELECT partkey FROM lineitem WHERE orderkey IN 124 ( 125 SELECT orderkey FROM orders WHERE custkey= 126 ( 127 SELECT custkey FROM customer WHERE name='董浩川' 128 ) 129 ) 130 131 132 UNION 133 SELECT partkey FROM lineitem WHERE orderkey IN 134 ( 135 SELECT orderkey FROM orders WHERE custkey= 136 ( 137 SELECT custkey FROM customer WHERE name='戴美竹' 138 ) 139 ) 140 141 ); 142 143 /*3.8“董浩川”订购过而且“戴美竹”没有订购过的全部零件信息*/ 144 SELECT * 145 FROM part 146 WHERE partkey IN 147 ( 148 SELECT partkey FROM lineitem WHERE orderkey IN 149 ( 150 SELECT orderkey FROM orders WHERE custkey= 151 ( 152 SELECT custkey FROM customer WHERE name='董浩川' 153 ) 154 ) 155 156 EXCEPT 157 SELECT partkey FROM lineitem WHERE orderkey IN 158 ( 159 SELECT orderkey FROM orders WHERE custkey= 160 ( 161 SELECT custkey FROM customer WHERE name='戴美竹' 162 ) 163 ) 164 165 );

浙公网安备 33010602011771号