【网学网提醒】:本文主要为网学会员提供T-SQL常用语法,希望对需要T-SQL常用语法网友有所帮助,学习一下!
--为了保证数据的完整性要从以下几个方面实施:--1,实体完整性来保证每一行都分别描述不同的实体(靠主键,标识列,索引,唯一约束实现)--2.域完整性保证每一列的数据都不能相同(靠外键,数据类型,默认值,检查约束,输入格式等来实现)--3,引用完整性保证表与表之间的关系(通过外键)--4,自定义完整性
--SQL中的条件表达式--1,比较运算符=,>,<,>=,<=,<>,!--2.通配符('_',%,[],[^])通常与like关键字使用进行模糊查询--3,逻辑表达式notandor(and当两个条件都为真时返回真;or当两个条件有一个为真时返回真;)--逻辑运算符的运算顺序:先not然后and最后or(关键字in用来限定范围)
--语法:insertinto表名(列名)values(值,值)
--一次插入多行数据insertinto新表(新列)select就表中的列名from旧表--新表必须预先创建好要插入的数据类型必须和新表中的列的顺序,数据类型一一对应--通过selectinto语句一次插入多行select旧表中的列名into新表from旧表--新表不能预先创建好在查询的同时创建新表--为新表创建表示列selectIdentity(数据类型,表示种子,标识增量)as列名,旧表列名into新表from旧表--在现有的表中通过union关键字合并数据进行插入insertselectselectselectinto表名值.,值,.值,union值,值,值,union值,值,值,
--T-SQL更新数据
update表名set列名=值where条件--删除deletefrom表名where条件truncatetable表名(不能删除带外键关系的表)
--数据查询select列名from表名where条件--查询所有select*from表名--查询部分select列名from表名where条件orderby排序的列名asc(升序)或desc(降序)默认为升序--在查询中使用列名select列名as结果集列名from表名where条件--使用计算合并在结果集中得到新列名select列名+列名as新列名from表名--查询空列select列名from表名where列名isnull(isnotnull)--返回限制的行数关键字topselecttop5*(也可以写列名)from表名where条件--按一定的百分比提取关键字percent(返回数据集中的百分比的记录)selecttop5percent*from表名where条件
--在查询中使用函数--字符串函数下标从开始charindex查询一个指定的字符串在另一个字符串中的起始位置(返回的是下标,计算空格的下标)例子:selectcharindex('ni','dj
nidkfni',7)(1表示从第几个字符开始查找)
len查询字符串的长度selectlen('dfdsjskdhjfdjf')
upper大写selectupper('kdshfdjltrim清除左边的空格selectltrim('rtrim清除右边的空格selectrtrim('电话费的')你好')聊懊悔')(空格保留)
right从字符串右边返回指定长度的字符串selectright('时候电话经济',5)left从字符串左边返回指定长度的字符串selectleft('时候
电话经济',5)replace替换字符串中的字符selectreplace('说的话年度计划','的','你好')(如果要替换的字符或字符串在源字符串中找不到,则不执行替换行为)stuff删除指定长度的字符串并在该位置插入新的字符串selectstuff('的社会化的就分开了的时',7,3,'sdfdk')(7代表位置,3代表长度)--日期函数getdate取得当前的系统日期selectgetdate()dateadd将指定的数值添加到指定日期部分后的日期selectdateadd(yy,5,'2001-06-238:00:59')datediff返回两个日期间的区别selectdatediff(mm,'2008-01-20',getdate())(返回相差的个数)datename返回日期部分的字符串selectdatename(week,getdate())
datepart返回指定日期部分的整数形式selectdatepart(dw,getdate())selectdatepart(year,getdate())--数学函数abs绝对值selectabs(-23)ceiling取大于或等于指定数值,表达式的最小整数selectceiling(0.1+212.34)(有小数就向后进一位)floor取小于或等于指定数值或表达式的最大整数selectfloor(21.999999)(返回)power取数值表达式的幂值selectpower(5,3)(5代表数值或表达式的值,3代表几次方)round将数值表达式四舍五入为指定的精度selectround(3.141592653+3*2,1)(1代表精确到小数点后的第几位)sign对整数返回+1负数返回-1selectsign(-23)sqrt去浮点表达式的平方根(即开方)selectsqrt(25)(为开方)--系统函数convert用来转变数据类型selectconvert(varchar(8),'煽风点火')selectconvert(int,'煽风点火')(此数值不能转换)
current_user返回当前用户名selectcurrent_userdatalength返回用于指定表达式的字节数selectdatalength('是大家活动经费sd'+'多看看')
selectlen('是大家活动经费sdf'+'你好')(返回表达式的长度)host_name返回当前登录的计算机的名字selecthost_name()System_user返回当前多登录的用户的名字selectSystem_useruser_name从给定的用户ID返回用户名selectuser_name(5)--经典函数查询语句--查询-13的左边和右边部分并排序selectconvert(int,left('13-13',charindex('-','13-13')-1))from表名orderbyconvert(int,left('13-13',charindex('-','13-13')-1)),convert(int,right('13-13',len('13-13')-charindex('-','13-13')))
--字符串的长度减去-的索引值就是-号右边要提取的字符的长度selectright('13-11212',len('13-11212')-charindex('-','13-11212'))selectcharindex('-','13-13')--修改上个月的周六和周日消费为半价update表名set列名=5/2where(datepart(dw,bengintime)=7ordatepart(dw,bengintime)=6)anddatediff(mm,bengintime,getdate())=1--显示本月上机时间最长的名用户select列名from表名wheredatediff(mm,bengintime,getdate())=0orderbyendtime-bengintimedesc--产生随机数(利用当前日期的毫秒为种子)selectright(rand(datepart(ms,getdate())*1000),4)
--模糊查询--like运算符仅与char或varchar数据类
型联合使用---使用between关键字在某个范围内查询(不在某个范围用notbetween关键字)select*from表名where字段名betweenaandb--使用in关键字在列举值内查询select*from表名where字段in(值,值,值)(在三个值中间查询)(在a-b之间查找包含a和b)
--聚合函数--求和SUM只能用于数值类型的列selectsum(列名)fromdbo.Table_1(不包括空值)--求平均数avg只能用于数值类型的列selectavg(列名)from表名(总和除以非空的行数)--例子selectavg(d)fromTable_1--求最大最小值maxmin能用于数值类型日期/时间字符型selectminor--计数countselectcount(*)from表名(包括空行)selectcount(列名)from表名(非空行的行数)--分组查询groupby子句select列名,聚合函数表达式from表名groupby列名(列名中有重复的项)--分组筛选having子句select聚合函数表达式,列名from表名where条件groupby列名(聚合函数表达式)having条件(条件为筛选后的条件)--先where后groupby最后having--多表联接查询--内联...innerjoin...on..(常用的条件表达式(比较运算符)=,>,<.>=,<=,<>)返回两个表中符合条件的行数不符合条件的直接忽略--语法:(内联中不分主表子表)select字段名from表innerjoin表on条件innerjoin表on条件...select字段名from表,表where条件max(列名)from表名
--左外联leftouterjoin(以主表的每行数据去匹配从表中的数据,符合条件的直接返回到结果集中,不符合条件的被赋上Null值后返回到结果集中)select*from表leftouterjoin表on...(表为主表)--右外联rightouterjoin(以主表的每行数据去匹配从表中的数据,符合条件的直接返回到结
果集中,不符合条件的被赋上Null值后返回到结果集中)select*from表rightouterjoin表on...(表为主表)--完整外连接fullouterjoin()(返回左表和右表中的所有行)select*from表fullouterjoin表on...select[name]from表名innerjoin表名on条件anddatediff(hh,bengintime,getdate())<=24--本周datediff(dd,bengintime,getdate())<=7--查询卡号第位和第位是'AB'的会员显示和费用汇总selectusername,sum(fee)from表innerjoin表on表.id=表.idgroupbyusernamehavinguaernamelike'_____AB%'select'a'+null返回null