您的位置:澳门新葡8455最新网站 > 数据库管理 > 基本功演练,单表查询

基本功演练,单表查询

发布时间:2019-10-13 09:12编辑:数据库管理浏览(126)

    1.重临 每月最后一天订单

    本内容是本身上学tsql二〇〇八的开卷笔记

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

    怎么着是关系模型?

     使用EMONTH 对输入的日子再次来到月末日期   类似动态条件

    若对列创设独一约束,背后中的物理机制也是成立了贰个独一索引.

    DATEDIFF(month, '一九九七1231', orderdate)  相差多少月  从壹玖玖陆1231到 orderdate之间先查多少月

    SQL语句的逻辑深入分析顺序是FROM

    DATEADD(month, DATEDIFF(month, '一九九九1231', orderdate), '一九九七1231') 中间是丰裕的月数  最终贰个从哪些日子发轫加

    WHERE

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

    GROUP BY

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

    HAVING

     

    SELECT

    1. 姓氏a上有一样的 

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

    OVER

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

    DISTINCT

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

    TOP

    4.条件筛选case

    ORDER BY

    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;
    

     假如SELECT语句中涉嫌到分组,则前面包车型客车select order having的操作对象将是分组。

    第一种 是指向搜索  固定的指向  第二种未有能够多字段条件

     全部聚合函数都会忽视NULL值,唯有count(*)除外。

    5.在order by 加范围排序条件

    满含order by子句的查询被ANSI称之为游标。表表明式无法管理游标。

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

    TOP 是TSQL所特有的,用来限制重回的行数或比重。

    八个条件 0,1 暗中认可排序法规 通过int 对相应的法规进行排序

    开窗函数使用OVE传祺子句提供窗口作为上下文,对窗口中的一组值进行操作,实际不是利用GROUP BY 子句提供的上下文。那样能够同一时间重临基础行的列和聚合列。

    ROW_NUMBE奥迪Q7() 函数用于为查询的结果集中的各行分配一个递增的种类号。其逻辑顺序通过OVERubicon子句中的OQashqaiDER BY语句来展开点名。但就算OLANDDER By的列不独一,则体系值也会增添,那样会导致重临的值不明确。

    RANK 和 DENSE_RANK为富有一样逻辑排序值的保有行生成同样的排行。

    RANK代表后面有微微行更低的排序值,而DENSE RANK代表前边有稍许个例外的排序值。

     

    能够以为在同一SELECT子句中不一样一时候内定DISTINCT和ROW NUMBE大切诺基是一条最棒施行,

    因为DISTINCT在此种意况下不起别的效果。

     

    SELECT empid,firstname,lastname

    FROM HR.Employees

    WHERE lastname like N'D%';

    N表示National,用于表示字符串是Unicode数据类型(NCHA宝马X5或NVARCHALAND).

    澳门新葡萄京娱乐场, 

    SQL中的三值逻辑,假诺想回来region列不对等WA的具有行,如下:

    SELECT custid,country,region,city

    FROM Sales.Customers

    WHERE region<>N'WA'

    OR region IS NULL;

     

    SQL支持二种字符数据类型:普通字符和Unicode字符。

    日常性字符使用一个字节来保存每一种字符,所以限制这些列所协助的言语只可以是德语。

     

    动用定长的字符串时,SQLSEPRADOVE纳瓦拉会预先分配相应的空间,使其不可能扩张,它更切合以写入为主的系统,不过那种类型的存款和储蓄消耗不是最优的,读取的时候也许要交给越来越多的代价。

    变长字符的仓库储存空间由实际数据量来支配,不过创新数据的时候大概会供给多少移动,超过当前页的限量,所以更新时的频率相对会低一些。

     

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

    能够动用Replace来计量某字符在字符串中冒出的次数,方法是先把它替换来空,然后比对前后的差值再除以要合作的字符串的尺寸就足以了。

    SELECT STUFF('A2DEFG',2,1,'BC') 返回:ABCDEFG

     

    DateTimeoffset 不经常区部分能够实行鉴定识别

    DateTime2 精度可控,并且协理的限制从0001方始到9999.

     

    将字符串文字转成日期类型时,若无一点名时间,sqlserver则暗许用早上时间作为其时间值.

    在相当多情状下,在过滤条件中对列进行函数化管理,极有不小希望产生相应列上的目录不能够运用,减少查询功效,建设方案是运用等值的限定查询.比方:

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

    :SELECT orderid FROM sales.Orders WHERE ORDERDATE >='20070101' AND ORDERDATE<'20080101'

     

    SELECT

    current_timestamp as [current_timestamp],

    GETDATE() as [getdate],

    getutcdate() as [getutcdate],

    SYSDATETIME() as [sysdatetime],

    SYSUTCDATETIME() as [sysutcdatetime],

    SYSDATETIMEOFFSET() as [sysdatetimeoffset]

    咱俩尽量选择正式的SQL,而不是TSQL,假使他们能表示成同样的效果.比方获得当前几日申时间时精选current_timestamp比GetDate()要好些.

    cast是ANSI的标准SQL.

    SELECT

    SWITCHOFFSET(SYSDATETIMEOFFSET(),'+00:00') AS [UTCDATETIME],--能够把日子转成UTC的

    CURRENT_TIMESTAMP AS [CURRENTDATE],

    SYSUTCDATETIME() AS [SYSUTCDATETIME]

     

    获得表的元数据音讯:

    exec sp_tables

    EXEC sp_columns N'SCORE',N'DBO'

    EXEC sp_helpconstraint N'SCORE'

     

    ----每一个月最后一天生成的订单

    --SELECT

    --orderid,

    --orderdate,

    --custid,

    --empid

    --FROM

    --SALES.ORDERS

    --WHERE

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

    --ORDERDATE = dateadd(month,datediff(month,'19991231',orderdate),'19991231')

     

    --return lastname has a more than twice

    --select

    --empid,firstname,lastname

    --from

    --hr.employees

    --where

    --LEN(lastname) - len(replace(lastname,'a',''))>1

    --lastname like '%a%a%'

    回去总价超过10000的订单

    --select

    --orderid,

    --SUM(qty*unitprice) as totalvalue

    --from

    --sales.orderdetails

    --group by orderid

    --having SUM(qty*unitprice) >10000

    本文由澳门新葡8455最新网站发布于数据库管理,转载请注明出处:基本功演练,单表查询

    关键词: