SQL语句【T-SQL汇总】

发布时间:2019-01-24  栏目:SQL  评论:0 Comments

先是看上面一条相比到位语句,都是比较宽泛的基本点字。

明日和大家齐声来享受一下SQL语句,T-SQL的用法和语法,以及部分例子,目标是帮扶大家一同来复习一下T-SQL的主导语句,以便在类型中更敏捷的运用,当然对于新手来说就更应当去上学和小结了。我个人感觉数据库那地方对此程序员来说很重点,无论是对于JAVA程序员依旧DOTNET程序员以及其它编程人士来说都是必须控制的。为了救助大家更好的往返顾T-SQL,本人使用空闲的时刻整理的一念之差T-SQL的语句和语法。希望对大家有用!

USE Temp;

SELECT empid, YEAR(orderdate) AS orderyear, COUNT(*) AS numorders
FROM Sales.Orders
WHERE custid = 71
GROUP BY empid, YEAR(orderdate)
HAVING COUNT(*) > 1
ORDER BY empid, orderyear;

好的!大家先来看多少个图像:

大家来详细分析一下sql语句的逻辑处理顺序,固然select在每条语句的第三位,但事实上它是被最后才处理的

棱形manbet手机客户端3.0 1三角形manbet手机客户端3.0 2正方形manbet手机客户端3.0 3圆形manbet手机客户端3.0 4矩形manbet手机客户端3.0 5梯形manbet手机客户端3.0 6

1.from  

地点这个图片都是用T-SQL完成的,小说的最终我们一齐来用T-SQL画出这几个图片。

2.where

先是,我们初始回想一下T-SQL的主题语法:

3.group by

函数

abs(x):求相对值

例:    select abs(-3)     值为:3

sqrt(x)求平方根

例:    select sqrt(4)     值为:2.0

rand([0])返回0~1之间的随机float值

floor(X):再次来到小于或等于X值的最大整数manbet手机客户端3.0,;

例:    select floor(34.5)   值为:34

ceiling(X):再次回到大于或等于X值的蝇头整数;

例:    select ceiling(34.5)  值为:35

round(x,length):四舍五入函数,length为正,则对X小数位数四舍五入,length为负,则对X从小数点左侧length位起四舍五入,若length既为负数且其相对值领先X整数部分    
数字个数,则函数值为0;

manbet手机客户端3.0 7)

例:    select ROUND(63.567, 1)      值为:63.600

      select ROUND(63.567, -1)     值为:60.000

      select ROUND(63.567, 0)      值为:64.000

      select ROUND(63.567, -3)       值为:0.000

manbet手机客户端3.0 8)

Sign(X):求符号函数,X>0则sign(x)=1;
X=0
则sign(X)=0;X<0 则sign(X)=-1

例:     select sign(-3)        值为:-1

        select sign(3)        值为:1

        select sign(0)         值为:0

Power(X,y):求X的y次方;

例:    select power(4,2)    值为 :16

 

4.having

字符串函数

ASCII(串):重回字符表达式最左端字符的ASCII
码值;

例:    select ASCII('bc')   值为:98

CHAR(ASCII码):用于将ASCII
码转换为字符,要是没有输入0 ~ 255 之间的ASCII
码值,重返值为NULL ;

例:    select char(97)    值为:a

Lower(串):把字符串整体变换为小写;    

例:    select lower('QingPingGuo')     值为: qingpingguo

Upper(串)
:把字符串全体转移为大写;

例:    select upper('QingPingGuo')    值为: QINGPINGGUO

LTrim(串), RTrim(串):去掉左右空格;

 例(去左空格):  select '博客园'+LTrim('   青苹果   ')+'博客园'    值为:博客园青苹果    博客园

space(个数):重临指定个数的空格;

replicate(串,次数):将串重复指定次数;

例:    select replicate('青苹果',2)    值为:青苹果青苹果

Left(串, 个数):重回已知串从左侧开始指定个数的字符;

例:    select left('青苹果在博客园', 4)    值为:青苹果在

Right(串, 个数):重返已知串从左边开首指定个数的字符; 

例:    select right('青苹果在博客园', 4)    值为:在博客园

DataLength(串):再次来到串的字节数长度,计算串尾空格。可以用它检查varchar,text等的动态长度;

例:    select datalength('青苹果在博客园')    值为:14

SubString(串, 开第一地方,
长度):重返从字符串左边’开头地方’起数据为’长度’的字符串。其中表明式可以是字符串或二进制串或含字段名或字符型变量的表明式。在那边要小心一下SUBSTRING()函数不可以用于TEXT
和IMAGE 数据类型;

例:    select substring('青苹果在博客园',5,2)     值为:博客

Len(串)
:再次来到表明式的长度。注意它回到的是字符数,而不是字节数。不计算串尾空格;

例:    select   len('青苹果cnblogs    ')      值为:10

Replace(‘串1′,’串2′,’串3’):用串3替换串1中出现的装有串2字符;

例:    select replace('青苹果在北京','北京','博客园')    值为:青苹果在博客园

Stuff(串1, 开第一地方, 长度, 串2):删除串1指定地点上马指定长度的字符串,并在指定地方插入串2;

例:    select stuff('青苹果是程序猿吗?',5,3,'攻城狮')    值为:青苹果是攻城狮吗?

reverse(串)
:将指定的字符串的字符排列顺序颠倒;

例:    select reverse('12345')    值为:54321

charindex(串1,串2):重返串1在串2的初阶地点,可从所付出的‘先河地方’进行查找;

例:    select charindex('guo','qingpingguo')    值为:9

 

5.select

改换函数

所谓转换函数就是把某种数据类型转换的表明式显示转换成另一种数据类型的函数。
CAST(表明式 AS 数据类型[(长度)])

例:  select  '今天是:' + Cast(GetDate() as char(10))  值为:今天是:07 23 2012

CONVERT(转换后的对象数据类型[(length)],表达式[style])

例:  select  '今天是:' +convert(char(10),getdate())    值为:今天是:07 23 2012

下边来看一个求差值的函数datediff函数;

DATEDIFF(datepart,date1,date2)

例:  select  datediff(yy,'1988.09.14','2012.12.21')  值为:24
    select  datediff(mm,'1988.09.14','2012.12.21')  值为:291

6.order by

聚合函数

聚合函数也就是总括函数,它首若是对一组值进行测算,它的法力分别是:求和(sum)、求最小(min)、求最大(max)、求总行数(count)、求平均值(avg)

例:   求和:select sum(Name) from TableName
       求最小:select min(Name) from TableName
       求最大:select max(Name) from TableName
      求总数:select count(Name) from TableName
      求平均:select avg(Name) from TableName

7.TOP

T-SQL的局地首要字

Print  向客户端再次回到用户音讯

例:  print '青苹果'         屏幕上就会显示“青苹果三个字“

Go     
用来打招呼SQL一批语句的停止

Distinct   去掉重复值

Declare    用来声称变量

例:  declare @a int

Set    为变量赋值

例:  set @a='青苹果'

While 
在SQL中用来循环(好像在SQL中用来做巡回的重大字不多)

manbet手机客户端3.0 9)

语法:    WHILE <条件表达式>
                 BEGIN
                    <命令行或程序块>
                   [BREAK]
                   [CONTINUE]
                   [命令行或程序块]
                 END

manbet手机客户端3.0 10)

While相比主要,我们来做个例证加深一下对While循环的接头:

manbet手机客户端3.0 11)

declare @a int
set @a=1
while @a<5
begin 
print '青苹果'
set @a=@a+1
end

输出结果:青苹果
     青苹果
     青苹果
     青苹果

manbet手机客户端3.0 12)

if else    认清语句

看清语句用的仍然比较多的大家照旧来做个例证表明一(Wissu)下;

求:a、b、c多少个数的最大值?

manbet手机客户端3.0 13)

declare  @a int,@b int,@c int,@max  int
set @a=1 set @b=2 set @c=3 
if  @a>@b               
   set  @max=@a
else
   set  @max=@b
if  @max<@c
   set  @max=@c      
print   @max

输出结果:3

manbet手机客户端3.0 14)

begin end 
用来设定一个程序块,将在BEGIN…END内的持有程序视为一个单元执行。

Exists     认清是还是不是存在

Case  
也是用来判定的,和IF语句差不离,它的格式为:

 CASE  <运算式>
        WHEN <运算式1> THEN  <结果1>
          … 
           WHEN<运算式n> THEN   <结果n>
          [ELSE  <结果n+1>]
  END

 Return
  用来截至近年来先后的施行,重返到上一个调用它的次序或其余程序。在括号内可指定一个重回值。

Goto标示符 
用来改变程序执行的流水线,使程序跳到标有标识符的指定的次第行再持续往下实施。要小心的是用作跳转目的的标识符可为数字与字符的结缘,但必须以“:”结尾,如:“1023:”
“qingpingguo:”

manbet手机客户端3.0 15)

例子:
        declare @a int 
       set @a = 1  
     qingpignguo:       
     print @a       
       set @a = @a + 1 
       while @a < 6   
      goto qingpignguo

输出结果:12345

manbet手机客户端3.0 16)

说到底一个给大家看个好玩的:

Waitfor   
用来刹车程序执行,直到等待指定时间之后,或所设定的年华已到才持续往下运作程序。

语法:  waitfor {delay '时间'|time '时间'}

解释:

(1)‘时间’必须为DATETIME类型数据,且不可以包含日期,如‘10:12:05’

(2)DELAY:用来设定等待的时光长度,最多为24刻钟。(是一个岁月间隔)

(3)TIME:用来设定等待截止的时间点(是一个切实可行的时间)

例子:
    waitfor  delay '00:00:03'
   print '你好,我是青苹果'
   go

以上就是T-SQL的有着情节了,接下去我们来行使最终的时光画多少个图形:

直角三角形:

manbet手机客户端3.0 17)

declare @a int 
set @a=1
while(@a<11)
begin
print replace(space(@a),' ','*')
set @a=@a+1
end

manbet手机客户端3.0 18)

直角三角形 输出结果:manbet手机客户端3.0 19

 

正方形:

manbet手机客户端3.0 20)

declare @a int
declare @b int
declare @c nvarchar(100)
set @a=1
set @b=1
set @c=''
while (@a<9)
begin
   while (@b<15)
   begin 
    set @c=@c+'*'
    set @b=@b+1
   end
    print @c 
set @a=@a+1
end

manbet手机客户端3.0 21)

 

正方形 输出结果:manbet手机客户端3.0 22

 

菱形:

manbet手机客户端3.0 23)

declare @a int,@b int
set @a=1 set @b=15

if(@b%2!=1)
print '数字必须都是奇数'
else
while(@a<=@b)
begin
if(@a%2=1)
print space((@b-@a)/2)+replace(space(@a),' ','*')+space((@b-@a)/2)
set @a=@a+1
end
set @a=@a-2
while (@a<=@b)
begin
if(@a%2=1)
print space((@b-@a)/2)+replace(space(@a),' ','*')+space((@b-@a)/2)
set @a=@a-1    
if (@a<0)
break
end

manbet手机客户端3.0 24)

菱形 输出结果:manbet手机客户端3.0 25

 

梯形:

manbet手机客户端3.0 26)

declare @a int,@b int
set @a=7 set @b=21
if(@a%2=1)
while(@a<@b)
begin
print space((@b-@a)/2)+replace(space(@a),' ','*')+space((@b-@a)/2)
set @a=@a+2
end

manbet手机客户端3.0 27)

梯形 输出结果:manbet手机客户端3.0 28

 

矩形:

manbet手机客户端3.0 29)

declare @a int
declare @b int
declare @c nvarchar(100)
set @a=1
set @b=1
set @c=''
while (@a<9)
begin
   while (@b<23)
   begin 
    set @c=@c+'*'
    set @b=@b+1
   end
    print @c 
set @a=@a+1
end

manbet手机客户端3.0 30)

矩形 输出结果:manbet手机客户端3.0 31

 

圆形:

manbet手机客户端3.0 32)

declare @a int,@b int
set @a=9 set @b=13

while (@a<=@b)
begin
if(@a%2=1)
print space((@b-@a)/2)+replace(space(@a),' ','*')+space((@b-@a)/2)
set @a=@a+1
end
set @a=@a-1
begin
print space((@b-@a)/2)+replace(space(@a),' ','*')+space((@b-@a)/2)
end
while (@a<=@b)
begin
if(@a%2=1)
print space((@b-@a)/2)+replace(space(@a),' ','*')+space((@b-@a)/2)
set @a=@a-1
if(@a<10)
break
end
set @a=@a-2
begin
print space((@b-@a)/2)+replace(space(@a),' ','*')+space((@b-@a)/2)
end

manbet手机客户端3.0 33)

圆形输出结果:manbet手机客户端3.0 34

The End!
以上就是本文的具有内容,可能写的不够周到,有欠缺的地点希望我们多多补充,多多发布意见!谢谢!

在密切分析种种执行各类代表的意味 (它的骨子里顺序)

FROM Sales.Orders
WHERE custid = 71
GROUP BY empid, YEAR(orderdate)
HAVING COUNT(*) > 1
SELECT empid, YEAR(orderdate) AS orderyear, COUNT(*) AS numorders
ORDER BY empid, orderyear;

1.从 Orders 表查询数据

2.依照标准筛选客户ID等于71的

3.对客户id和订单年度 进行分组

  1. 再选出大于一个订单的组

5.重回查询出的数据 以及你要显得的字段

6.结尾对客户id 和订单 举行排序

7.输出

输入的键入顺序和拍卖顺序差距等是有缘由的,SQL设计师是为着让用户根据英文的主意提供自己的伸手

建议、坑

  1. from 表时  最好给定 库名和表名  Sales.Orders 
    让表呈现表示 不用程序检索。
  1. where 子句相当重大  SQL Server 会对where 条件
    举办评估访问请求数据要采取的目录,通过索引可以大大收缩表扫描时间

同时 where 子句检索 落成后 
它回到的是寻觅结果为True的行  ,但始终铭刻, SQL
数据库使用三值谓词逻辑,也就是说有多个结果。

True,False 或 UNKNOWN ,  再次回到true 行 并差异不回来False  实际上是不回去 False 行 和 UNKNOWN 行
未来会再博客中特意讲NULL。

3.记住除count(*)之外, 
聚合函数都是忽视NULL标记  即便有一组数据“1,1,3,4,5,null”列名为qty  
表明式Count(*) 重回的是6 不过Count(qty)

是5  count中加以突显值 就会默许寻找已知值 
也得以  count(distinct qty ) 再次来到的是4 去重新  这么些 可以用来 处理 
重临每个不重复总括问题很方便 它和 select
distinct
有很大性能不同 未来会细讲 也足以
sum(distinct qty
) 是13
也是用作计算不另行数据。

4.因为 group by
属于行处理 在having 先统计所以having 中得以出现  聚合函数 。

5.像上面的 “YEAR(orderdate)” SQL Server 只对它运行四遍 
能鉴别查询中重复使用的同一表明式

6.最好别使用 select * 即使你要查询 所有字段。

7.选取 order by 对有恢宏重复的字段举行排序是低效的  例如对日期举行排序
那样一个排序选10条 会有四个被认为是对的结果
所以大家要确保排序字段的数额唯一性, 以及在 select distinct  时 排序
会导致 单个结实对应七个源数据行。

 

留下评论

网站地图xml地图