名站网址导航为大家提供关于数据库教程相关的教程网站知识。
在大数编程语言中,具体相关代码按编码顺序被处理,但是在SQL语言中,第一个被处理的子句是FROM子句,尽管SELECT数据库语句第一个出现,但是几乎总是最后被处理。安装sql server 2008 management提示已安装 SQL Server 2005 Exp
安装sql server 2008 management,提示错误:Sql2005SsmsExpressFacet 检查是否安装了 SQL Server 2005 Express 相关工具。 失败,已安装,答案是SQL Server 2005 Express 相关工具不是sql server 2005 management,不用卸载sql server 2005 management,用一个小技巧就行:,修改注册表!hKEYLocalMachine/Software/Microsoft/Microsoft SQL Server/90/Tools/ShellSEM。,网上有的讲把这个网站网站文件夹删了,我怕删了sql server 2005 management不能用了,重命名一下,把ShellSEM改成ShellSEM1试试,结果继续安装sql server 2008 ,打开也没问题。只是因为前面修改了注册表,导致sql server 2005 management启动不了,双击打开界面闪一下就没有了。,接着再打开注册表把ShellSEM1改回ShellSEM,就可以打开sql server 2005 management,OK。搞定sql server 2008 management、 sql se,SQL Server Management Studio2008连接不上?,开始-->程序-->sql server2008-->配置相关工具-->SQL Server配置管理器-->SQLServer服务 在打开的窗口中执行以下操作办法: 1、对SQLServer(MSSSQLSE
每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入。这些虚拟表对调用者(客户端应用程序或者外部查询)不可用。只是最后一步生成的表才会返回 给调用者。假如如果没有在查询中指定某一子句,将跳过相应的步骤。下面是对应用于SQL server 2000和SQL Server 2005的各个逻辑步骤的简单描述。
复制具体相关代码 具体相关代码如下:
(8)SELECT (9)DISTINCT (11)<Top Num> <select list>
(1)FROM [left_table]
(3)<join_type> JOIN <right_table>
(2) ON <join_condition>
(4)WhERE <where_condition>
(5)GROUP BY <group_by_list>
(6)WITh <CUBE | RollUP>
(7)hAVING <having_condition>
(10)ORDER BY <order_by_list>
逻辑查询处理阶段简介
1.FROM:对FROM子句中的前两个表执行笛卡尔积(Cartesian product)(交叉联接),生成虚拟表VT1
2.ON:对VT1应用ON筛选器。只有那些使<join_condition>为真的行才被插入VT2。
3.OUTER(JOIN):如 果指定了OUTER JOIN(相对于CROSS JOIN 或(INNER JOIN),保留表(preserved table:左外部联接把左表标记为保留表,右外部联接把右表标记为保留表,完全外部联接把两个表都标记为保留表)中未找到匹配的行将作为外部行添加到 VT2,生成VT3.假如如果FROM子句包含两个以上的表,则对上一个联接生成的结果表和下一个表重复执行步骤1到步骤3,直到处理完所有的表为止。
4.WhERE:对VT3应用WhERE筛选器。只有使<where_condition>为true的行才被插入VT4.
5.GROUP BY:按GROUP BY子句中的列列表对VT4中的行分组,生成VT5.
6.CUBE|ROLLUP:把超组(Suppergroups)插入VT5,生成VT6.
7.hAVING:对VT6应用hAVING筛选器。只有使<having_condition>为true的组才会被插入VT7.
8.SELECT:处理SELECT列表,处理各种聚积函数,并产生VT8.
9.DISTINCT:将重复的行从VT8中移除,产生VT9.
10.ORDER BY:将VT9中的行按ORDER BY 子句中的列列表排序,生成游标(VC10).
11.TOP:从VC10的开始处选择指定数量或比例的行,生成表VT11,并返回调用者。
因为这一步不返回表(而是返回游标),使用了ORDER BY子句的查询不能用作表表达式。表表达式包括:视图、内联表值函数、子查询、派生表和共用表达式。它的结果必须返回给期望得到物理记录的客户端应用程序。例如,下面的派生表查询无效,并产生一个错误:
复制具体相关代码 具体相关代码如下:
select *
from(select orderid,customerid from orders order by orderid)
as d
下面的视图也会产生错误
复制具体相关代码 具体相关代码如下:
create view my_view
as
select *
from orders
order by orderid
错误信息: Msg 1033, Level 15, State 1, Procedure my_viewasselect, Line 2The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries,and common table expressions, unless TOP or FOR XML is also specified. 在SQL中,表表达式中不允许使用带有ORDER BY子句的查询,而在T—SQL中却有一个例外(应用TOP选项)。
所以要记住,不要为表中的行假设任何特定的顺序。换句话说,除非您确定要有序行,否则不要指定ORDER BY 子句。排序是需要成本的,SQL Server需要执行有序索引扫描或使用排序运行符。
推荐一段SQL具体相关代码:行列转置
复制具体相关代码 具体相关代码如下:
/*问题:假设有张学生成绩表(tb)如下:
姓名 课程 分数
张三 语文 74
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94
想变成(得到如下结果):
姓名 语文 数学 物理
---- ---- ---- ----
李四 74 84 94
张三 74 83 93
-------------------
*/
create table tb(姓名 varchar(10),课程 varchar(10),分数 int)
insert into tb values('张三' , '语文' , 74)
insert into tb values('张三' , '数学' , 83)
insert into tb values('张三' , '物理' , 93)
insert into tb values('李四' , '语文' , 74)
insert into tb values('李四' , '数学' , 84)
insert into tb values('李四' , '物理' , 94)
go
--SQL SERVER 2000 静态SQL,指课程只有语文、数学、物理这三门课程。(以下同)
select 姓名 as 姓名 ,
max(case 课程 when '语文' then 分数 else 0 end) 语文,
max(case 课程 when '数学' then 分数 else 0 end) 数学,
max(case 课程 when '物理' then 分数 else 0 end) 物理
from tb
group by 姓名