数据库快速入手文档.docx
- 文档编号:30536630
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:43
- 大小:127.67KB
数据库快速入手文档.docx
《数据库快速入手文档.docx》由会员分享,可在线阅读,更多相关《数据库快速入手文档.docx(43页珍藏版)》请在冰豆网上搜索。
数据库快速入手文档
目录
1基本sql语句1
1.1操作表(数据库定义)1
1.2操作数据(数据库操作)2
1.3数据库控制语言2
2Sqlserver2008数据库命名规则2
3Sql分支结构语法3
3.1If语句3
3.2多条件选择3
3.3循环语句3
4条件查询4
4.1常用关键字4
4.2联合查询4
4.3子查询5
4.4集合查询5
5Sql与oracle常用函数对比5
5.1数学函数5
5.2集合函数6
5.3字符函数7
5.4日期函数7
5.5常用函数7
6SQLSERVER的操作8
7存储过程8
7.1分类8
7.2格式8
7.3常用实例9
7.4扩展存储过程12
7.5临时表12
7.6编译解析13
7.7其他13
7.8触发器14
1基本sql语句
1.1操作表(数据库定义)
使用数据库
Usedb_name;
建表
createtablestudent(
snointnotnull
constraintPK_snoprimarykeyclusteredcheck(snolike‘s1300[0-9][0-9]’),
snamevarchar(8)null,
genderchar
(2)null
)
主键自动增长:
idintidentity(1,1)primarykeynotnull
修改表
altertablestudentaddclass_nochar(6)
altertablestudentdropcolumngender
删除表中的数据
Truncatetable
删除表
droptablestudent
1.2操作数据(数据库操作)
插入
insertintostudent(sno,sname,gender)
values(001,’chenjie’,’女’);
删除
deletefromstudentwheresno=’001’
deletefromstudent;%成为空表
修改
updatestudent
setsname=’chenjie1’wheresno=001;
查询
select*fromstudent
1.3selectintosqlserver选择一张表中的数据插入到另一张表中相关列
方法一:
要求newTable事先存在
InsertintonewTableselect6,col1fromoldTable
方法二:
要求newTable事先不存在
Selectcol1intonewTablefromoldTableselectintofrom
1.4数据库控制语言
grantcreatetabletochenjie
grantall/updateonstudenttopublicwithadminoption
revokecreatetalefromchenjie
DENY语句用于拒绝给当前数据库内的用户或者角色授予权限:
revokeall/updateonstudenttochenjie
建立索引
CreateuniqueindexSnoonstudent(sno)
1.5数据库设置外键
--为表格mybbs中的列authorid添加外键约束author中的id字段。
Altertabledbo.mybbsaddconstraintfk_mybbs_author
Foreignkey(authorid)
Referencesdbo.author([id])onupdatecascadeondeletecascade
--删除外键约束fk_mybbs_author
Altertabledbo.mybbsdropconstraintfk_mybbs_author
1.6Sql语句的应用
例3-7求出各位学生的平均成绩,把结果存放在新表AVGSCORE中。
程序清单如下:
/*首先建立新表AVGSCORE,用来存放学号和学生的平均成绩。
*/
CREATETABLEAVGSCORE
(SNOCHAR(10),
AVGSCORESMALLINT)
Go
/*利用子查询求出SC表中各位学生的平均成绩,把结果存放在新表AVGSCORE中。
*/
INSERTINTOAVGSCORE
SELECTSNO,AVG(SCORE)
FROMSC
GROUPBYSNO
例3-12创建把讲授C5课程的教师的工资增加100元。
程序清单如下:
/*T表(教师基本情况表)的结构为T(TNO,TN,SEX,AGE,PROF,SAL,DEPT)分别表示教师的编号,姓名,性别,年龄,职称,工资,系别。
TC表(教师授课表)的结构为TC(TNO,CNO)分别表示教师的编号,课程编号。
*/
UPDATETSETSAL=SAL+100
WHERETNOIN
(SELECTT.TNOFROMT,TC
WHERET.TNO=TC.TNOANDTC.CNO='C5')
/*通过连接查询找到讲授C5课程的教师编号。
*/
两层lefjoin
Sqlserver的数组实现
2Sqlserver2008数据库命名规则
1.数据库字符规范
26个英文字母,0-9个自然数,加下划线,共36个字符。
“小写”“见名知意”
2.数据库对象命名规范
使用单数。
常用对象前缀
表tb_<表的内容分类>_<表的内容>
视图vi
存储过程sp
函数fn
索引idx_<表名>_<索引标识>
主键pk_<表名>_<主键标识>
外键fk_<表名>_<主表名>_<外键标识>
序列seq
表名:
tb_XX
字段名:
user_idhas_message
存储过程:
sp_user_操作名操作名:
insert|delete|update|calculate|confirm
3.语句规范:
所有关键字全部大写
3Sql分支结构语法
3.1If语句
DECLARE@dINT
set@d=1
IF@d=1BEGIN
PRINT'正确'
END
ELSEBEGIN
PRINT'错误'
END
3.2多条件选择
declare@todayint
declare@weeknvarchar(3)
set@today=3
set@week=case
when@today=1then'星期一'
when@today=2then'星期二'
when@today=3then'星期三'
when@today=4then'星期四'
when@today=5then'星期五'
when@today=6then'星期六'
when@today=7then'星期日'
else'值错误'
end
print@week
case@input
whenathen‘’
whenbthen‘’
else@input
end
3.3循环语句
DECLARE@iINT
SET@i=1
WHILE@i<1000000BEGIN
set@i=@i+1
END
3.4批量插入
*2.BulkInsert
根据格式文件导入数据文件,语法格式如下:
Sql代码
Bulkinsert数据库名.用户名.表名
from'数据文件路径'
with
(
formatfile='格式文件路径',
FirstRow=2--指定数据文件中开始的行数,默认是1
)
4条件查询
4.1常用关键字
1.Distinctdistict在列名前
Selectdistinctcol1fromtable
2.And/OR
Wherecondition1and/orcondition2
3.In/notin
Wherecol1in/notin(‘xx1’,’xx2’)
4.Betweenand
Wherecol1bettween1and5
5.Like
Wherenamelike‘aa%’
6.Exists/notexists指定子查询,检测行的存在,子查询返回boolean值
Whereexists(select1fromtablewherename=’xx’)
7.Groupbyhaving:
having和where可以同时出现
Goupbynamehavingsum(sales)>1500
8.null/notnull
set@param=null
9.Isnull/Isnull
If@paramisnull/isnotnull
Isnull(@value,0)
where子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
having子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having条件显示特定的组,也可以使用多个分组标准进行分组。
Orderasc/desc
4.2联合查询
等值连接
/*将books表和表bookstype中的信息联合查询,条件是联系键相等*/
select*frombooks,bookstypewherebookstype.typeid=books.typeid
内连接
/*将books表和表bookstype中的信息联合查询,条件是联系键相等,和等值连接等价*/
select*frombooksinnerjoinbookstypeonbooks.typeid=bookstype.typeid
左外连接(左边可以为空)
/*将books表和表bookstype中的信息联合查询,包括在books表中没有和bookstype表关联的信息*/
select*frombooksleftouterjoinbookstypeonbookstype.typeid=books.typeid
右外连接
/*将bookstype表和books表中的信息联合查询,包括在bookstype表中没有和books表关联的信息*/
select*frombooksrightouterjoinbookstypeonbookstype.typeid=books.typeid
全连接
/*将bookstype表和books表中的信息联合查询,包括在books表中没有和bookstype表关联的信息以及在bookstype表中没有和books表关联的信息*/
select*frombooksfullouterjoinbookstypeonbookstype.typeid=books.typeid
不等值连接查询
/*两表关联查询,查询表A的cid在表B中没有对应cid的表A的信息SQL*/
SQLServer:
select*frommvc_catalogcwherec.cidnotin(selectm.cidfrommvc_bookm);
4.3子查询
子查询是一个在select查询中含有其他的select语句,子查询通常用在where子句中,即将一个查询结果做为查询的条件.
4.4集合查询
集合运算是将2个或多个子查询结果进行(并union),交(intersect)和减(minus)
-------------------------------------------------------------------------------------------------------------
(并union):
selectemployee_id,empnamefromemp1
union
selectemployee_id,namefromemp2
图:
-----------------
employee_idempname
100king1
1000king2
1000king3
10000king4
100000king5
1000000king6
注:
使用union,重复行只包括一个,当使用unionall时将包括重复行
使用union和unionall必须保证各个select集合的结果有相同个数的列,并且每个列的类型是一样的。
交(intersect):
2个或多个子查询的公共行
selectemployee_id,empnamefromemp1
intersect
selectemployee_id,namefromemp2
减(minus):
从第一个查询结果中去掉出现在第二个查询结果中的行:
selectemployee_id,empnamefromemp1
minus
selectemployee_id,namefromemp2
5Sql与oracle常用函数对比
5.1数学函数
sql语法:
selectabs(-1)value
oracle语法:
selectabs(-1)valuefromdual
sqlserveroracle
绝对值absabs
取符号signsign
向上取整ceilingceil**
向下取整floorfloor
取整casttrunc**
四舍五入roundround
e为底的幂expexp
平方squarepower(4,2)**
任意底数的幂power(a,b)power
开根号sqrtsqrt
e为底的对数logln
10为底的对数log10log(10,10)**
随机数rand()sys.dbms_random.value(0,1)**
圆周率PI()
三角函数sin(pi/2)
costan
(单位为弧度)
反三角函数asinacosatan
(返回值为弧度)
弧度转角度degrees
角度转弧度radians
5.2集合函数
指定列的记录数count
指定列数据求和sum
求最大值max
求最小值min
平均值avg
中间值median
奇数个返回正中间的,偶数个返回中间两个的平均值
排序rank
1)用法1:
RANKOVER
RANK()OVER([PARTITIONBYcolumn1]ORDERBYcolumn2[ASC|DESC])
分类排序
2)用法2:
RANKWITHINGROUP
RANK(expr1)WITHINGROUP(ORDERBYexpr2)
值为expr1的行,在列expr2中的排序为多少。
FIRST、LAST
语法:
agg_function(e1)KEEP(DENSE_RANKFIRSTORDERBYe2[NULLS{FIRST|LAST}])[OVERPARTITIONBYe3]
agg_function(e1)KEEP(DENSE_RANKLASTORDERBYe2[NULLS{FIRST|LAST}])[OVERPARTITIONBYe3]
按e2排序之后取第一个(最后一个)然后在其中找e1函数规定的条目。
5.3字符函数
sql中字符位置从1开始计算
sqlserveroracle
由字符求序号ascii('a')ascii('a')
由序号求字符char(9)chr(9)**
字符连接'11+'22'+'33'concat('11','22')**
长度lendatalengthlengthlengthb
大小写lowerupper
重复字符串replicate('abcd',2)
(转换连接长度大小重复)
求子串substring('abcd',start_index,len)substr('abcd',2,2)**
子串位置charindex('s','sdsq',searchpos)instr('sdsq','s',2)**
模糊子串位置patindex('%d%q%','sdsfasdqe')null
子串填充stuff('abcdef',2,3,'ijkmln')replace('abcdef','bcd','ijklmn')**
Replace(s_before,s_tobe,s_new)
子串全部替换translate('fasdbfa','fa','我')
单词首字母大写initcap('abcde')
左补空格space(10)+'abcd'LPAD('abcd',4)
右补空格‘abcd’+space(10)RPAD('abcd',4)**
删除空格ltrim+rtrimltrim,rtrim,trim**
发音值soundex('smith')soundex('smith')
发音相似性比较difference('smithers','smythers')
5.4日期函数
系统时间getdate()sysdate**
求日期convert(char(10),getdate(),20)trunc(sysdate)
to_char(sysdate,'yyyy-mm-dd')
求时间convert(char(8),getdate,108)to_char(sysdate,'hh24:
mm:
ss')
取日期时间的其他部分datepartdatenameto_char
当月最mi,后一天LAST_DAY(sysdate)
本星期某一天Next_day(sysdate,7)
字符串转时间cast('2004-09-08'asdatetime)to_date('2004-01-0522:
09:
38','yyyy-mm-ddhh24-mi-ss')
两日期某一部分的差datediff(ss,getdate(),getdate()+12.3)(d1-d2)*24*60*60
根据差值求新的日期dateadd(mi,5,getdate())sysdate+8/60/24
求不同时区时间New_time(sysdate,'ydt','gmt')
5.5常用函数
select left('abcdef',3)abc
超长字符串赋值时使用select,使用set
substring('abcd',start_index,length)
charindex('char_to_be_find','string_to_search',searchpos)
1.日期相关转换:
convert(date,getdate(),112)日期转化为年月日格式(20051112)
convert(char(10),getdate(),20)日期转化为年月日(2005-11-12)
convert(char(8),getdate(),108)日期转时间(15:
21:
22)
2.字符转换
convert(decimal(19,0),’123445456’)
cast(‘12334’asdecimal(19,0))
cast(111111asvarchar(10))
ISNULL()ISNULL(check_expression,replacement_value)
isnull(p1,p2)其用法是如果p1为null,则用p2代替。
Otherdb..table:
对另一个数据库中的表进行操作
object_id
返回int类型的数据库对象标识号。
语法
OBJECT_ID ( 'object' )
分页查询
Select*from(
selectROW_NUMBER()over(orderbyid1)orderid,*fromtable1))table2
wheretable2.orderidbetween1and5
6SQLSERVER的操作
快捷键
执行语句:
Alt+XorF5
7存储过程
速度快,性能好,提前解析、编译、优化,缓存。
存储在数据库服务器,减少网络通信。
业务逻辑封装。
安全减少SQL注入攻击。
7.1分类
1.系统存储过程:
以sp_开头,用来进行系统的各项设定.
2.本地存储过程:
用户创建的存储过程是由用户创建并完成某一特定功能的存储过程,事实上一般所说的存储过程就是指本地存储过程。
3.临时存储过程:
分为两种存储过程:
a)一是本地临时存储过程,以井字号(#)作为其名称的第一个字符,则该存储过程将成为一个存放在tempdb数据库中的本地临时存储过程,且只有创建它的用户才能执行它;
b)二是全局临时存储过程,以两个井字号(##)号开始,则该存储过程将成为一个存储在tempdb数据库中的全局临时存储过程,全局临时存储过程一旦创建,以后连接到服务器的任意用户都可以执行它,而且不需要特定的权限。
4.远程存储过程:
在SQLServer2005中,远程存储过程(RemoteStoredProcedures)是位于远程服务器上的存储过程,通常可以使用分布式查询和EXECUTE命令执行一个远程存储过程。
5.扩展存储过程:
扩展存储过程(ExtendedStoredProcedures)是用户可以使用外部程序语言编写的存储过程,而且扩展存储过程的名称通常以xp_开头。
7.2格式
Createprocedureprocedue_name
[@parameterdata_type][output]
[with]{recompile|encryption}
as
sql_statement
解释:
output:
表示此参数是可传回的
with{recompile|encryption}
recompile:
表示每次执行此存储过程时都重新编译一次
encryption:
所创建的存储过程的内容会被加密
存储过程的3种传回值:
1)、以Return传回整数
2)、以output格式传回参数
3)、Recordset
Output
定义时:
@v
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 快速 入手 文档
![提示](https://static.bdocx.com/images/bang_tan.gif)