--日期问题
select *
from orders
where OrderDate > '20030525'--字符串表示日期

--cast  强制转换
select *
from orders
where OrderDate >cast( '20030525' as datetime)

--datepart 取日期中的一部分
select getdate()--计算机当前的时间

select getdate(),
    datepart(year,getdate()),
    datepart(month,getdate()),
    datepart(day,getdate()),
    datepart(hour,getdate())

--特殊
select datepart(dayofyear,getdate()),--从年初到现在的天数
    datepart(weekday,getdate()),--星期几,从星期天开始为1
    datepart(week,getdate())--今年的第几周

--日期的加减
--单位
select getdate(),dateadd(month,2,getdate()),
  dateadd(week,3,getdate())
--减法
select datediff(year,'19491001',getdate())

--cast和convert函数
--类型转换
select getdate(),convert(nvarchar,getdate(),112)
  
select convert(int,'99')+ 100
select cast('99' as int)+ 100

--联合查询
--cross join

--做一个没有什么意义的交叉连接
select CityName ,OrderNum
from city cross join orders

--内连接,必须符合特定条件的组合
select OrderNum ,ProdNum ,DistriNum
from orders inner join products
 on orders.OrderNum =products.ProdNum

--生成数字表
use tempdb
create table digits
(
 digit int
 );

select *
from digits;

--插入10条记录
insert into digits (digit)
values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);

--生成数字
select d1.digit,d2.digit,d3.digit*100+d1.digit * 10 + d2.digit
from digits d1 cross join digits d2 cross join digits d3

use [C:\USERS\LENOVO\DOCUMENTS\EXAM_SQLBAK_DATA.MDF]

--子查询,嵌在其他查询中的查询叫子查询,用括号括起来
select max(DistriNum)
from distributors

select BossName,DistriNum,CityCode
from distributors
where CityCode =
 (
  select CityCode
  from distributors
  where DistriNum =
   (
    select max(DistriNum )
    from distributors
   )
 )
order by DistriNum desc

--独立子查询

--相关子查询
select DistriNum ,BossName ,CityCode,
 (
  select count(*)
  from distributors.CityCode
  where distributors .CityCode.CityCode =distributors .CityCode 
 )
from distributors

--3.9
--多值子查询
select OrderNum ,PaidDate
from orders
where  PaidDate  in
 (
  select PaidDate
  from orders
 )