澳门新葡8455最新网站:单表查询就是使用SELECT语句对目的表实行查询,请先复习SQL功底知识

澳门新葡8455最新网站 5

Q1:表StudentScores如下,用一条SQL语句查询出每门课都大于80分的学生姓名

1   概述

单表查询就是利用SELECT语句对目标表进行查询,应用一定的逻辑处理,最后返回结果。这篇文章分为以下几点进行总结。

Q2:表DEMO_DELTE如下,删除除了自动编号不同,其他都相同的学生冗余信息

已发布【SqlServer系列】文章如下:

1,示例查询

澳门新葡8455最新网站,Q3:Team表如下,甲乙丙丁为四个球队,现在四个球对进行比赛,用一条sql语句显示所有可能的比赛组合

  • 【SqlServer系列】SQLSERVER安装教程 

  • 【SqlServer系列】数据库三大范式

  • 【SqlServer系列】表单查询
  • 【SqlServer系列】表连接
  • 【SqlServer系列】子查询
  • 【SqlServer系列】远程访问
  • 【SqlServer系列】集合运算

2,SELECT语句的逻辑处理顺序

Q4:请考虑如下SQL语句在Microsoft SQL Server 引擎中的逻辑处理顺序

如下几个问题,如果你能解决,请继续往下看,若不能解决,请先复习SQL基础知识,再来阅读本篇文章。本篇文章深度中等左右。

3,几个小坑

USE TSQLFundamentals2008SELECT empid,YEAR(orderdate) AS orderyear,COUNT(*) numordersFROM Sales.OrdersWHERE custid=71GROUP BY empid,YEAR(orderdate)HAVING COUNT(*)1ORDER BY empid,orderyear

Q1:表StudentScores如下,用一条SQL语句查询出每门课都大于80 分的学生姓名

示例查询

看下面这段SQL代码:

-- 设置数据库上下文USE TSQLFundamentals2008;GO-- 从订单表中找出客户ID为71的记录,并按职员ID和订单年份进行分组,并且只保留具有多个订单的分组,最后按职员ID-- 和订单年份进行排序SELECT empid,YEAR(orderdate) AS orderyear,COUNT(*) AS numorders FROM Sales.OrdersWHERE custid=71GROUP BY empid,YEAR(orderdate)HAVING COUNT(*)>1ORDER BY empid,orderyear

查询结果:

澳门新葡8455最新网站 1

本篇文章将剖析一般查询过程中,涉及到的处理逻辑子句,主要包括FROM,WHERE,GROUP
BY,HAVING,SELECT,ORDER BY,TOP,OVER等子句。

澳门新葡8455最新网站 2

SELECT语句的逻辑处理顺序

与大多数编程语言的按代码编写顺序来执行不同的是,SQL是按照它的逻辑顺序来执行的,即使SELECT语句是在开始的位置出现的,但是它却并不是首先执行的。那么SQL的逻辑执行顺序是怎样的呢?

1,FROM

2,WHERE

3,GROUP BY

4,HAVING

5,SELECT

5-1 OVER

5-2 DISTINCT

5-3 TOP

6,ORDER BY

2 SELECT语句的元素

Q2:表DEMO_DELTE如下,删除除了自动编号不同, 其他都相同的学生冗余信息

几个小坑

在SELECT查询过程中,有几个小坑需要我们多加注意。

1,所有的聚合函数都分忽略NULL值,只有一个例外,Count(*)。例如,假设一个组有5行,其qty列的值分别为30,10,NULL,10,10。Count(*)会返回5,而Count(qty)则返回4。

2,给表达式或列定义别名最好用<表达式> AS <别名>的格式。

3,记住,SELECT子句是在FROM,WHERE,GROUP
BY,以及HAVING语句之后处理的,所以对于SELECT语句之前处理的那些子句不可以引用SELECT语句中为表达式分配的别名,只有ORDER
BY语句可以引用它,因为它是在SELECT之后处理的。

4,SQL查询的结果并不保证是有序的,它是一个集合,而集合是无序的,理解SQL查询结果是无序的这一点非常重要。

2.1 常规查询子句和逻辑处理顺序

澳门新葡8455最新网站 3

对数据表进行检索查询时,查询语句一般包括FROM,WHERE,GROUP
BY,HAVING,SELECT,ORDER BY,TOP,OVER等子句,请考虑如下例子的逻辑处理顺序。

Q3:Team表如下,甲乙丙丁为四个球队,现在四个球对进行比赛,用一条sql 语句显示所有可能的比赛组合

USE TSQLFundamentals2008SELECT empid,YEAR(orderdate) AS orderyear,COUNT(*) numordersFROM Sales.OrdersWHERE custid=71GROUP BY empid,YEAR(orderdate)HAVING COUNT(*)1ORDER BY empid,orderyear

澳门新葡8455最新网站 4

如上代码,在SQL中逻辑处理顺序如下:

Q4:请考虑如下SQL语句在Microsoft SQL
Server 引擎中的逻辑处理顺序

USE TSQLFundamentals2008FROM Sales.OrdersWHERE custid=71GROUP BY empid,YEAR(orderdate)HAVING COUNT(*)1SELECT empid,YEAR(orderdate) AS orderyear,COUNT(*) numordersORDER BY empid,orderyear
1 USE TSQLFundamentals2008
2 
3 SELECT empid,YEAR(orderdate) AS orderyear,COUNT(*) numorders
4 FROM Sales.Orders
5 WHERE custid=71
6 GROUP BY empid,YEAR(orderdate)
7 HAVING  COUNT(*)>1
8 ORDER BY empid,orderyear

逻辑处理顺序可归结为如下:

本篇文章将剖析一般查询过程中,涉及到的处理逻辑子句,主要包括FROM,WHERE,GROUP
BY,HAVING,SELECT,ORDER BY,TOP,OVER等子句。

注释:

2   SELECT语句的元素

a.在常规编程语言中,如c++,java,c#等,程序按照“从上往下”的顺序一步一步地执行,然而在SQL中,SELECT语句所处位置虽然在最开始,却不是在最先执行的;

2.1
常规查询子句和逻辑处理顺序

b.逻辑处理顺序的每一步返回的结果集均是紧接着该步语句的下一步语句要执行的结果集;

对数据表进行检索查询时,查询语句一般包括FROM,WHERE,GROUP
BY,HAVING,SELECT,ORDER
BY,TOP,OVER等子句,请考虑如下例子的逻辑处理顺序。

c.FROM获取数据源(或者数据表),WHERE在FROM基础上过滤条件,GROUP
BY在WHERE的基础上按照至少一列对集合进行分组,HAVING在GROUP
BY基础上,对已经分组的集合进行过滤,SELECT语句在HAVING基础上检索,ORDER
BY在SELECT基础上按照一定条件进行排序;

1 USE TSQLFundamentals2008
2 
3 SELECT empid,YEAR(orderdate) AS orderyear,COUNT(*) numorders
4 FROM Sales.Orders
5 WHERE custid=71
6 GROUP BY empid,YEAR(orderdate)
7 HAVING  COUNT(*)>1
8 ORDER BY empid,orderyear

2.2 部分查询子句讲解

如上代码,在SQL中逻辑处理顺序如下:

2.2.1 FROM子句

USE TSQLFundamentals2008

FROM Sales.Orders
WHERE custid=71
GROUP BY empid,YEAR(orderdate)
HAVING  COUNT(*)>1
SELECT empid,YEAR(orderdate) AS orderyear,COUNT(*) numorders
ORDER BY empid,orderyear

a.用数据库架构在限定代码中的对象名称,即使不用数据库架构限定,Sql
Server也会隐式解析它,代价更高,初次之外,如果对象名相同,没有架构限定,会产生歧义;

 逻辑处理顺序可归结为如下:

b.FROM * 性能比 FROM conum_name性能低;

澳门新葡8455最新网站 5

c.FROM查询得到的结果集顺序是随机的;

注释:

相关文章

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图