SQL操作(创建、检索、更新、条件、分组、排序、空值、distinct、union...

SQL操作(创建、检索、更新、条件、分组、排序、空值、distinct、union...

2023年6月27日发(作者:)

SQL操作(创建、检索、更新、条件、分组、排序、空值、distinct、union、cas。。。⼀、概述■SQL语句是和DBMS“交谈”的专⽤语句,不同DBMS都认SQL语法。SQL语句中字符串⽤单引号■SQL语句是⼤⼩写不敏感的,特指关键字,不包括字符串的值SQL主要分DDL(数据定义语⾔)和DML(数据操作语⾔)两类。CREATE Table、DROP Table、ALTER Table等属于DDL,SELECT、INSERT、UPDATE、DELETE等属于DML⼆、创建、删除表,插⼊数据■create table question (q_Id int not null, q_Stem varchar(500))【列名1 属性,列名2 属性】■drop table question■insert into question(q_Id,q_Stem) values(2,'测试试题')★SQLServer中两种常⽤的主键数据类型:int(或bigint)+标识列(⼜称⾃动增长字段);uniueidentifier(⼜称Guid、UUID)★⽤标识列是想字段⾃增可以避免并发等问题,不要开发⼈员控制⾃增。⽤标识列的字段在insert的时候不⽤指定主键的值。将字段的“是标识列”设置为“是”三、Guid算法★Guid算法是⼀种可以产⽣位移标识列的⾼效算法,它使⽤⽹卡MAC、地址、纳秒级时间、芯⽚ID码等算出来的,这样保证每次⽣产的GUID永远不会重复,⽆论是同⼀个计算机还是不同的计算机。★SQLServer中⽣产GUID的函数newid(),.NET中⽣产的Guid的⽅法:d(),返回是Guid类型。★Int⾃增字段的优点:占⽤空间⼩,⽆需开发⼈员⼲预、易读;缺点:效率低;数据导⼊导出的时候很痛苦★Guid的优点:效率⾼、数据导⼊导出⽅便:缺点:占⽤空间⼤、不易读业界主流倾向于使⽤Guid四、表更新(插⼊、更新)★insert into 数据库名.dbo.表名(列名1,列名2,列名3) values(NEWID(),’内容1’,’内容2’)★update Person set NickName★更新⼀个列:UPDATET_Person set Age=30★更新多个列:updateT_Person Set Age=30,Name=’Tom’★更新⼀部分数据:UpdateT_Person Set Age=30 where Name=’Tom’,⽤where语句表⽰只更新Name 是’Tom’的⾏,★注意SQL中等于判断⽤单个‘=’,⽽不是‘==’。Where 中还可以使⽤辅助的逻辑判断Update T_person Set Age=30 Where Name=’Tom’or Age<25,or相当于C#中的||(或)★where中可以使⽤的其他逻辑运算符:or、and、not、<、>、>=、<=、!=(或<>)★update Person set NIckName=N’青年⼈’where age>=20 and age<=30,(注意数据库中设计中⽂字符时⼀般在前⾯加N,否则可能出现错误)同时也可以在SQL查询语句中可以选中部分进⾏执⾏。五、数据删除★删除表中全部数据:Delete from T_PersonDelete只是删除数据,但表还在,⽐较删除表的Drop Table不同★Delete也可以带where ⼦句来删除⼀部分数据:delete fromT_Person where age>20;六、数据检索★简单的数据检索:Select * from Table★只检索需要的列:Select列名 from table 、★列别名:Select 列名1 as 别名1,列名2 as 别名2,列名3 as 别名3 from table★使⽤where 检索符合条件的数据:select 列名1 from table where 列名>条件。★还可以检索不与任何表⽰关联的数据:select 1+1;selectnewid();select getdate();select@@version七、数据汇总★SQL聚合函数:max(最⼤值)、min(最⼩值)、avg(平均值)、sum(和)、count(数量)★⼤于25岁的员⼯最⾼⼯资:select max(列名⼯资)from table【员⼯表】 where 列名⼯资>25★最低⼯资和最⾼⼯资:Select MIN(列名⼯资),max(列名⼯资) from table【员⼯表】⼋、数据排序★Order By ⼦句位于select 语句的末尾,它允许指定按照⼀个列或者多个列进⾏排序,还可以指定排序⽅式是升序(从⼩到⼤排列,ASC)或者降序(从⼤到⼩排列,DESC)。默认为升序★按照年龄升序排序所有员⼯信息的列表:Select * from 表名 order by 列名 ASC★对两列进⾏排序:select* from 表名 order by 列名1 DESC,列名2 ASC。排序条件⽤逗号隔开,从左到右的顺序判断优先级★Order by ⼦句要放到where⼦句之后:select * from 表名 where 列名>条件order by 列名1 DESC ,列名2 ASC 九、通配符过滤使⽤LIKE★单个字符匹配的通配符为半⾓下划线“_”,它匹配单个出现的字符。★以任意字符开头,剩余部分为“erry”:Select * from 表名 where 列名’_erry’★多字符匹配的通配符为半⾓百分号“%”,它匹配任意次数(零或多个)出现的任意字符。“K%”匹配以“K”开头、任意长度的字符串。检索姓名中包含字母“n”的员⼯信息:select * from 表名 where 列名 like ‘%n’⼗、空值处理★数据库中,⼀个列如果没有指定值,那么值就为null,这个null和C#中的null有区别,数据库中的null表⽰“不知道”,⽽不是表⽰没有。因此select null+1结果是null,因为“不知道”加1的结果还是“不知道”★Select * from 表名 where 列名=null;Select * from 表名 where 列名!=null;都没有任何返回结果,因为数据库也“不知道”★SQL 中使⽤is null、is not null 来进⾏空值判读:select * from 表名 where 列名is null ;select * from 表名 where 列名is notnull;⼗⼀、数据分组★按照年龄进⾏分组统计各个年龄段的⼈数:select 列名,count(*) from表名 Group by 列名★Group by⼦句必须放到where语句之后,没有出现在group by ⼦句中的列是不能放到select语句后的列名列表中的(聚合函数除外)错误:select 列名1,列名2 from 表名 group by 列名1正确:select 列名1,avg(列名2) from 表名Group by 列名1⼗⼆、Having语句★在where 中不能使⽤聚合函数,必须使⽤Having ,Having要位于group by之后,★Select 列名1,count(*)as ⼈数 from 表名Group by 列名1 Having count(*)>1★注意having 中不能使⽤未参数分组的列,having 不能替代where ,作⽤不⼀样,having 是对组进⾏过滤⼗三、限制结果集的⾏数★Select top 5 * from 表名order by 列名1 desc(*)★检索按照⼯资从⾼到低排序检索从第六名开始⼀共三个⼈的信息:select top 3* From 表名 where 列名1not in(slect top 5 列名2 from 表名 order by 列名3 desc)Order by 列名3 descSQLServer2005后增加了Row_Number 函数简化实现,⼗四、去掉数据重复★Select 列名 from 表名★Select distinct 列名 from 表名Distinct是对整个结果集进⾏数据重复处理的,⽽不是针对每⼀个列,因此下⾯的语句并不会只保留查询列进⾏重复值处理:selectdistinct列名1、列名2 from 表名★后添加列:Altertable 表名 add 列名 varchar(29)

⼗五、联合结果集★简单的结果集联合:select 列名1,列名2,列名3 from 表名1 Union select 列名4 ,列名2,列名3,from 表名2★基本的原则:每个结果集必须有相同的列数;每个结果集的列必须类型相容Select 列名1,列名2,列名3,列名4 From 表名1 union select 列名5,列名2,列名3 ,’临时⼯,⽆部门‘ from 表名2★Union 对两个表中重复项进⾏⾃动删除,利⽤union all 可以保存所有的数据 Select 列名1 from 表名1 union select 列名1,列名2 from 表名2。★Union 合并两个查询结果集,并且将其中完全重复的数据合并为⼀条Select 列名1,列名2 from 表名1 union all select 列名1,列名2 from 表名2 union因为要进⾏重复值扫描,所以效率低,因此结果不是确定要合并重复⾏,那么就⽤union all⼗六、数据函数★ABS():求绝对值。★Ceiling:舍⼊到最⼤整数。3.33将被舍⼊为4。2.89 将被舍⼊为3。-3.54将被舍⼊为-3★Floor();舍⼊到最⼩整数,与ceiling相反★Round():四舍五⼊。舍⼊到“离我半径最近的数”。例如:★round——>。Round(3.1435,2)——执⾏结果为3.1400,其中2是⼩数的精确位数位数,⼗七、字符串函数:★Len():计算字符串长度★Lower()、upper():转⼩写、⼤写★Ltrim():字符串做出的空格去掉★★Rtrim():字符串右侧的空格去掉Ltrim(Rtrim(‘ bb ’))★Substring(string,start_position,length):参数string为主字符串,start_position为字符串在住字符串的起始位置,length为字符串的最⼤长度。Select substring(’abcdef111’,2,3)⼗⼋、⽇期函数★GETDATE():取得当前⽇期时间★dateADD(⽇期格式(年⽉⽇等),数字,date)计算增加以后的⽇期。参数date为待计算的⽇期:参数date为增量;参数datepart为计量单位,可选值见备注。★DateADD(DAY,2,date)为计算⽇期date的3天后的⽇期,★dateADD(month,-8,date)为计算⽇期date的8个⽉前的⽇期★datediff(⽇期格式,startdate,enddate):计算两个⽇期之间的差额。Datepart为计量单位,可取值参考dateAdddatepart(datepart,date):返回⼀个⽇期的特定部分datepart(datepart)★datepart可选值:取值yearquartermonthdayofyeardayweekweekdayminutesecondmillisecond别名yy,yyyyqq,qmm,mdy,ydd,dwk,wwdw,wmi,nss,sms说明年份季度⽉份当年度的第⼏天⽇当年度的第⼏周星期⼏分秒毫秒 ⼗九、类型转换函数:★Cast(exprssion AS data_type)★Convert (data_type,expression)★Select fidnumberRight(fidnumber,3)as 后三位★Cast(right(fidnumber,3) as integer )as 后三位的整数形式★Cast(right(fidnumber,3) as integer)+1 后三位加1★Convert(integer,right(fidnumber,3))/2 as 后三位除以2From 表名★ISNULL(expression,value):如果expression不为空则返回expression,否则返回value。Select ISNULL(列名,’佚名’)as 姓名 from 表名⼆⼗、Case函数的⽤法★单值判断,相当于switch caseCASE expressionWhen value 条件1 then return value1When value 条件2 then return value2When value 条件2 then return value3Else default return valueEnd

发布者:admin,转转请注明出处:http://www.yc00.com/web/1687817153a47708.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信