基础练习,单表查询

SELECT orderid, orderdate, custid, empid
FROM Sales.Orders
WHERE orderdate = EOMONTH(orderdate);

 所有聚合函数都会忽略NULL值,只有count(*)除外。

 

 

SELECT orderid, orderdate, custid, empid
FROM Sales.Orders
WHERE orderdate = DATEADD(month, DATEDIFF(month, '19991231', orderdate), '19991231');

–having SUM(qty*unitprice) >10000

SELECT custid, orderdate, orderid,
  ROW_NUMBER() OVER(PARTITION BY custid ORDER BY orderdate, orderid) AS rownum
FROM Sales.Orders
ORDER BY custid, rownum;

–sales.orderdetails

4.条件筛选case

在大多数情况下,在过滤条件中对列进行函数化处理,极有可能造成相应列上的索引无法使用,降低查询效率,解决方案是使用等值的范围查询.例如:

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 IN('Ms.', 'Mrs.') THEN 'Female'
WHEN titleofcourtesy = 'Mr.' THEN 'Male'
ELSE 'Unknown'
END AS gender
FROM HR.Employees;

–from

5.在order by 加限制排序条件

OVER

3.对每个客户的订单日期排序

–orderid,

第一种 是指向搜索  固定的指向  第二种没有可以多字段条件

SELECT PATINDEX(‘%[0-9]%’,’abcd123efgh’);

SELECT custid, region
FROM Sales.Customers
ORDER BY
  CASE WHEN region IS NULL THEN 1 ELSE 0 END, region;

变长字符的存储空间由实际数据量来决定,但是更新数据的时候可能会需要数据移动,超出当前页的范围,所以更新时的效率相对会低一些。

DATEADD(month, DATEDIFF(month, ‘19991231’, orderdate), ‘19991231’)
中间是加上的月数  最后一个从什么时间开始加

SQL中的三值逻辑,如果想返回region列不等于WA的所有行,如下:

  1. 姓氏a上有相同的 

    SELECT empid, firstname, lastname
    FROM HR.Employees
    WHERE lastname LIKE ‘%a%a%’;

 如果SELECT语句中涉及到分组,则后面的select order
having的操作对象将是分组。

1.返回 每月最后一天订单

因为DISTINCT在这种情况下不起任何作用。

 使用EMONTH 对输入的日期返回月末日期   类似动态条件

返回总价大于10000的订单

两个条件 0,1 默认排序规则 通过int 对相应的条件进行排序

–select

两种写法  记住 可以用动态条件 区分记录

–SELECT

DATEDIFF(month, ‘19991231’, orderdate)  相差多少月 
从19991231到 orderdate之间先查多少月

将字符串文字转成日期类型时,如果没有指定时间,sqlserver则默认用午夜时间作为其时间值.

–select

 

–orderid,

SYSDATETIMEOFFSET() as [sysdatetimeoffset]

永利皇宫登录网址 ,–group by orderid

使用定长的字符串时,SQLSERVER会预先分配相应的空间,使其无法扩展,它更适合以写入为主的系统,但是这种类型的存储消耗不是最优的,读取的时候可能要付出更多的代价。

OR region IS NULL;

SELECT

 

RANK表示前面有多少行更低的排序值,而DENSE
RANK表示前面有多少个不同的排序值。

CURRENT_TIMESTAMP AS [CURRENTDATE],

SELECT

FROM HR.Employees

SELECT empid,firstname,lastname

–ORDERDATE =
dateadd(month,datediff(month,’19991231′,orderdate),’19991231′)

我们尽可能使用标准的SQL,而不是TSQL,如果他们能表示成同样的功能.例如获取当前日期时间时选择current_timestamp比GetDate()要好些.

–hr.employees

exec sp_tables

–ORDERDATE = DATEADD(DD,-1,Convert(CHAR(7),DATEADD(mm,1,ORDERDATE),121)
+’-01′)

getutcdate() as [getutcdate],

可以认为在同一SELECT子句中不同时指定DISTINCT和ROW NUMBER是一条最佳实践,

什么是关系模型?

SELECT

DISTINCT

 

SELECT orderid FROM sales.Orders WHERE YEAR(ORDERDATE)=2007

WHERE lastname like N’D%’;

–SALES.ORDERS

–return lastname has a more than twice

N表示National,用于表示字符串是Unicode数据类型(NCHAR或NVARCHAR).

–empid

–SUM(qty*unitprice) as totalvalue

 

网站地图xml地图