澳门新萄京官方网站-www.8455.com-澳门新萄京赌场网址

澳门新萄京官方网站:sql基础知识,server中部分

2019-07-07 作者:数据库网络   |   浏览(192)

搜索某列数据包括某一字符串:

Group by Fage Having Count(*)>1

1.TOP 子句

TOP 子句用于规定要回去的笔录的数量。

对于有所数千条记下的大型表来讲,TOP 子句是相当实用的。

SQL Server 的语法:

SELECT TOP number|percent column_name(s)

FROM table_name

 

一、轻巧询问

  1.齐声结果集

SELECT * FROM table WHERE column LIKE  '%string%'

界定结果集行数

2.’%%’查询

小编们期望从上面包车型客车 "Persons" 表中精选居住的城阙以 "A" 或 "L" 或 "N" 开端的人:

咱俩得以采纳下边包车型大巴 SELECT 语句:

SELECT * FROM Persons

WHERE City LIKE '[ALN]%'

1、查询全体数据,查询部分列数据,列外号

(1) 轻巧的结果集一齐

 

Select top 3 * from T_Employee order by FSalary desc

3. IN 操作符实例

今昔,我们意在从上表中精选姓氏为 亚当斯 和 Carter 的人:

大家得以行使下边包车型客车 SELECT 语句:

SELECT * FROM Persons

WHERE LastName IN ('Adams','Carter')

   SELECT * FROM 表名

  select FNumber,FName,Fage from T_Employee

找出某列数据不分包某一字符串

搜寻根据薪水从高到低排序检索从第六名伊始一共四人的音讯

4. LEN() 函数

LEN 函数再次来到文本字段中值的长度。

SQL LEN() 语法

SELECT LEN(column_name) FROM table_name

  SELECT 列1 AS 'BIAOTI1','BIAOTI2'=列2  FROM 表名

  union

SELECT * FROM table WHERE column NOT LIKE '%string%'

select top 3 * from T_Employee 

5. ROW_NUMBER()OVER()函数

ROW_NUMBER() OVER (PARTITION BY COL1 ORDER BY COL2)表示遵照COL1分组,在分组内部遵照COL2排序,而此函数总结的值就意味着每组内部排序后的逐条编号(组内三番五次的独一的)

2、查询不另行的数量,

  select FidCardNumber,FName,Fage from T_Employee

 

where FNumber not in (select top 5 FNumber from T_Employee order by FSalary desc)

6. ROUND 函数

用以把数值字段舍入为钦点的小数位数。

语法

ROUND ( numeric_expression , length [ , function ] )

参数

numeric_expression

确切数字或临近数字数据类型类其余表明式(bit 数据类型除此之外)。

length是 numeric_expression 将在四舍五入的精度。length 必须是 tinyint、smallint 或int。当 length 为正数时,numeric_expression 四舍五入为 length 所钦命的小数位数。当 length 为负数时,numeric_expression 则按 length 所钦点的在小数点的侧边四舍五入。

  SELECT  DISTINCT  列名 FROM 表名

(2) 查询的基本规范是:每一种结果集必须有一致的列数,没个结实集的列必须类型一样。

轮换某字段中的部分字符串

order by FSalary desc

7.HAVING 子句

在 SQL 中追加 HAVING 子句原因是WHERE 关键字不可能与磋商函数一同行使。

SQL HAVING 语法

SELECT column_name, aggregate_function(column_name)

FROM table_name

WHERE column_name operator value

GROUP BY column_name

HAVING aggregate_function(column_name) operator value

Having 只用于查询条件中有商榷函数的。

3、查询前n行数据

  select FNumber,FName,Fage,FDepartment from T_Employee

UPDATE table SET column = REPLACE(column, 源字符串,目标字符串) 

8. ISNULL函数

(1)ISNULL
应用内定的替换值替换 NULL。
语法
ISNULL ( check_expression , replacement_value )

此处isnull用于查询字段里

(2)

case when isnull(b.c_delivery_type,'')='' then  b.c_delivery_type else a.c_delivery_type end  as 物流格局

 

null是特种的值,他不可能被举行相比,所以=<>等这个标识是不能够决断null的,所以isnull(字段名,'')='',把null调换到'',再和''相比,而字段名='',由于并未有拍卖null的景色,所以只要字段有null值,将被忽略

  SELECT  TOP  N  PERCENT * FROM 表名

  union

 

sql server2006后增添了Row_Number函数简化实现,用Row_Number函数也能用来分页

9.union 用法

分为union与union all
union 缺省在统一结果集后化解重复项,

union all 钦赐在统一结果集后保存重复项,
打个比如吧 举个例子A表的数量是 A{ 1,4,5,9}       B{2,3,4,5}
那自个儿实行此语句 select * from A union select * from B 这结果是{1,2,3,4,5,9}
一经施行select * from A union all select * from B 结果是{1,2,3,4,4,5,5,9}

4、过滤行 

  select FidNumber,FName,Fage,’临时工,无部门’ from T_Employee

应用 B 表中的数据更新到 A 表中

select *

10. DateDiff()

DATEDIFF 函数总计钦定的五个日子中第一个日子与第二个日子的时光差的日子部分。换句话说,它得 出四个日子之间的间隔。结果是格外 date2 - date1 的日期部分的带符号整数值。

表达式DateDiff(timeinterval,date1,date2 [, firstdayofweek [, firstweekofyear]])

同意数据类型: timeinterval 代表相隔时间的连串,代码为:

年份 yy、yyyy 季度 qq、q

月份 mm、m

每年的某二日 dy、y

日期 dd、d

星期 wk、ww

工作日 dw

小时 hh

分钟 mi、n

秒 ss、s

毫秒 ms

    运算符:比较运算符、逻辑运算符(AND/O科雷傲/NOT)、范围运算符([NOT]BETWWEEN  AND)、列表运算符(IN(值列表))、方式相配符、空值决断符

  1. union All
方法①:UPDATE tableA SET columnA = tableB.columnB FROM tableA inner join tableB on tableA.ID = tableB.ID where columnC='条件'
方法②:UPDATE tableA SET columnA = tableB.columnB FROM tableA,tableB where tableA.ID = tableB.ID and columnC='条件'

from

11. datepart()函数

DATEPART() 函数用于重临日期/时间的独立部分,比如年、月、日、小时、分钟等等。

DATEPART(datepart,date)

date 参数是法定的日期表明式。datepart 参数能够是下列的值:

datepart

缩写

yy, yyyy

季度

qq, q

mm, m

年中的日

dy, y

dd, d

wk, ww

星期

dw, w

小时

hh

分钟

mi, n

ss, s

毫秒

ms

微妙

mcs

纳秒

ns

 

    SELECT * FROM 表名  WHERE  条件 

(1)  select FName,Fage from T_Employee

 

(

12. join函数

sql之left join、right join、inner join的区别

left join(中国左翼小说家联盟接) 重回满含左表中的全部记录和右表中群集字段相等的笔录
right join(右联接) 重返包涵右表中的全部记录和左表中联合字段相等的笔录
inner join(等值连接) 只回去五个表中集结字段相等的行

   形式相称符:where 列名1 LIKE  '%'  '_'      '[^0-9][A-Z]'

union

删去表中数据(并且会免去主键标志)

select *,row_number() over (order by salary desc) as row_num from T_Employee

13. group by

group by 对结果集分组,针对每一组再次回到一行。

若select子句中涵盖聚合函数,则聚合函数再次回到每一个组的音讯

若内定group by时,select语句后的具备非聚合函数字段必须出现在group by列表中。

   NULL判断符:IS NULL  /IS NOT NULL

select FName,Fage from T_Emoloyee

TRUNCATE TABLE tablename

)as T_EmployeeWithRowNumbers

14. cast()

Cast()函数是更改数据类型的

CAST 和 CONVERT (Transact-SQL),将一种数据类型的表达式改换为另一种数据类型的表明式

 

Transact-SQL 语法约定

语法

Syntax for CAST:

CAST ( expression AS data_type [ (length ) ])

Syntax for CONVERT:

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

参数

expression

其余有效的表达式。

data_type

目标数据类型。这包括 xml、bigint 和 sql_variant。不可能接纳小名数据类型。有关可用数据类型的详细音讯,请参阅数据类型 (Transact-SQL)。

length

钦点指标数据类型长度的可选整数。默许值为 30。

style

点名 CONVERT 函数如何转移 expression 的卡尺头表达式。假如体制为 NULL,则赶回 NULL。该限制是由 data_type 分明的。有关详细新闻,请参阅“备注”部分。

5、排序   ORDER BY 列名1  [ASC/DESC],列名2  [ASC/DESC]

   (*) union合併三个查询结果集,并且将中间完全重复的数码行合併为一条记下。

 

where T_EmployeeWithRowNumbers.row_num between 6 and 8

15. dateadd()

概念和用法

DATEADD() 函数在日期中加上或减去钦命的时日间隔。

语法

DATEADD(datepart,number,date)

date 参数是官方的日期表明式。number 是您愿意丰裕的区间数;对于以往的小运,此数是正数,对于过去的年月,此数是负数。

datepart 参数能够是下列的值:

datepart

缩写

yy, yyyy

季度

qq, q

mm, m

年中的日

dy, y

dd, d

wk, ww

星期

dw, w

小时

hh

分钟

mi, n

ss, s

毫秒

ms

微妙

mcs

纳秒

ns

 

二、函数

(2) select FName,Fage from T_Employee

子查询 WITH  AS 用法

去掉数据再度

16. datepart()

概念和用法

DATEPART() 函数用于再次来到日期/时间的独门部分,比方年、月、日、时辰、分钟等等。

语法

DATEPART(datepart,date)

date 参数是法定的日子表明式。datepart 参数能够是下列的值:

datepart

缩写

yy, yyyy

季度

qq, q

mm, m

年中的日

dy, y

dd, d

wk, ww

星期

dw, w

小时

hh

分钟

mi, n

ss, s

毫秒

ms

微妙

mcs

纳秒

ns

1、字符串函数:substring(expression,start,length)、--求子串

  union All

WITH temptable AS (SELECT * FROM table WHERE column = '查询条件')

SELECT * FROM temptable 

select distinct FDepartment from T_Employee

17. charindex() substring()

SQL CHARINDEX

函数再次来到字符恐怕字符串在另二个字符串中的开首地方

CHARINDEX

函数调用方法如下:

CHARINDEX ( expression1 , expression2 [ , start_location ] )

Expression1是要到expression第22中学寻觅的字符中,start_location是CHA本田CR-VINDEX函数初始在

expression第22中学找expression1的职分。SQL CHA途胜INDEX函数重临三个整数,重临的整数是要找的字符串在被找的字符串中的地点

 

select substring('123,456',charindex(',','123,456') ,len('123.456')-3)  结果: ',456'
情趣:截取’123,456‘ 从第4为始发截取 4位

substring(字段,第多少个字符起始截取,截取长度)
charindex(',','123,456')  ‘,’的位置 结果为:4
len('123.456')  字段长度  结果为:7

               str(float_expression,[length,[decimal]])--将数字类型调换来字符类型

  select FName,Fage from T_Employee

 

distinct是对整个结果集进行多少再一次管理的,并不是对准每两个列

18. decimal()

decimal(a,b)
a内定小数点侧边和左边能够储存的十进制数字的最大个数,最大精度38。
b钦点小数点左侧能够积存的十进制数字的最大个数。小数位数必须是从 0 到 a之间的值。暗许小数位数是 0。

 

2、日期函数:getdate()、--获取当前系统日期

(*) union因为要进行重复值的围观,所以效用低,由此一旦不是显明要联合重复行,那么推荐用union All

始建非聚合索引

select distinct FDepartment,FSubCompany  from T_Employee(distinct是针对FDepartment,FSubCompany四个列,实际不是一列)

19. right()

反回字符左侧的内定长度的字符

例:select right('1234',2)
结果:34

              dateadd(datepart,number,date)、--yy  mm dd 

  1. 数据库函数
CREATE NONCLUSTERED INDEX index_name ON table (column)

Union(假使再度的数码会剔除掉,union all不会去除重复数据)

20. 取整函数

1 trunc(value,precision)按精度(precision)截取有个别数字,不进行舍入操作。
2 round(value,precision)依照给定的精度(precision)进行四舍五入。
3 ceil (value) 产生过量或等于指定值(value)的细微整数。
4 floor(value)与 ceil()相反,产生低于或等于钦命值(value)的小不点儿整数。
5 sign(value) 与相对值函数ABS()相反。ABS()给出的是值的量实际不是其标识,sign(value)则给出值的号子并非量。

             Datediff(datepart,date1,date2)、--求四个日子的差

(1) 数字函数

 

select FName,Fage from T_TempEmployee

21. partition by

partition by的效果与利益仅用于分组

             Year(date)、Month(date)、Day(date)

 1) ABS():求相对值    select ABS(-3)

查询表中两行数据某字段值是还是不是再一次

union

22.convert()

概念和用法

CONVERT() 函数是把日子调换为新数据类型的通用函数。

CONVERT() 函数能够用分裂的格式显示日期/时间数额。

语法

CONVERT(data_type(length),data_to_be_converted,style)

data_type(length) 规定指标数据类型(带有可选的尺寸)。data_to_be_converted 含有需求改换的值。style 规定日期/时间的输出格式。

能够运用的 style 值:

Style ID

Style 格式

100 或者 0

mon dd yyyy hh:miAM (或者 PM)

101

mm/dd/yy

102

yy.mm.dd

103

dd/mm/yy

104

dd.mm.yy

105

dd-mm-yy

106

dd mon yy

107

Mon dd, yy

108

hh:mm:ss

109 或者 9

mon dd yyyy hh:mi:ss:mmmAM(或者 PM)

110

mm-dd-yy

111

yy/mm/dd

112

yymmdd

113 或者 13

dd mon yyyy hh:mm:ss:mmm(24h)

114

hh:mi:ss:mmm(24h)

120 或者 20

yyyy-mm-dd hh:mi:ss(24h)

121 或者 21

yyyy-mm-dd hh:mi:ss.mmm(24h)

126

yyyy-mm-ddThh:mm:ss.mmm(没有空格)

130

dd mon yyyy hh:mi:ss:mmmAM

131

dd/mm/yy hh:mi:ss:mmmAM

实例

上面包车型大巴本子使用 CONVERT() 函数来显示分裂的格式。我们将使用 GETDATE() 函数来取妥帖前的日子/时间:

CONVERT(VARCHAR(19),GETDATE())

CONVERT(VARCHAR(10),GETDATE(),110)

CONVERT(VARCHAR(11),GETDATE(),106)

CONVERT(VARCHAR(24),GETDATE(),113)

结果类似:

Dec 29 2008 11:45 PM

12-29-2008

29 Dec 08

29 Dec 2008 16:25:46.635

讲话及查询结果:
SELECT CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM
SELECT CONVERT(varchar(100), GETDATE(), 1): 05/16/06
SELECT CONVERT(varchar(100), GETDATE(), 2): 06.05.16
SELECT CONVERT(varchar(100), GETDATE(), 3): 16/05/06
SELECT CONVERT(varchar(澳门新萄京官方网站:sql基础知识,server中部分函数功能详解。100), GETDATE(), 4): 16.05.06
SELECT CONVERT(varchar(100), GETDATE(), 5): 16-05-06
SELECT CONVERT(varchar(100), GETDATE(), 6): 16 05 06
SELECT CONVERT(varchar(100), GETDATE(), 7): 05 1606
SELECT CONVERT(varchar(100), GETDATE(), 8): 10:57:46
SELECT CONVERT(varchar(100), GETDATE(), 9): 05 16 2006 10:57:46:827AM
SELECT CONVERT(varchar(100), GETDATE(), 10): 05-16-06
SELECT CONVERT(varchar(100), GETDATE(), 11): 06/05/16
SELECT CONVERT(varchar(100), GETDATE(), 12): 060516
SELECT CONVERT(varchar(100), GETDATE(), 13): 16 05 2006 10:57:46:937
SELECT CONVERT(varchar(100), GETDATE(), 14): 10:57:46:967
SELECT CONVERT(varchar(100), GETDATE(), 20): 2006-05-16 10:57:47
SELECT CONVERT(varchar(100), GETDATE(), 21): 2006-05-16 10:57:47.157
SELECT CONVERT(varchar(100), GETDATE(), 22): 05/16/06 10:57:47 AM
SELECT CONVERT(varchar(100), GETDATE(), 23): 2006-05-16
SELECT CONVERT(varchar(100), GETDATE(), 24): 10:57:47
SELECT CONVERT(varchar(100), GETDATE(), 25): 2006-05-16 10:57:47.250
SELECT CONVERT(varchar(100), GETDATE(), 100): 05 16 2006 10:57AM
SELECT CONVERT(varchar(100), GETDATE(), 101): 05/16/2006
SELECT CONVERT(varchar(100), GETDATE(), 102): 2006.05.16
SELECT CONVERT(varchar(100), GETDATE(), 103): 16/05/2006
SELECT CONVERT(varchar(100), GETDATE(), 104): 16.05.2006
SELECT CONVERT(varchar(100), GETDATE(), 105): 16-05-2006
SELECT CONVERT(varchar(100), GETDATE(), 106): 16 05 2006
SELECT CONVERT(varchar(100), GETDATE(), 107): 05 162006
SELECT CONVERT(varchar(100), GETDATE(), 108): 10:57:49
SELECT CONVERT(varchar(100), GETDATE(), 109): 05 16 2006 10:57:49:437AM
SELECT CONVERT(varchar(100), GETDATE(), 110): 05-16-2006
SELECT CONVERT(varchar(100), GETDATE(), 111): 2006/05/16
SELECT CONVERT(varchar(100), GETDATE(), 112): 20060516
SELECT CONVERT(varchar(100), GETDATE(), 113): 16 05 2006 10:57:49:513
SELECT CONVERT(varchar(100), GETDATE(), 114): 10:57:49:547
SELECT CONVERT(varchar(100), GETDATE(), 120): 2006-05-16 10:57:49
SELECT CONVERT(varchar(100), GETDATE(), 121): 2006-05-16 10:57:49:000

3、数学函数:round(numeric_exp,length)--

 2) ceiling():舍入到最大整数。譬喻:3.33将被舍入为4,2.89将被舍入为3,-3.61将被舍入为-3。ceiling的克罗地亚语意思是天花板。

select column from table group by column having count(column) > 1

select FName,Fage from T_Employee

23 Sql Server REPLACE函数的使用

REPLACE
用首个表明式替换第三个字符串表明式中出现的有所第3个给定字符串表明式。

Replace(‘123456’,’23’,’9’)

将123456中的23用9替换掉

 

4、转变函数:convert(datatype [(length)],expression[,style])--类型转变函数

 3) floor():舍入到微小整数。举例:3.33将被舍入为3,2.89将被舍入为2,-3.61将被舍入为-4。floor的加泰罗尼亚语意思是:地板。

 

union因为要开始展览重复值扫描,所以功用低,由此只要不是鲜明要联合重复行,那么就用union all

24 str(a,b,c)函数

将数值型转变来内定长度的字符串

如select STR(12345.633,7,1) 结果为12345.6

率先个参数是要转移的数值,

其次个参数是改动後的总厅长度(含小数点,正负号),

其多个参数为小数位

25 .INSERT INTO SELECT语句 说话格局为:Insert into Table2(田野(field)1,田野(field)2,...) select value1,value2,... from Table1

澳门新萄京官方网站,26. select 1 from table

Select 1 from table 是查询表的数额有微微,select * from table是查询表的持有数据的详细音讯

27.rand()函数

SQL RAND函数调用​能够发生随机数

Select rand()获取介于0和1里面包车型客车多少个数(小数)

Select rand()*10获取0和10期间的四个数(小数)

Select str(rand()*10)获取0和10之间的一个数(整数)

Select str(rand()*10000) 获取0和一千0里面包车型地铁三个数(整数)

28.积累进程中的SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON 说话用法

SET QUOTED_IDENTIFIECRUISER为ON时,标志符能够由双引号分隔,文字必须由单引号分隔

SET ANSI_NULLS,就是说NULL是不是足以开始展览=和<>相比较;

当设置为ON 时,表示不得以开始展览相比较,凡是举行相比较的,结果都为0

当设置为 OFF时,表示能够开始展览比较,相比的结果正是事实上结果

29. ISNUMERIC

推断参数是否是纯数字型

30.rtrim函数

截断全数尾随空格后重返一个字符串。

 

5、次序函数:row_number()、Rank()、dense_rank() 

 4) round():四舍五入。舍入到“离自身半径近期的数”。round的德语意思是:半径。

将表A的数据写入表B中

6、Isnull函数--

譬喻说:select Round(-3.1415926,3)   施行结果是:-3.14两千0

INSERT INTO B  SELECT * FROM A;

数字函数

7、集结函数:min,max,sum,avg,count       

(2) 字符串函数

 

ABS():求相对值

三、分组

 1) len():总结字符串长度,   select len(‘234’)   试行结果是3。举例:

ROW_NUMBELX570() 的用法,以下是依靠 ColumnName1 举办编号,编号所在列名称叫NewColumnName:

CEILING():舍入到最大整数。3.33将被舍入为4,2.89将被舍入为3,-3.61将被舍入为-3

         分组过滤(列1.列2 ,必须在group by 中冒出的)

   select FName,len(FName) from T_Employee。

  SELECT 
        ROW_NUMBER() over(PARTITION BY ColumnName1 ORDER BY ColumnName1 asc,ColumnName2 asc) as NewColumnName, 
        ColumnName1
     FROM TableName

Ceiling->天花板

      SELECT  列1 ,列2 ,COUNT(列3) FROM 表名 WHERE 条件

 2) lower(),upper():转小写,转大写。

 

FLOO奥迪Q5():舍入到微小整数。3.33将被舍入为3,2.89将被舍入为2,-3.61将被舍入为-4

      GROUP BY  列1,列2

 3) ltrim():字符串侧面的空格去掉。比方:去掉两侧的空格:

索求语句的实践顺序: 

Floor->地板

      HAVING 条件(分组之后的过滤,能够用聚合函数)

   rtrim():字符串右边的空格去掉。

select –>where –> group by–> having–>order by

ROUND():四舍五入。

四、连接(子查询结果集假使在二个表中,用子查询,否则用连续)

  比如:去掉两侧的空格:ltrim(rtrim(‘   韩迎龙    ’))

 

Round->“半径”。Round(3.1425,2)->3.14 前边的“2”指为保留2位精度

1、内连接:  SELECT A.列名 ,B.列名  FROM 表1  A

 4) SubString(string,start_position,length),参数string为主字符串,start_position为字符串在主字符串中的开始地点,length为子字符串的最大尺寸。比方:

字符串第四个字符是字母的,可在 SQL 使用下列判定语句:

字符串函数

            [INNER] JOIN  表2  B  ON  A.列名= B.列名

  select substring(‘abcdefghijk’,2,3)   实践结果为:bcd。

ascii(left(columnName, 1)) > 65

LEN():总计字符串长度

2、外接连:左外连接、右外连接、全外连接

  select FName,Substring(FName,2,2) from T_Employee。

 

LOWER(),UPPER():转小写,大写

          (保险贰个表中的多少,全体显得出来,再增添另一个表中知足条件的数据)

(3) 日期函数

查询数据库中死锁

LTRAV4IM():字符串侧边的空格去掉

         SELECT A.列名 ,B.列名  FROM 表1  A

 1) getdate():取稳当今天期的光阴。

select    
    request_session_id spid,   
    OBJECT_NAME(resource_associated_entity_id) tableName    
from    
    sys.dm_tran_locks   
where    
    resource_type='OBJECT' 

RT卡宴IM():字符串左边的空格去掉

           LEFT|RIGHT|FULL [OUTER] JOIN  表2  B  ON  A.列名= B.列名

 2) dateadd(datepart,number,date),总计扩充今后的时刻,参数date为待总结的日期,参数number为增量,参数datepart为计量单位。比如:

 

LTPAJEROIM(RT库罗德IM()),字符串两侧的空格去掉

五、子查询

  dateadd(day,3,date)为总结日期date的3天后的日子。

杀死死锁进度

SUBSTRING(string,start_position,length)

        select 列名1,列名2  from 表1

  dateadd(month,-3,date)为计算日期date的八个月前的日期。

Kill 进程ID

参数string为主字符串,start_position为子字符串在主字符串中初步地点,length为字符串的最大尺寸

           where 列 运算符 (select 语句)

  select dateadd(day,-3,getdate()) 试行结果是:当前时刻的前四天。

 

日期函数

        select 列名1,列名2  from 表1

 3) datediff(datepart,startdate,enddate):计算多个日子之间的差额。datepart为计量单位。

修改列的类型定义

GETDATE():取稳当前几日期时间

            where [not] exists (select 语句)

   select datetdiff(hh,getdate(),dateAdd(day,-3,getdate()))  推行结果为-72。

alter table 表 alter column 列名 类型

DATEADD(datepart,number,date),计算增添现在的日期。参数date为待计算的日子,参数number为增量,参数datepart为计量单位,可选值见备注。DATEADD(DAY,3,date)为计算日期date的3天后的日子,而DATEADD(DAY,3,date)为计算日期date的3天后的日子,而DATEADD(MONTH,-8,date)为总括日期date的半年此前的日期

         [not] in

   select FName,FInDate,DateDiff(year,FInDate,getdate()) from T_Employee 职员和工人的工作年龄。

 

datepart可选值(year,quarter(季度),month,day,week,hh)

         [not] exists

 4) datepart(datepart,date):重返四个日子的一定部分。举个例子:

修改列名称

DATEDIFF(datepart,startdate,enddate):总结三个日子之间的差额。datepart为计量单位,可选值参考datepart

         比较运算符引出的子查询

  select datepart(year,getdate()),datepart(month,getdate())  施行结果:二〇一一  4 

alter table 表名 rename column 源列名 to 目标列名

eg:select FName,FInDate,DateDiff(year,FIndate,getdate()) from T_Employee

六、建库建表  creat alert drop 管理结构

(4) 类型调换函数

 

DATEPART(datepart,date):重返贰个日子的一定部分

1、建库 CREATE DATABASE 数据库名   / 删除数据库  DROP  DATABASE 数据库名

 1) cast(expression as data_type)

扩充新列

select DatePart(year,getdate())->借使是当年是2012年,则赶回二零一三

           一般情状: mdf数据库主文件  ldf 日志文件 

 2) Convert(date_type,express)

alter table 表名 add 新列名 列类型 (列默认值)

类型转变函数

            特殊意况(大型数据库): ndf支持文件

  例如:select cast (’123’as int),cast(‘2012/4/9’ as dattime),Convert(datetime,’2012/4/9’)

 

CAST(expression AS data_type) eg:select cast('123' as int),cast('2008-08-08' as datetime)

2、建表 CREATE TABLE 表名         /    DROP TABLE 表名

  1. 空值处理函数

DateAdd(datepart, number, date) 

CONVERT(date_type,expression) eg:select convert(datetime,'2008-08-08'),convert(varchar(50),123)

         ( 列名1 数据类型  约束,  null/not null primary key check(),

(1) isNull(express,value):要是express不为空则再次回到express,不然再次来到value。举个例子:

number: 数值,能够是负数

SELECT FldNumber

           列名2 数据类型  约束                  unique,

  select isNull(Fname,’佚名’) as 姓名 from T_Employee

date: 合法的日子

RIGHT(FldNumber,3) as 后三位

          列名3 数据类型  约束                  Default值

  1. Case函数用法

datepart:

CAST(MuranoIGHT(FldNumber,3) AS INTEGE福特Explorer) as 后三个人的子弹头情势

          列名4 数据类型  约束                  foreign key references 表名2(列明)

(1) 单值推断,也正是switch case,语法为:

  年:yy,yyyy

空值管理函数

         )

 case expression

  季度 :qq, q

ISNULL(expression,value):如果expression不为空则再次来到expression,不然再次回到value。eg :select isnull(FName,'佚名') as 姓名 from T_Employee

         --增多字段

when value1 then returnvalue1

  月: mm, m

case函数用法1

       ALTER TABLE 表名

when value2 then returnvalue2

  年中的日 :dy, y

单值剖断,也正是switch case

       ADD

when value3 then returnvalue3

  日 :dd, d

CASE expression

         --修改字段 

else defaultreturnvalue

  周 :wk, ww

WHEN value1 THEN returnvalue1

         ALTER TABLE 表名

end

  星期 :dw, w

WHEN value2 THEN returnvalue2

        ALTER

比世尊讲如下:select FName,

  小时 :hh

WHEN value3 THEN returnvalue3

         --删除字段

         (

  分钟 :mi, n

ELSE defaultreturnvalue

        ALTER TABLE 表名

                     when 1 then ‘普通用户’

  秒 :ss, s

END

        DROP

                     when 2 then ‘会员’

  毫秒 :ms

eg:

     use  数据库

                     when 3 then ‘VIP’

  微妙 :mcs

SELECT FName,

3、管理表

              else ‘未知客户类型’

  纳秒 :ns

(

   INSERT [INTO]  表名(列列表)VALUES(值的列表)

              end

 

CASE FLevel 

   UPDATE   表名  SET  列1=值1,列2=值2 WHERE  条件

       ) as 客户类型 from T_Customer

WHEN 1 THEN 'VIP客户'

   DELETE  FROM 表名  WHERE  条件

  1. 索引Index

WHEN 2 THEN '高端客户'

七、数据完整性 constraint  references 

(1) 全表扫描,对数码实行查找(select)功用最差的正是全表扫描,就是一条一条的找。

WHEN 3 THEN '平时客户'

花色:  1.实体完整性

(2) 若无目录,查询中文字典将要一页页的翻,而有了目录,只要查询目录就可以,为了加强检索的速度,可感到常事检索的列加多索引,也就是创立目录。

ELSE '客户类型错误'

        2.参照(引用)完整性 

(3) 创设索引的诀要,在表设计器中单击右键,选择”索引/键”到丰盛到在列中挑选索引包涵的列。

END

         3.域完整性

(4) 使用索引能够升高查询功能,可是索引也是挤占空间的,並且丰裕,删除,更新数据的时候也要求共同创新索引,因而会下滑insert,update,delete的进程,独有在时时检索的字段(where)上创设索引。

)as FLevelName

         4.用户自定义完整性

(5) (*)就算创立了目录,任然有非常大可能率全表扫描,比方:link,函数,类型转变等。

FROM T_Customer

实现:

  1. 表连接ioin

select FName,

1、Primary key 主键

(1) select o.BillName,c.Name,c.Age

(

2、Foreign key 外键  REFERENCES  表名(列名)

 from T_Orders as o join T_Customers as c on o.customerID=c.ID

case

3、Unique 独一约束

注:轻巧的join能够将两张表依据一定的原理连接起来,使大家能够再两张竟然越来越多的表之间开始展览询问。

when FSalary<2000 then '低收入'

4、Check  检查约束

  1. 子查询

when FSalary>=2000 and FSalary<=四千 then '中等收入'

5、Default 私下认可值约束

(1)  将三个查询语句做成一个结果集供别的SQL语句使用,就如使用普通的表同样,被看作结果集的查询语句被称为子查询。全数能够使用表的地方大约都得以使用子查询来顶替。

else '高收入'

   数据管理

  select * from (select * from T2 where FAge<30)。

end

             加多数据

) as 收入水平

               insert [into] 表名 (列列表) values(zhi leibiao)

from T_Employee

             更新数据

表中有A、B、C三列,用SQL语句实现:当A列大于B列时选用A列不然选拔B列,当B列大于C列时精选B列不然选用C列

               update  表名 set 列名1=值1,列名2=值2 where

select (case when a>b then a else b end),(case when b>c then b else c end) from t

             删除数据

(

               delete  from  表名 where

我的表结构如下 duiwu     shengfu1         胜2         胜1         胜1         负2         负1         胜2         负要查询出如下结果:duiwu   胜     负1       3      12       1      2就是分别统计出每支队伍的胜负次数,这样的sql语句该怎么写啊?大虾帮帮忙啊,谢谢了

八、视图

最棒答案

   优点:

select a.duiwu ,a.胜,b.负 from (select count(*) 胜, duiwu from tabb where shengfu='胜' group by duiwu ) a left join (select count(*) 负, duiwu from tabb where shengfu='负' group by duiwu ) b on a.duiwu=b.duiwu --sql2000调试通过,可以自己用case when改写一下

    语法:create view view_name

--sum后加括号,里面放case when

             as select 语句

select duiwu ,
sum(case when shengfu = '胜' then 1 else 0 end) win,
sum(case when shengfu = '负' then 1 else 0 end) lost
from 表
group by duiwu ;

九、索引

假如你用的是ACCESS数据库,可以用来下查询语句:
select duiwu,sum(iif(shengfu="胜",1,0)) as 胜,sum(iif(shengfu="负",1,0)) as 负 from 表名 group by duiwu 

     优点:进步对数据库操作的性质 建在时时利用的,小字段的地点

)

      语法:create index index_name

澳门新萄京官方网站 1

             on 表(列1,列2)

表名:CallRecords
字段名:id,caller_id,telNum,starttime,endtime

十、存款和储蓄进程

1.select top 5 *
from CallRecords
order by datediff(second,starttime,endtime) desc

    优点:能够选用代码 客户端只要发送非常少的参数跟存款和储蓄进度名就足以 减弱网络流量 安全性高

2.select sum(datediff(second,starttime,endtime))

    语法:create proc 存款和储蓄进程名

from CallRecords
where telNum like '0%'

           @aa  类型,           输入参数

3.select top 3 caller_id

           @bb  类型 output      输出参数

from CallRecords
where datediff(month,starttime,getdate())=0  --或datepart(month,starttime)=datepart(month,getdate()) 应该也得以
group by caller_id
order by sum(datediff(second,starttime,endtime)) desc

          as sql语句

4.select caller_id as 呼叫员编号,telNum as 对方号码,datediff(second,starttime,endtime) as 通话时长
from CallRecords
union all
select '汇总',
sum(case when telNum like '0%' then 0 else datediff(second,starttime,endtime) end) as 市内号码总时长
sum(case when telNum like '0%' then datediff(second,starttime,endtime) else 0 end) as 市内号码总时长
from  CallRecords

             return 数值

索引

    调用:exec 过程名 参数[output]

创立索引的法子,在表设计器中式点心击右键,选用“索引/键”-》增多-》在列中精选索引富含的列

十一、事务

利用索引能加强查询效用,但是索引也是侵夺空间的,并且丰裕、更新、删除数据的时候也急需共同更新索引,由此会下滑insert、update、delete的快慢。只在时时检索的字段上(一般为where)创设索引。

    特点:

固然成立了目录,仍旧有希望全表扫描,举个例子like、函数、类型转换等

    多少个特色:原子性   独立性 一致性  长久性

    begin transaction 创设二个显得事务

commit transaction :标志二个山民或出示事务

本文由澳门新萄京官方网站发布于数据库网络,转载请注明出处:澳门新萄京官方网站:sql基础知识,server中部分

关键词: