select 语法和逻辑处理顺序 (含示例)

select 语法和逻辑处理顺序 (含示例)

ID:14419489

大小:54.50 KB

页数:19页

时间:2018-07-28

select 语法和逻辑处理顺序 (含示例)_第1页
select 语法和逻辑处理顺序 (含示例)_第2页
select 语法和逻辑处理顺序 (含示例)_第3页
select 语法和逻辑处理顺序 (含示例)_第4页
select 语法和逻辑处理顺序 (含示例)_第5页
资源描述:

《select 语法和逻辑处理顺序 (含示例)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、SELECT语法和逻辑处理顺序(含示例)SELECT语法和逻辑处理顺序虽然select语句的完整语法较复杂,但其主要子句可归纳如下:(8)select(9)distinct(11)(12)into(1)from(3)join(2)on(4)where(5)groupby(6)with{cube

2、rollup}(7)having

3、ving_condition>(10)orderby其中,每个关键字都是一个独立的逻辑处理步骤,而关键字之前的数字代表了它在查询语句中的逻辑处理顺序。SQL和其他编程语言最显著的不同之处就是代码处理的顺序。对于大多数编程语言,代码的书写顺序就是它的处理顺序。对于SQL,第一个处理的子句是from子句,而select子句,虽然是第一个出现的,但几乎是最后一个处理的。每个步骤生成的一个虚拟表会作为下一个步骤的输入。这些虚拟表对调用者(客户端应用程序或外部查询)来说是不可见的。返回给调用者的,只是最后一个步骤生成的表。如果某个子句不在查询里,那么相应的步骤就

4、会直接被跳过。基于客户/订单情景的样例查询为了详细描述逻辑处理的各阶段,我们一起来完成一个样例查询。首先,运行以下脚本来创建表Customers和Orders,并写入样例数据。usetempdbifobject_id('Customers','U')isnotnullbegindroptableCustomersendifobject_id('Orders','U')isnotnullbegindroptableOrdersendGocreatetableCustomers(customer_idint,namechar(20),genderchar(1))insertCustom

5、ersselect1,'AmitPaul','M'insertCustomersselect2,'DhaniLennevald','M'insertCustomersselect3,'MarieFredriksson','F'insertCustomersselect4,'PerGessle','M'createtableOrders(order_idint,customer_idint,product_idchar(10))insertOrdersselect1,3,'B000XGJH1O'insertOrdersselect2,2,'B000GP8448'insertOrder

6、sselect3,2,'B000FPOJOS'insertOrdersselect4,1,'B000FQ2D5E'insertOrdersselect5,3,'B000G0HJ3K'insertOrdersselect6,2,'B0011WMIME'insertOrdersselect7,1,'B000IONGWM'select*fromCustomersselect*fromOrders查询语句的要求是返回订单总数不超过2的男性客户的客户编号、姓名及订单总数,并按照订单总数升序排序。selectc.customer_id,min(c.name)asname,count(o.ord

7、er_id)asorder_countfromCustomersascleftouterjoinOrdersasoonc.customer_id=o.customer_idwherec.gender='M'groupbyc.customer_idhavingcount(o.order_id)<=2orderbyorder_count步骤1:生成笛卡尔积(CROSSJOIN)笛卡尔积是在from子句中出现的头两个表之间进行的,结果便是生成了虚拟表VT1。VT1包含了左表中每一行和右表中每一行的所有可能的组合(左表就是查询语句中出现在join关键字之前的表)。如果左表有n行,右表有m行

8、,VT1就有n×m行。VT1中的字段是由源表的名称限定的(作前缀的),如果查询中指定了表的别名,这个前缀也可以使用别名。在随后的步骤中(步骤2以及后面的步骤),如果对某个字段名的引用是有歧义的(字段名出现在多个输入表中),那么该字段名必须是表限定的(比如,c.customer_id)。对于只出现在一个输入表中的字段名,指定表限定符是可选的(比如,o.order_id或order_id)。selectc.customer_idas[c.customer_id],c.na

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。