自己学sqlserver以来的知识点总结

sqlserver知识点总结(无序)

SELECT * FROM student WHERE NAME LIKE  '%t%'  数据库模糊查询                                                                      (sqlserver 已实现 ,mysql已实现)

SELECT * FROM STUDENT ORDER BY AGE DESC; 年龄降序排序   ORDER BY 升序  ASC 和ORDER BY 一样都是升序    (sqlserver 已实现 ,mysql已实现)      
DESC 用于order中不能用于groupby -----------MCP------------

SELECT age, rank() over( ORDER BY age)rank FROM students     rank高级排序 将student分一样的同学排在一个名次 (sqlserver 已实现 ,mysql未实现)

SQL模糊查询,使用like比较关键字,加上SQL里的通配符,请参考以下: 
1、LIKE'Mc%' 将搜索以字母 Mc 开头的所有字符串(如 McBadden)。 
2、LIKE'%inger' 将搜索以字母 inger 结尾的所有字符串(如 Ringer、Stringer)。 
3、LIKE'%en%' 将搜索在任何位置包含字母 en 的所有字符串(如 Bennet、Green、McBadden)。 
4、LIKE'_heryl' 将搜索以字母 heryl 结尾的所有六个字母的名称(如 Cheryl、Sheryl)。 
5、LIKE'[CK]ars[eo]n' 将搜索下列字符串:Carsen、Karsen、Carson 和 Karson(如 Carson)。 
6、LIKE'[M-Z]inger' 将搜索以字符串 inger 结尾、以从 M 到 Z 的任何单个字母开头的所有名称(如 Ringer)。 
7、LIKE'M[^c]%' 将搜索以字母 M 开头,并且第二个字母不是 c 的所有名称(如MacFeather)。 

理论:

SELECT 字段 FROM 表 WHERE 某字段 Like 条件                       --数据库模糊查询    

UPDATE computers  SET STATUS='空闲' WHERE NAME='雷神6'          --修改

 SELECT num,COUNT(*) AS counts FROM test_a GROUP BY num;        --分组查询
 
SELECT DISTINCT 列名(1),列名(2)...... FROM `表名`                        --过滤查询

SELECT TOP(10) * FROM 表名                                         --查询表中前十条语句

 例子  SELECT id,cardno, 状态=CASE STATUS WHEN '是' THEN '已上机' WHEN '否' THEN '已下机' FROM `consumelogs`             SQLSERVICE   CASE WHEN     CANUSE字段  取值是/否  

SELECT * FROM consumelogs WHERE readroomid IN(1,2,3)                                                                     in 查询包含在列里面的数据点

select 列名(1) 列名(2)...... into 新表 from 原表名                                                                  查询结果集创建新表

SELECT * FROM STUDENT ORDER BY AGE DESC;                                                                                年龄降序排序 


我们通过一个小故事来让大家记住上边提到的所有连接,一大群人到教堂去祷告,男人坐到左边,女人坐到右边,现在神父说:

请你们中的夫妻关系的人手牵手到教堂外边。(内连接)
请男人牵着自己的妻子,如果妻子没在,就牵着空气到教堂外边。(左连接)
请女人牵着自己的丈夫,如果丈夫没在,就牵着空气到教堂外边。(右连接)
请男人和女人都到教堂外边,是夫妻的手牵手,否则牵着空气。(完全连接)


内连接 Inner Join          内连接使用用inner join(其中inner 可以省略),来指明左表和右表,使用on关键字来指明匹配条件

外连接 Outer Join           会返回from子句中至少一个表中的所有行,另一个没有匹配上的列的值将保持空值。

左外连接 left outer join     左外连接会保证查出左表中的所有数据,右表中无法匹配的项将自动补为NULL。

右外连接right outer join     右外连接会保证查出右表中的所有数据,左表中无法匹配的项将自动补为NULL。

完全连接 full outer join       完全连接会返回左右两表中所有数据,右表无法匹配的项自动补NULL,左表无法匹配的项也自动补NULL,这里不再举例。

交叉连接 cross Join             假如左表中有5条记录,右表中有8条记录,则交叉连接的结果将会有40条记录,也就是说以左表为基础,拿出一条记录和和右表中的8条记录进行连接

自连接                          自连接是指连接的双方都是同一个表,比较抽象,但是在运用时,大家要学着将其看成是两张表,这两张表可以进行上边提到的各种连接(内、外、交叉)。

结果集运算    union all          union可以使两个记录集并在一起,默认会把重复的(完全相同的)记录去掉当使用all关键字时,表示不去掉重复的记录。
SELECT[UserId],[RealName],[Birthday],[Postcode],[Country]
FROM [dbo].[Customers] 
union all
SELECT[UserId],[RealName],[Birthday],[Postcode],[Country]
FROM dbo.KHXX
GO


交集intersect    只取两个结果集中相同的数据项

差集 except      A结果集 except B结果集 = A结果集-(A结果集 intersect B结果集)。

is null 用来判定是否为空而isnull(表达式,替换值) 函数 则根据表达式的取值,来决定返回值,当表达式不空时返回表达式的值,否则返回一个替换值,

--------------------------------------------------------------子查询 tsql编程和函数----------------------------------------------------------------
变量=====================================================
自定义变量,使用declare关键字。例如:
declare @i int
declare @x varchar(1000)
declare @t datetime

系统变量(最常用的三个如下):
@@identity表示刚刚进行添加操作时产生的自增值。
@@error表示刚刚的语句引发的错误值,如果为0表示没有错误。
@@rowcount表示刚刚的语句成功执行(增删改查)的数据条数。

而自定义变量我们可以进行读写操作
declare @i int
declare @x varchar(1000)
--通过set关键字赋值
set @i=10
print @i
--通过查询赋值
select @x=[Name]
from dbo.Positions
where Id=3
print @x

子查询-------------------------------------------------
mysql子查询没成功

函数   group by分组,count个数,sum总计,avg平均,max最大,min最小 ,having对分组的数据进行过滤 因而同样是分组过滤,如果能够使用where搞定,就不要动用having,

select b.Id,b.Name,COUNT(*) as Num
from Product a inner join ProductCategory b on a.CategoryId=b.Id
where b.Name like '%裤%'
group by  b.Id,b.Name
having COUNT(*)>2                     这个任务才是having真正要使用的场景。having子句限制的是组,而不是行。where子句中不能使用聚集函数,而having子句中可以。


相关子查询----------------------------------------
select a.列1,a.列2,(子查询(a.列1)) as 新列1 ,(子查询(a.列1,a.列2……)) as 新列 
from tabA a
where (子查询(a.列1)) = 值,……


日期函数----------------------------------------------



函数名
示例
函数功能
GetDate    GetDate()                                 返回系统当前时间       返回系统当前时间

DateAdd     DateAdd(MM,2,’2011-5-7’)                 结果返回’2011-7-7’    向日期指定部分添加数字,其中:YY表示是年,MM表示月,DD表是日           -------MCP-------

SELECT DATEADD(DAY ,-8,GETDATE())
--参数datepart为计量单位
--(可取值year、quarter季度、month、day、week、hour、minute、second等)  这里指的是天-8据当前时间                                   -------MCP-------

FORMAT(value, format)函数用于对字段的显示进行格式化。                                  
例如:FORMAT(GETDATE(),'yyyyMM01')                                              -------MCP-------

CONVERT() ( data_type, expression, style)        expression是要转换的对象,data_type是要转换的数据类型, style?规定日期/时间的输出格式(可选)。
                 -------MCP-------


DATETIMEOFFSET,存储时间日期类型其中加入了时间偏移部分                                                                                                                   -------MCP-------
 
DateDiff   DATEDIFF(DD,'2010-4-6','2011-8-7')        结果返回为488      获取两个日期之间的间隔,其中:YY表示是年,MM表示月,DD表示是日
DateName    DateName(DW,’2011-10-01’)                结果返回为‘星期六’    以字符串形式返回某个日期指定的部分。   实际上日期和时间,是由一组数字组合在一起构成的,因而我们可以获取它的某一部分的数字值。
DatePart    DATEPART(DW,'2011-08-07')结果返回为’1’   以整数的形式返回某个日期的指定部分。’DW’代表的星期几,注意西方人习惯把周日作为每周的第一天
Year、Month、Day、Hour、Minute、Second	year('2013-1-21') 结果为 2013	获取日期的某一部分值。
sysdatetime	sysdatetime()                            获取系统时间,与getdate相比拥有更高的精度。





获取年龄在20与30岁之间的客户信息         select * from 表 where 生日 between DateAdd(year,-30,getdate())and DateAdd(year,-20,getdate())

存储过程-------------------------------------------------------

create proc[edure] 过程名称
@参数名称 参数类型, --输入参数
……
@参数名称 参数类型 output --输出参数
as
执行语句
go

not in 和<>all相同                         -------MCP-------
在视图中创建触发器只能用     INSTEAD OF                 -------MCP-------

WITH SCHEMABINDING 创建视图时可加   表示  对表起到一个保护作用 当视图改变影响到表时失败                               -------MCP-------

触发器  if update 用来判定对单个字段或某一列的修改    如果判断多列  加or


PARTITION BY:           partition by 与group by不同之处在于前者返回的是分组里的每一条数据,并且可以对分组数据进行排序操作。后者只能返回聚合之后的组的数据统计值的记录。                      -------MCP-------

 SET STATISTICS XML: 为 ON 时, SQL Server 将在执行每条语句后返回该语句的执行信息。 该选项设置为 ON 后,将返回有关所有后续 Transact-SQL 语句的信息,直到该选项设置为 OFF 为止。
 请注意,SET STATISTICS XML 不必是批处理中的唯一语句                             -------MCP-------



COLLATE 指定SQL SERVER 的排序规则                  分为两部分     前半部分是指排序规则所支持的字符集一般是国家
后半部分即后缀 含义:
_bin 二进制排序
_CI(CS)是否区分大小写,ci为不区分.Cs区分
_AI(AS)是否区分重音,AI不区分,AS区分
_KI(KS)是否区分假名类型,KL不区分,KS区分
_WI(WS)是否区分宽度,WI不区分,WS区分
COLLATE可以针对整个数据库更改排序规则,也可以单独修改某一个表或则某一个字段的排序规则,指定排序规则很有用,
比如用户管理表,需要验证输入的用户名和密码的正确性,一般是区分大小写的。
-------MCP-------



创建表值函数关键字FUNCTION :                                                                                      -------MCP-------

CAST:我们知道sqlserver是提供两种类型转换的内置函数。一个Cast(),另一个是Convert()。     -------MCP-------

BEGIN TRY异常处理机制:将感觉写错的代码写入begin try以及end try中当程序出错时跳出异常处理机制。       
如果出错程序就跳到紧接着的begin try...end try 的beign catch...end catch中,执行beign catch...end catch错误处理SQL。try..catch 是可以嵌套的。
在begin catch ...end catch中我们可以利用系统提供的下面四个函数得到出错信息:
error_number 返回错误代码
error_serverity 返回错误的严重级别
error_state 返回错误状态代码
error_message 返回完整的错误信息                                                                                    -------MCP-------

EXEC用法:两个 执行一个存储过程以及执行一个动态批次:                                                   -------MCP-------


CLUSTERED?:聚集索引。非聚集索引:NONCLUSTERED。                                                 -------MCP-------

REFERENCES指定外来键                                                                                                    -------MCP-------

UNION ALL不得保留重复项                                                                                                -------MCP-------

LIKE 运算符
A%  代表头字母为a的所有字符串
%NBA%  代表含有“NBA”的所有字符串
%nm  代表最后两个字母为NM的所有字符串
A%Z  代表头字母为A最后一个字母为Z的所有字符串
%1983% 代表含有1983的字符串或则日期时间数据类型                                                           -------MCP-------

RTRIM函数用于将字符串右侧的空格去掉                    RTRIM()                                                            -------MCP-------

在SQL Server2012,可以使用Offset ...Rows Fetch Next ... Rows only的方式去实现分页数据查询               
  SELECT * FROM [dbo].[Employees]
  ORDER BY EMPID OFFSET 1 ROWS
  FETCH NEXT 10 ROWS ONLY           
--代码说明      order by 根据EMPID排序   offset从第几个开始  不包括当前的行数        fetch next 10 rows only 查询几个 这里是10个
  -------MCP-------
  
  column    列    字段的意思,修表的数据类型                                                                   -------MCP-------
  
CUBE 会对所有的分组字段进行统计,如上例,先对日期求小计,也就是统计每天的产品总金额,然后统计每个产品的总金额,最后给出总的合计。

ROLLUP 按照分组顺序,先对第一个字段operatedate分组,在组内进行统计,最后给出合计。

区别就是:?ROLLUP 不会去统计group by 后面的第一个字段的小计                                                    ----MCP------

之后会陆续更新新学的

宁愿在风雨中陨落,也不要在安逸中虚度人生。

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值