数据库常见语句.docx
- 文档编号:10263177
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:49
- 大小:31.04KB
数据库常见语句.docx
《数据库常见语句.docx》由会员分享,可在线阅读,更多相关《数据库常见语句.docx(49页珍藏版)》请在冰豆网上搜索。
数据库常见语句
数据库常见语句
--新建数据库语句
createDATABASE数据库名
--新建具体的数据库
createdatabase数据库名
on
(name=数据文件名_dat,
filename='存放路径',
size=10)--size指的是数据文件初始大小
logon
(name=日志文件名_log,
filename='存放路径',
size=1MB--size指的是日志文件初始大小
maxsize=20MB)日志文件最大为20MB
--选择数据库
use数据库名
--新建表
createtable表名
(
列名类型,
studentidintnotnull,
[no]intidentity(1,1),--标识列
[name]varchar(20),
pwdvarchar(20),
Emailnvarchar(50)
)
--删除列
altertable表名
dropcolumn列名
--插入列
altertable表名
add列名类型
插入多列
ALTERTABLEstudent
ADDsdfaVARCHAR(20),workvarchar(10)
在指定列后插入一列(该语句目前有问题)
ALTERTABLEstudent
ADDsdfaVARCHAR(20)aftersex
删除多列
altertablestudent
dropcolumnsdfa,work
--插入一行
insertinto表名(列名1,列名2,列名3,列名4)values(赋值1,赋值2,赋值3,赋值4)
/*注:
into可以省略,如果列名为关键字则用[列名],
如果该列为标识列则不能插入,直接跳过
如果该列类型不是int型,则要单引号'赋值'
如果某列具有默认值时,插入该列则用default
如:
insertinto表名(sex,studentid,[name],pwd,Email)values(default,168,'陈林','axjl','csdn@168')
*/
--例如:
insertinto表名(studentid,[name],pwd,Email)values(168,'陈林','axjl','csdn@168')
--插入多行
1.把A表中的部分列数据插入到B表中
insertintoB(B.col1,B.col2,B.col3,……)
selectA.col1,A.col2,A.col3……
fromA
2.把A表中的数据插入到New_Table中
--此New_Table表是执行查询语句时新建的,不能预先存在
selectA.col1,A.col2,……
intoNew_Table
fromA
注:
如果要插入标识列的话,就这样写
selectidentity(1,1)as列名,A.col……
into新表
formA
3.通过Union合并数据插入到A表中
insertA(列名1,列名2,列名3)
select'','',''Union
select'','',''Union
select'','',''
--插入多列
insertstudent(studentid,[name],sex,pwd,email)
select1001,'陈林','男','axjl','axjl@168'union
select1002,'马力','女','dsa','ml@139'union
select1003,'沪指','男','csdn','hz@168'union
select1001,'陈浩南','男','kdn','chn@168'union
select1001,'山脊','男','dsfg','sj@168'union
select1001,'胡话','女','sdgas','hh@168'union
select1001,'姜维','男','tdhe','jw@168'union
select1001,'卡哇伊','女','fgh','kwy@168'
千万要注意:
default只能和有values的语句搭配
--下面的一个插入语句错误
insertstudent(studentid,[name],sex,pwd,email)
select1001,'asdgdf',default,'axjl','axjl@168'
--此语句没问题
insertintostudent(studentid,[name],sex,pwd,email)
values(1002,'马超',default,'dfklgjs','dfg@WSDJ')
SELECT*
fromstudent
where[name]='sdf'
select*
fromstudent
wherestudentid=168
--更新数据库
update表名
set列名1=更新值,列名2=更新值……
where条件1and条件2,……
--把性别为男的全部改为默认值
updatestudent
setsex=default
wheresex='男'
updatestudent
set[name]='多啦A梦',sex='我是可爱多'
where[name]='陈琳'and[no]=1
--把A表的样式类型复制到B表中
--不要内容
select*
intoB
fromstudent
where1<>1
--删除数据
delete只会删除整行,不会删除某个字段
所以delete后面不能有“列名”
如果有有主外键关系的话,先删外键再删主键
deletefrom表名
where列名=‘删除条件’
truncatetable表名
--注:
truncate删除的是所有的行truncate不能用于有外键关系的表
--truncate比delete速度快
--truncate删除后再插入时标识列从0开始
--delete删除后再插入时标识列继续累加
--使用select查询语句
select列名
from表名
where条件
orderby排序的列名ascordesc
--asc升序desc降序
默认为asc
1.查询全部
select*
from表名
2.查询部分行列
select列名1,列名2,列名3...
from表名
where条件
3.在查询中使用列名查询不是“男”的学员
selectcol1as编号,col2as姓名...
from表名
wheresex<>'男'
4.查询的列合并为一列
select列名1+'.'+列名2as姓名or'姓名'=列名1+'.'+列名2
from表名
where条件
5.查询null或者notnull或者''
select列名1,列名2,列名3...
from表名
whereemailisnulloremailisnotnulloremail=''
--注意:
null不等于''
select*
fromB
whereemailisnotnull
6.在查询中使用常量列
select姓名=[name],性别=sex,'湖北黄冈'as地址
fromB
wheresex='女'
7.查询成绩前三名
selecttop3列名
from表名
orderbyscoredesc
8.按百分比%查询20%的女生的爱好
selecttop20percent[name],liked
from表名
wheresex=0
9.查询分数降低10%后加5分还及格的人的信息按由高到低排序
selectcol1as编号,(score*0.9+5)as综合成绩
from表名
where(score*0.9+5)>60
orderbyscoredesc
10.查询A表和B表,并把每张表的列合并,然后连接两张表再按降序排序
selectA.col1+'.'+A.col2asnew_NamefromAunion
selectB.col1+'.'+B.col2asnew_NamefromB
orderbynew_Namedesc
11。
按多个条件排序进行查询
selectcol1as编号,col2as姓名...
from表名
where查询条件
orderby列名1,列名2
字符串函数
12.查询一个指定的字符串在另一个字符串中的起始位置
charindex(a,b,c)
a为要查询的字符串
b为a所在的字符串
c(int)为从第几个字符开始查找
返回一个指定的字符串在另一个字符串中的起始位置
下标起始位置为1,不是0
selectcharindex('@',email,2)as下标,upper(pwd)as密码
fromstudent
wherelen(pwd)=3andstudentidlike'%2'
13.查询字符串的长度
len(a)
a任意字符串
select*
fromstudent
wherelen(pwd)>3
14.清除字符串left或者right的空格并连接
selectRtrim('爱新觉罗')+'.'+Ltrim('守卫剑阁')as魔兽地图
15.替换一个字符串中指定的所有字符replace
selectreplace(charA,'c','b')把字符串charA中的字符‘c’替换为‘b’
例子:
selectreplace(Rtrim('爱新觉罗')+'.'+Ltrim('守卫剑阁'),'新','心')as魔兽地图
selectreplace(replace(pwd,'o','0'),'i','1')
16.在一个字符串中,在指定位置删除指定长度的字符串,并在该位置插入一个新的字符串
selectstuff(charA,(int)a,(int)b,charC)
在字符串charA中,从b位置开始,
删除长度为b的字符串,并在b位置处插入字符串charC
例子:
selectstuff(replace(Rtrim('爱新觉罗')+'.'+Ltrim('守卫剑阁'),'新','心'),5,1,'版')
as魔兽地图
17.删除字符串左边的空格
Ltrim()
selectLtrim('守卫剑阁')
18.删除字符串右边的空格
Rtrim()
selectRtrim('爱新觉罗')+Ltrim('守卫剑阁')
19.从字符串右边返回指定数目的字符
Right()
selectRight('爱新觉罗守卫剑阁',4)
日期函数
20.获取当天日期:
Getdate()
例子:
selectGetdate()as日期时间
21.日期时间的更改:
DateAdd(YYorMMorDD,(int)a,'月/日/年')
例子:
selectDateAdd(YY,-10,Getdate())as十年前的日期
selectDateAdd(MM,-2,Getdate())as二月前的日期
selectDateAdd(DD,-2,Getdate())as二天前的日期
selectDateAdd(DD,2,'02/01/1989')as二天前的日期
22.两个日期的指定部分的日期区别:
DateDiff(YYorMMorDD,'月a/日a/年a','月b/日b/年b')
后面的减去前面的
例子:
selectDateDiff(YY,'12/11/1989','12/11/2008')as相隔年份
selectDateDiff(MM,'12/11/2008','8/11/2008')as相隔月份
selectDateDiff(DD,'12/11/2008','12/2/2008')as相隔天数
23.返回星期几:
DateName(dw,'01/01/2001')
dw指定的日期星期几
例子:
selectDateName(dw,'01/01/2001')
24.返回日期中指定日期部分的整数型式:
DatePart()
selectDatePart(day,GetDate())as日期号
selectDatePart(MM,GetDate())as日期号
selectDatePart(YY,GetDate())as日期号
数学函数
25.取绝对值:
Abs()
selectAbs(-45)
26.取>=指定数值、表达式的最小整数:
Ceiling()
selectCeiling(45.56)
27.取<=指定数值、表达式的最da整数:
Floor()
selectFloor(45.56)
28.取X的Y次方:
Power(x,y)
selectPower(2,3)
29.把一个数值表达式四舍五入为指定的精度:
Round()
selectRound(3.1415,3)
30.判断数字为正数负数还是为0
正数返回+1负数返回-10返回0
Sign()
selectSign(-8)
31.取浮点表达式的平方根:
Sqrt()
selectSqrt(9)
系统函数
32.转换数据类型
Convert(转换类型,要转换的数据)
selectConvert(int,DateName(YY,GetDate()))+Convert(int,DateName(MM,GetDate()))as当年加当天
33.返回指定表达式的字节数
Datalength()
selectDatalength('sdfalksd')
selectCurrent_Useras你登陆的用户名
selectHost_Name()as电脑名
selectSystem_Useras当前所登录的用户名称
selectUser_Name
(1)as从给定的用户id返回用户名
特殊排序
先按“-”前半部分倒序再按"-"的后半部分倒序
selectnumas级别,姓名=[name]
fromstudent
orderbyconvert(int,left(num,charindex('-',num)-1))desc,
convert(int,ltrim(stuff(num,1,charindex('-',num),'')))desc
34.like的妙用
例子:
select*
fromstudents
wherenameslike'胡%'andlikednotlike'%S'
35.between的妙用
select*
from表名
wherescorenotbetween60and80
36.in的妙用
select*
from表名
where列名in('A','B','C')
orderby列名(ascordesc)
聚合函数
1.求和函数:
sum()
selectsum(列名)
from表名
where条件
2.求平均数函数:
avg()
selectavg(列名)
from表名
where条件
3.求最大值Max最小值Min
selectMax(列名)as最高分,Min(列名)as最低分
from表名
where条件
4.统计函数:
count()
selectcount(表达式or列名or*)
from表名
where条件
selectcount(age)
fromstudents
whereage>22
5.分组查询:
groupby(此语句在select中所指定的列有限)
select列名,与分组相对应的列
from表名
groupby列名
例子:
selectcourseid,avg(score)as课程平均分
fromscore
groupbycourseid
selectstudentidas学员编号,courseidas内部测试,avg(score)as内部测试平均分
from表名
groupbystudentid,courseid
6.Having的妙用
要求:
查询补考过的学员的平均分
selectstudentidas学员编号,courseidas内部测试,avg(score)as内部测试平均分
from表名
groupbystudentid,courseid
Havingcount(score)>1
7.wheregroupbyhaving在查询语句中的次序
例子:
selectstudentid,courseid,avg(score)
wherescore>60
groupbystudentid,courseid
Havingcount(score)>1
select部门编号,count(*)
form员工信息表
where工资>=2000
groupby部门编号
havingcount(*)>1
8.多表连接
1.内连接:
innerJoin
a.在where子句中指定连接条件(A表B表)
selectA.列名,B.列名
fromA,B
whereA.col=B.col
b.在from子句中使用Join...in
selectA.列名,B.列名
from表1asAinnerJoin表2asB
on(A.col=B.col)
selectA.列名,B.列名
from表1asAinnerJoin表2asB
on(A.col=B.col)
where条件
c.多表外连接
selectA.列名,B.列名,C.列名
from表1asA
innerJoin表2asBon(A.col=B.col)
innerJoin表3asCon(C.col=B.col)
2.外连接
a.左连接:
leftJoin
selectA.列名,B.列名
from表1asA
leftJoin表2asB
on(A.col=B.col)
b.右连接:
rightJoin
selectA.列名,B.列名
from表1asA
rightJoin表2asB
on(A.col=B.col)
c.全连接:
fullJoin
selectA.列名,B.列名
from表1asA
fullJoin表2asB
on(A.col=B.col)
3.交叉连接:
crossJoin(行数=A列*B列)
selectA.列名,B.列名
from表1asA
crossJoin表2asB
on(A.col=B.col)
9.查询部门名
selectdistinctbumenIdas部门名
注意:
distinct是不同的意思,如果没distinct的话,则查询结果会出现重复的部门名
查询一张表中的基数行和偶数行
表名:
tbl
字段名:
A
主键字段:
IDKEY(标识列,标识种子:
1,标识增长量:
1)
selectA,identity(int,1,1)asID
intotemtable
fromtbl
selectsum(A)as奇数列汇总
fromtemtable
whereID%2<>0
selectsum(A)as奇数列汇总
fromtemtable
whereID%2=0
银行卡恢复
Users表(主表)
CardIDUserName
16张三
23陈林
25马力
34胡志
36老杜
Account表(子表)
CountIDCardIDScore
11635
223168
336145
25马力
子表中没有要求插入这两条记录Score为2
34胡志
insertintoAccount(Account.CardID,Account.Score)
selectUsers.CardID,2
fromUsers
leftjoinAccounton(Account.CardID=Users.CardID)
whereAccount.CardIDisnull
在指定列的后面插入一列
方法步骤:
(原表stu已存在)
1.新建一张列序即类型为用户所要求的内容为空的表sut3
createtablestu3
(numberintidentity(1,1),
namesvarchar(20)notnull,
ageint,
sexbitdefault1,
likednvarchar(20)
)
2.将原表的内容插入到新建表stu3中
insertintostu3(names,sex,liked)
selectstu.names,stu.sex,stu.liked
fromstu
3.删除原有表stu
droptablestu
4.把stu3表中的信息插入到新建的表stu中
selectidentity(int,1,1)asnumber,stu3.names,stu3.age,stu3.sex,stu3.liked
intostu
fromstu3
5.查看结果
select*
fromstu
数据库设计和高级查询
表的规范设计:
必须满足三大范式
1.原子性(不可再分)
2.非主键字段必须全部依赖于主键
3.非主键不能传递依赖
--如何检测是否存在数据库stuDB,如果存在,先删除,再创建
--SQLServer将数据库的清单存放在master系统数据库的sysdatabases表中
usemaster--设置当前数据库为master,以便访问sysdatabases表
go
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 常见 语句
![提示](https://static.bdocx.com/images/bang_tan.gif)