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------
之后会陆续更新新学的
宁愿在风雨中陨落,也不要在安逸中虚度人生。