第 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. 解决tomcat不支持中文路径的问题

    问题描述: 开发文件下载功能时,因为需求比较简单,要求下载一个说明文件.于是,直接给出了文件所在服务器的地址,通过链接直接下载此文件(因需求简单,未考虑安全方面的问题-_-||). 在这个过程中,文件 ...

  2. 【洛谷 SP2878】Knights of the Round Table(双联通分量)

    先放这吧,没时间写,明天再补 "明天到了" 题目链接 题意:求不在任何奇环内的点的数量. Tarjan求点双联通分量,然后再染色判断是不是二分图就好了. 只是不懂为什么Tarjan ...

  3. mhn 实际部署记录

    新增蜜罐时需要注意,server/collector_v2.py中的DEFAULT_CHANNELS,没有注册这个事件是接收不到新蜜罐的消息的

  4. 逐步实现python版wc命令

    Python 如何处理管道输入输出 sys.stdin 等于打开了一个文件对象,所有输入的文件都会写入到标准输入文件中(键盘) sys.stdout 等于打来了一个文件对象,使用.write()把信息 ...

  5. jqueryDateTable.js排序

    {% block js %} <script type="text/javascript"> $('#datatable').dataTable( { "or ...

  6. kvm的vmcall

    这几个接口的区别在于参数个数的不用,本质是一样的.挑个参数最多的看下: static inline long kvm_hypercall4(unsigned int nr, unsigned long ...

  7. 关于Solaris的一些小技巧

    关于Solaris的一些小技巧 http://blog.chinaunix.net/uid-9787800-id-2394301.html SunOS 操作命令及linux区别 http://blog ...

  8. PL/SQL 07 触发器 trigger

    --触发器 触发器有三类: 数据操作触发器    用before触发器进行数据校验    用after触发器进行级联操作    语句触发器限制数据的操作和记录操作日志    instead of 触发 ...

  9. python基础复习-1-2 数据类型-str、list、tuple、dict

    数据类型 数字 引号: 123 数值 '123' 字符串 整数:ini long 范围:(-2**31 - 2**31) num = 123 长整型 long (L) num = 123L 浮点型:f ...

  10. GIT指令简洁篇

    查看.添加.提交.删除.找回,重置修改文件 git help <command> # 显示command的help git show # 显示某次提交的内容 git show $id gi ...