第 2 章: 单表查询

use TSQLFundamentals2008;

select * from Sales.orders;

select empid, year(orderdate) as orderyear, Count(*) as numorders
from Sales.Orders
where custid=''
group by empid, year(orderdate)
having count(*) >1
order by empid, orderyear; select empid, year(orderdate) as orderyear, Count(distinct custid) as custnum
from Sales.Orders
group by empid, year(orderdate)
order by empid, orderyear; select * from HR.Employees; select distinct country as cty, * from HR.Employees
order by country; select distinct country from HR.Employees as e
order by country; select count(*) from Sales.Orders select top(861) * from Sales.Orders select top(5) orderid, orderdate, custid, empid
from Sales.Orders
order by orderdate desc select top(5) orderid, orderdate, custid, empid
from Sales.Orders
order by orderdate desc, orderid desc select top(5) with ties orderid, orderdate, custid, empid
from Sales.Orders
order by orderdate desc --2.1.8 OVER 子句
select orderid, custid, val
from Sales.OrderValues; select orderid, custid, val,
sum(val) over() as totalvalue,
sum(val) over(partition by custid) as custtotalvalue
from Sales.OrderValues; select orderid, custid, val,
100. * val /sum(val) over() as totalvaluePer,
100. * val /sum(val) over(partition by custid) as custtotalvaluePer
from Sales.OrderValues; select OV.orderid, OV.custid, ov.val,
ROW_NUMBER() over(order by val, OV.orderid) as rownum,
Rank() over(order by val) as rank,
Dense_rank() over(order by val) as dense_rank,
NTile(10) over(order by val) as ntile
from Sales.OrderValues as OV
order by val select OV.orderid, OV.custid, ov.val,
--ROW_NUMBER() over(order by val, OV.orderid) as rownum,
--Rank() over(order by val) as rank,
--Dense_rank() over(order by val) as dense_rank,
NTile(10) over(order by val) as ntile
from Sales.OrderValues as OV
order by val -----------------------------------------------------
select ov.val,
ROW_NUMBER() over(order by val) as rownum
from sales.OrderValues as ov select distinct ov.val,
ROW_NUMBER() over(order by val) as rownum
from sales.OrderValues as ov select val
from sales.OrderValues as ov
group by val select ov.val,
ROW_NUMBER() over(order by val) as rownum
from sales.OrderValues as ov
group by val ----------------------------------------------------- -----------------------------------------------------
--2.3 Case子句
----------------------------------------------------- select P.productid, p.productname, categoryid,
Case categoryid
when 1 then 'Beverages'
when 2 then 'Condimets'
when 3 then 'Confe'
when 4 then 'Beverages'
when 5 then 'sdf'
when 6 then 'asd'
when 7 then 'ghh'
else '不知道'
end as Categoryname
from Production.Products as P select orderid, custid,val,
case
when val<1000.00 then '< 100'
when val between 1000.00 and 3000.00 then '1000-3000'
when val > 3000.00 then '> 3000'
else '不知道'
end as valueCategory
from sales.OrderValues; --2.4
select *
from Sales.Customers
where region=N'WA' select *
from Sales.Customers
where region <> N'WA' select *
from Sales.Customers
where region <>N'WA' or region IS NULL --------------------------------------
--2.5
--2.6.2
select *
from sys.fn_helpcollations() select Len('abcde')
select Len(N'abcde')
select dataLength('abcde')
select dataLength(N'abcde') select Len('abcde ')
select dataLength(N'abcde ')
---2.7.5
select
GETDATE() as "GetDate",
CURRENT_TIMESTAMP as "CURRENT_TIMESTAMP",
SYSDATETIME() as "SYSDATETIME",
SYSUTCDATETIME() as "SYSUTCDATETIME",
SYSDATETIMEOFFSET() as "SYSDATETIMEOFFSET" select
Cast(CURRENT_TIMESTAMP as date) as "date",
Cast(CURRENT_TIMESTAMP as time) as "time" select
CURRENT_TIMESTAMP as "CURRENT_TIMESTAMP",
Cast(CURRENT_TIMESTAMP as date) as "date1",
Cast(CURRENT_TIMESTAMP as char(100)) as "date2" select CONVERT(Char(8),CURRENT_TIMESTAMP, 112),
Cast(CONVERT(Char(8),CURRENT_TIMESTAMP, 112) as datetime) select CONVERT(Char(12),CURRENT_TIMESTAMP, 114),
Cast(CONVERT(Char(12),CURRENT_TIMESTAMP, 114) as datetime),
Cast(CONVERT(Char(12),CURRENT_TIMESTAMP, 114) as datetime2) select
DATEADD(year, 1, ''),
DATEADD(year, 1, CURRENT_TIMESTAMP) select datediff(DAY,'', '') select
CURRENT_TIMESTAMP,
Datediff(day,'', CURRENT_TIMESTAMP),
DATEadd(day, Datediff(day,'', CURRENT_TIMESTAMP), '') select
CURRENT_TIMESTAMP,
Datediff(MONTH,'', CURRENT_TIMESTAMP),
DATEadd(MONTH, Datediff(MONTH,'', CURRENT_TIMESTAMP), '') select
CURRENT_TIMESTAMP,
Datediff(MONTH,'', CURRENT_TIMESTAMP),
DATEadd(MONTH, Datediff(MONTH,'', CURRENT_TIMESTAMP), '') select
CURRENT_TIMESTAMP,
Datediff(YEAR,'', CURRENT_TIMESTAMP),
DATEadd(YEAR, Datediff(YEAR,'', CURRENT_TIMESTAMP), '') select
CURRENT_TIMESTAMP,
Datediff(YEAR,'', CURRENT_TIMESTAMP),
DATEadd(YEAR, Datediff(YEAR,'', CURRENT_TIMESTAMP), '') select year(current_timestamp)
select year('') select datepart(month,'')
select datepart(month,CURRENT_TIMESTAMP) select datename(month,CURRENT_TIMESTAMP)
select datename(month,'') select *
from sys.tables; select SCHEMA_NAME(schema_id),name as tablename
from sys.tables; select * from sys.columns
select TYPE_NAME(system_type_id),
*
from sys.columns where object_id = OBJECT_ID(N'Sales.Orders') --2.6
exec sys.sp_help
@objname=N'Sales.Orders' exec sys.sp_columns @table_name=N'Orders', @table_owner=N'Sales' --2.10
--2.10.1
select orderid, orderdate, custid, empid
from Sales.Orders as o
where o.orderdate > '' and o.orderdate < '' --2.10.2
select orderid, orderdate, custid, empid
from Sales.Orders as o
where o.orderdate= dateadd(month,datediff(month,'',o.orderdate),'') --select DateDiff(MONTH,'19991231',current_timestamp);
--select Dateadd(MONTH,DateDiff(MONTH,'19991231','20160602'),'19991231');
select Dateadd(MONTH,DateDiff(MONTH,'',''),''); select Dateadd(MONTH,DateDiff(MONTH,'',''),'');
select Dateadd(MONTH,DateDiff(MONTH,'',''),''); select Dateadd(MONTH,DateDiff(MONTH,'',''),'');
select Dateadd(MONTH,DateDiff(MONTH,'',''),'');
select Dateadd(MONTH,DateDiff(MONTH,'',''),''); --2.10.3
select empid, firstname, lastname
from hr.Employees as e
where e.lastname like N'%a%a' ----2.10.4
select * from
Sales.OrderDetails select orderid, Sum(od.unitprice * od.qty) as totalValue
from Sales.OrderDetails as od
group by od.orderid
having Sum(od.unitprice * od.qty) > 10000
order by totalValue Desc ----2.10.5
select * from Sales.Orders select top(3) o.shipcountry,AVG(o.freight) as avgfreight
from Sales.Orders as o
where o.orderdate >= '' and o.orderdate < ''
group by o.shipcountry
order by AVG(o.freight) desc ----2.10.6
select custid, orderdate, orderid,
ROW_NUMBER() over(partition by custid order by orderdate,orderid) as rownum
from Sales.Orders ----2.10.7
select * from HR.Employees select empid, firstname, lastname, titleofcourtesy,
case titleofcourtesy
when 'Ms.' then 'Female'
when 'Mrs.' then 'Female'
when 'Mr' then 'Male'
else 'Unknown'
end as gender
from HR.Employees select empid, firstname, lastname, titleofcourtesy,
case titleofcourtesy
when 'Ms.' then 'Female'
when 'Mrs.' then 'Female'
when 'Mr' then 'Male'
else 'Unknown'
end as gender
from HR.Employees select empid, firstname, lastname, titleofcourtesy,
case
when titleofcourtesy ='Ms.' then 'Female'
when titleofcourtesy ='Mrs.' then 'Female'
when titleofcourtesy ='Mr' then 'Male'
else 'Unknown'
end as gender
from HR.Employees select empid, firstname, lastname, titleofcourtesy,
case
when titleofcourtesy Like'M%s.' then 'Female'
when titleofcourtesy Like'Mr' then 'Male'
else 'Unknown'
end as gender
from HR.Employees select * from Sales.Customers select custid, region
from Sales.Customers
order by case when region is Null then 1 else 0 end ,region select custid, region
from Sales.Customers
order by case when region is Null then 4 else 3 end ,region

第 3 章 :联接查询

Use TSQLFundamentals2008;
--3.1.1
select * from Sales.Customers as C
select * from HR.Employees as E
select *
from Sales.Customers as C
cross join HR.Employees as E --3.1.2
select * from Sales.Customers, HR.Employees; --3.1.3
select E1.empid, E2.empid
from HR.Employees as E1 cross join HR.Employees as E2 select E1.empid, E2.empid
from HR.Employees as E1 cross join HR.Employees as E2
order by E1.empid select E1.empid, E2.empid
from HR.Employees as E1 cross join HR.Employees as E2
order by E1.empid,E2.empid --3.1.4
use tempdb;
if OBJECT_ID('dbo.Digits') is not null drop table dbo.Digits
create table dbo.Digits(
digit int not null primary key
)
insert into dbo.Digits(digit)
values(0),(1),(2),(3),(4),(5),(6),(7),(8),(9) select D1.digit, D2.digit
from dbo.Digits as D1
cross join dbo.Digits as D2 select D1.digit, D2.digit, D3.digit
from dbo.Digits as D1
cross join dbo.Digits as D2
cross join dbo.Digits as D3 select D3.digit * 100 + D2.digit * 10 + D1.digit + 1 as n
from dbo.Digits as D1
cross join dbo.Digits as D2
cross join dbo.Digits as D3
order by n select D3.digit * 100 + D2.digit * 10 + D1.digit + 1 as n
from dbo.Digits as D1
,dbo.Digits as D2
,dbo.Digits as D3
order by n --3.2.1
select *
from dbo.Digits as D1
join dbo.Digits as D2 on D1.digit = D2.digit --3.2.2
select *
from dbo.Digits as D1
,dbo.Digits as D2 where D1.digit = D2.digit use TSQLFundamentals2008 --3.3.3
select C.custid, O.orderid
from Sales.Customers as C
join Sales.Orders as O on c.custid=O.custid select o.orderid, od.productid
from Sales.Orders as O
JOIN Sales.OrderDetails AS OD on O.orderid=OD.orderid select C.custid, O.orderid
from Sales.Customers as C
join Sales.Orders as O on c.custid=O.custid select C.custid,o.orderid, od.productid
from Sales.Customers as C
JOIN Sales.Orders as O On c.custid= O.custid
JOIN Sales.OrderDetails AS OD on O.orderid=OD.orderid --3.4
--3.4.1 select q.custid, o.orderid
from Sales.Customers q
join Sales.Orders o on q.custid= o.custid select q.custid, o.orderid
from Sales.Customers q
left join Sales.Orders o on q.custid= o.custid select q.custid, o.orderid
from Sales.Customers q
left join Sales.Orders o on q.custid= o.custid
where o.orderid is null --
select C.custid ,COUNT(*)
from Sales.Customers C
left join Sales.Orders as O on c.custid=O.custid
group by C.custid select C.custid ,COUNT(O.orderid)
from Sales.Customers C
left join Sales.Orders as O on c.custid=O.custid
group by C.custid --3.6.1
set nocount on;
use TSQLFundamentals2008;
if OBJECT_ID('dbo.NUMS', 'U') is not null drop table dbo.NUMS;
create table dbo.NUMS
(
n int not null primary key
); declare @i as int =1;
begin tran
while @i <= 100000
begin
insert into dbo.NUMS(n) values(@i);
set @i = @i + 1;
end
commit tran
set nocount off; --3.6.2
select E.empid,e.firstname, e.lastname, n.n
from HR.Employees as E
join dbo.NUMS N on N.n < 5 select E.empid,e.firstname, e.lastname, n.n
from HR.Employees as E
cross join dbo.NUMS N
where N.n < 5
order by n.n, E.empid select e.empid, DATEADD(day, n- 1,'') as dt
from HR.Employees as E
Cross Join NUMS as D
where d.n <= datediff(day,'','') + 1
order by e.empid --3.6.2
select C.custid,COUNT(O.orderid),Sum(OD.qty)
from Sales.Customers as C
left join Sales.Orders as O on C.custid = O.custid
left join Sales.OrderDetails as OD on O.orderid = OD.orderid
where C.country ='USA'
group by C.custid select C.custid,COUNT(distinct O.orderid),Sum(OD.qty)
from Sales.Customers as C
left join Sales.Orders as O on C.custid = O.custid
left join Sales.OrderDetails as OD on O.orderid = OD.orderid
where C.country =N'USA'
group by C.custid --3.6.3
select C.custid, C.companyname, O.orderid, O.orderdate
from Sales.Customers as C
Left Join Sales.Orders as O on C.custid=O.custid --3.6.4
select C.custid, C.companyname, O.orderid, O.orderdate
from Sales.Customers as C
Left Join Sales.Orders as O on C.custid=O.custid
where O.orderid Is NUll --3.6.5
select C.custid, C.companyname, O.orderid, O.orderdate
from Sales.Customers as C
Join Sales.Orders as O on C.custid=O.custid
where orderdate ='' --3.6.6
select C.custid, C.companyname, O.orderid, O.orderdate
from Sales.Customers as C
Left Join Sales.Orders as O on C.custid=O.custid
where orderdate ='' or O.orderdate is NUll select C.custid, C.companyname, O.orderid, O.orderdate
from Sales.Customers as C
Left Join Sales.Orders as O on C.custid=O.custid and orderdate ='' --3.6.7
select C.custid, C.companyname, O.orderid, O.orderdate,
Case
when O.orderid Is Not null then 'Yes'
else 'NO'
End as HasOrderOn20170212
from Sales.Customers as C
Left Join Sales.Orders as O on C.custid=O.custid and orderdate =''
order by C.custid; select distinct C.custid, C.companyname, O.orderid, O.orderdate,
Case
when O.orderid Is Not null then 'Yes'
else 'NO'
End as HasOrderOn20170212
from Sales.Customers as C
Left Join Sales.Orders as O on C.custid=O.custid and orderdate =''
order by C.custid;

学习Microsoft SQL Server 2008技术内幕:T-SQL语法基础的更多相关文章

  1. 学习Microsoft SQL Server 2008技术内幕:T-SQL语法基础--第4章

    第4章 子查询 4.2.1 Exist 谓语: use TSQLFundamentals2008 select * from Sales.Customers as C where c.country= ...

  2. 《microsoft sql server 2008技术内幕 t-sql语言基础》

    第一章 TSQL编程基础 源代码下载:TSQLFundamentals2008 创建表 USE testdb; CREATE TABLE dbo.Employess ( empid INT NOT N ...

  3. 2008技术内幕:T-SQL语言基础

    2008技术内幕:T-SQL语言基础 单表查询摘记 这里的摘抄来自<Microsoft SQL Server 2008技术内幕:T-SQL语言基础>,书中用到的案例数据库是这个 TSQLF ...

  4. 2008技术内幕:T-SQL语言基础 单表查询摘记

    这里的摘抄来自<Microsoft SQL Server 2008技术内幕:T-SQL语言基础>,书中用到的案例数据库是这个 TSQLFundamentals2008 ,官网给出的连接是这 ...

  5. 2008技术内幕:T-SQL语言基础 联接查询摘记

    续 2008技术内幕:T-SQL语言基础 单表查询摘记 第三章 联接查询 Microsoft SQL Server 2008 支持四种表运算符 join(ANSI标准).apply(T-SQL扩展). ...

  6. 使用SQL Server 2008远程链接时SQL数据库不成功的解决方法

    关键设置: 第一步(SQL2005.SQL2008): 开始-->程序-->Microsoft SQL Server 2008(或2005)-->配置工具-->SQL Serv ...

  7. SQL Server 2008空间数据应用系列四:基础空间对象与函数应用

    原文:SQL Server 2008空间数据应用系列四:基础空间对象与函数应用 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测. ...

  8. SQL Server 2008 R2升级到SQL Server 2012 SP1

    1.建议对生产环境对的数据库升级之前做好备份,以防不测. 2.从SQL Server 2008 R2 升级到SQL Server 2012 SP1,需要先安装SQL Server 2008 R2 的S ...

  9. 安装 SQL Server 2008 和管理工具 SQL Server 2008 management studio 及相关问题解决

    Sql Server 2008 问题小总结 http://www.lihengyu.com/blog/4877.html 安装 SQL Server 2008 和管理工具 SQL Server 200 ...

随机推荐

  1. tr/td

    在HTML中,tr代表行,td代表列. 说明: 1.tr与td必须一起使用,并且输入的内容必须在td里面: 2.td必须在tr里面,表示在一行中的列: 3.在一个tr里面,有x个td,就表示在这一行里 ...

  2. 【Foreign】哈密顿回路 [MIM]

    哈密顿回路 Time Limit: 15 Sec  Memory Limit: 256 MB Description Input Output Sample Input 4 10 0 3 2 1 3 ...

  3. http://www.himigame.com/mac-cocoa-application/893.html

    [Cocoa(mac) Application 开发系列之一]创建第一个application—计算器 终于HTTP与Socket服务器以及cocos2dx之间的通信各种框架成功完成后,现在抽时间学习 ...

  4. OleDbDataAdapter具体使用11

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  5. Ansi,UTF8,Unicode,ASCII编码的区别 ---我看完了 明白了很多

    来自:http://blog.csdn.net/xiongxiao/article/details/3741731 ------------------------------------------ ...

  6. 前端基础BOM和DOM

    前言 到目前为止,我们已经学过了JavaScript的一些简单的语法.但是这些简单的语法,并没有和浏览器有任何交互. 也就是我们还不能制作一些我们经常看到的网页的一些交互,我们需要继续学习BOM和DO ...

  7. 【LeedCode】3Sum

    Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all un ...

  8. JS监听页面滚动到底部事件

    废话不说,直接上代码,放心我这个是最好的,直接放到js脚本里,直接生效: $(window).scroll(function(){ var scrollTop = $(this).scrollTop( ...

  9. win上安装Redis并将其设置为服务

    win上安装Redis并将其设置为服务 redis下载地址:https://redis.io/ 或者在下面的地址下载 https://github.com/zhangxy1035/redisDownl ...

  10. java装饰设计模式

    将一个对象作为参数进行传递,然后对这个对象进行包装---改变其中的方法或者添加一些新的行为---装饰设计模式---装饰者模式---Decorate Model 改变一个方法: 1. 通过继承这个类,然 ...