• SQL Server查询基础(1) TC


    SQL查询在日常开发中必不可少的,SQL语句写的好坏,尤其重要。本系列先以基础入门。慢慢深入。

    注:本系列以读书笔记形式记录。

    SELECT语句的元素

    SELECT语句的目的是对表进行查询、应用一定的逻辑处理,并返回结果。按照不同的查询条件或排序返回不同的结果。

    “逻辑查询处理”是指ANSI SQL定义的概念模型,规定了如何处理一个查询,以及如何取得最终的结果。

    Microsoft SQL Server引擎并没有严格遵守逻辑查询处理,相反,在物理地处理一个查询时,它可以自由地调整处理阶段的顺序,只要最终结果能够和逻辑查询处理规定保持一到致。SQL Server可以在查询的物理处理中采用很多快捷的方式。

    为了更加直观的描述逻辑查询和各种SELECT查询子名。下面看一句SQL脚本。

    示例脚本1-1:

    Select empid,YEAR(orderdate)As orderyear,COUNT(*) As numorders
    From Sales.Orders
    Where custid=71 
    Group By empid,YEAR(orderdate)
    Having COUNT(*)>1
    Order by empid,orderyear
    介绍这个语句之前,首先介绍每个查询子名的逻辑处理顺序。
    示例脚本1-2:
       1:  From
       2:  Where
       3:  Group by
       4:  Having
       5:  Select 
       6:  Order by

    以上是SQL子句逻辑处理顺序。

    注意:Order by是唯一一个在Select以后执行的逻辑子句。

    现在分析上面的SQL脚本。

    1.从Sales.Orders表中查询数据。

    2.对订单进行过渡,只保留客户ID为71的记录。

    3.按雇员的ID和订单年份对订单进行分组。

    4.对分组数据(雇员ID和订单年份)进行过渡,只保留具有多个 订单的分组。

    5.选择每个分组的雇员ID、订单年份,以及订单数量。

    6.按照雇员ID和订单年份对输出结果进行排序。

    我们不能按照逻辑顺序来编写SQL脚本,必须从SELECT开始写起。

    FROM子句

    From子名是在逻辑处理阶段第一个要处理的查询子句。它用于指定要查询的表名,以及对这些表进行操作的表运算符(暂时不介绍运算符)。

    示例脚本1-1指定对Sales数据库架构中的Orders表进行查询。

    捕获

    WHERE子句

    在Where子句中,可以指定一个条件或多个条件,过渡由From阶段返回的行,只有满足条件的才返回行。示例脚本1-1只保留ID为71的客户的订单。

    Where子句对查询性能有重要影响。在过渡表达式的基础上,SQL Server会计算使用什么索引来访问请求的数据。与扫描整个表相对,通过使用索引,有时可以大幅减少SQL Server在获取请求的数据时付出的代价。

    GROUP BY子句

    Group by 可以净前面的逻辑查询处理返回的行按“组”进行组合。

    示例脚本1-1是通过每个雇员ID及订单年份进行分组。

    如果查询涉及到分组,那么Group  by阶段之后的所有阶段(包括Having、Select、Order by)的操作对象都是组,而不是单独的行。每个组最终也表示 为查询结果集中的一行。

    如果查询涉及到分组,From前面的要显示的元素名必须要在Group by后面写出元素名名。但是如果使用聚合函数(Count、Sum、Avg、Min、Max)就不必写这些元素名。

    HAVING子句

    Having子句用于指定对组进行过滤的条件,这与Where阶段对单独的行进行过滤相对就。

    因为Having子句是在对行进行分组后的处理。可以可以在逻辑表达中引用聚合函数。示例脚本1-1Having子句中使用了逻辑表达式Count(*)>1,意味着Having只保留多行的组。

    SELECT子句

    Select子句用于指定需要在查询返回结果中包含的列。Select列表中的表达式可以直接基于正在查询的各个列,也可以在此基础上进一步的处理。示例脚本1-1empid,YEAR(orderdate)As orderyear。别名除了使用As以外,T-Sql还支持<别名>=<表达式>和<表达式> 中间是空格<别名>。

    就是因为这样别名定义方式不同,就有这么个情况,如果在Select列表中的两个列名之间忘记指定一个逗号,执行起来也不会失败。相反,Sql Server会认为第二个是第一个列名的别名。示例:

    Select Orderid Custid From Sales.OrderValues

    查询出来的结果是Orderid ,但是名字确是Custid 。以后写SQL语句一定要仔细,这个错误很难查出来。

    Select子句是在From、Where、Group by、Having子句后处理的。

    ORDER BY子句

    Order by子句用手 展示数据时对输出的数据进行排序。从逻辑查询处理来看,Order by是最后一个的一个子句。

    如果不指定Order by子句,查询结果的顺序是自由排序的。可以显示的指定查询结果排序Order by 元素名 Desc或Order by 元素名 ASC(Asc是升序、Desc是降序)

    作者:Mr S.R Lee
    出处:http://www.cnblogs.com/LeeYongze
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.

  • 相关阅读:
    第十二章 并发编程
    信息安全系统设计基础实验四:外设驱动程序设计 20145222黄亚奇 20145213祁玮
    Appium学习笔记||四、获取app页面元素
    安装python3.6(附带PyCharm安装)
    Appium学习笔记||三、获取apk的appPackage和appActivity
    Appium学习笔记||二、环境准备
    Appium学习笔记||一、介绍
    Selenium学习笔记||十九、改变窗口大小
    Selenium学习笔记||十八、使用浏览器copy定位元素表达式
    Selenium学习笔记||十七、制造断点,来查看隐藏菜单元素
  • 原文地址:https://www.cnblogs.com/LeeYongze/p/2052114.html
Copyright © 2020-2023  润新知