ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:395.26KB ,
资源ID:4690206      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4690206.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(sql常用整理.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

sql常用整理.docx

1、sql常用整理目录概览:1.数据库2.表3.临时表4.索引和约束5.范式6.增删改查7.连接8.分组和排序9.通配符10.视图11.存储过程和事务12.游标13.触发器14.作业自己亲手编写的一些常用的SQL,希望对大家有用喔,废话不多说了,直接入正题1.数据库创建数据库use masterif exists(select * from sysdatabases where name = OrderDB) drop database OrderDBcreate database OrderDBon( name=OrderDB_data, filename = D:DBOrderDB_data.

2、mdf, size=10, filegrowth=15%)log on( name=OrderDB_log, filename=D:DBOrderDB_log.ldf, size=3, filegrowth=10%)删除数据库drop database OrderDB2.表创建表-用户表if exists (select * from sysobjects where name = Tse_User) drop table Tse_UserCreate table Tse_User( ID int identity(1,1), UserID int not null, UserName var

3、char(64) not null, RealName varchar(64) null, PRIMARY KEY (UserID)-产品表if exists (select * from sysobjects where name = Tse_Product) drop table Tse_ProductCreate table Tse_Product( ID INT IDENTITY(1,1), ProductID varchar(64) not null, ProductName varchar(256) not null, Price float not null, Storage i

4、nt not null, -库存 PRIMARY KEY(ProductID)-订单表if exists (select * from sysobjects where name = Tse_Order) drop table Tse_OrderCreate table Tse_Order( ID int identity(1,1), OrderID varchar(64) not null, UserID int not null, ProductID varchar(64) not null, Number int not null, -购买数量 PostTime datetime not

5、 null, PRIMARY KEY(OrderID), FOREIGN KEY (UserID) REFERENCES Tse_User(UserID), FOREIGN KEY (ProductID) REFERENCES Tse_Product(ProductID) 删除表drop table Tse_User 清空表truncate table Tse_User 清除表中所有数据,下次插入编号从1开始delete from Tse_User 清除表中所有数据,但下次插入编号从原有编号+1开始3.临时表生成临时表,插入数据,将员工姓名全部打印出来use mastergocreate ta

6、ble #Employee( ID int identity(1,1), Name varchar(64) not null, primary key (ID)insert into #Employee(Name) values(zhangsan)insert into #Employee(Name) values(lisi)insert into #Employee(Name) values(wangwu)insert into #Employee(Name) values(tony)insert into #Employee(Name) values(mike)declare i int

7、declare Name varchar(64)declare Count intdeclare Str nvarchar(4000)set i = 0select Count = COUNT(0) from #Employeewhile(i 3),constraint CS_Email check (charindex(, Email) 0)5.范式第一范式1NF第一范式需满足两个条件:1)每个数据行必须包含具有原子性(即不可再分)的值;2)每个数据行必须包含一个独一无二的值,即主键。举例:假如客户表中存在地址列,如果经常需要按城市归类,那么,应该地址列拆分为省份,城市,县,街道地址等列。第

8、二范式2NF第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。举例:比如常用的选课表中,以学号和课程号为联合主键,不能将课程名,学分等课程相关信息写入选课表,因为他们只与主键的一部分(课程号)相关。第三范式3NF第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。举例:订单表中以订单号为主键,用户真实姓名和邮箱等信息与用户有关,与订单没有直接关系,因此,用户真实姓名和邮箱等不能放到订单表中。 由于时间关系,余下的几个问题在下一篇中讨论

9、,谢谢关注,下一篇地址为:工作经常使用的SQL整理,实战篇(二)接着上一篇“工作经常使用的SQL整理,实战篇(一)”继续讨论,这一篇中主要讨论增删改查,连接,分组和排序,通配符,视图,存储过程和事务,游标,触发器这些东西。6.增删改查插入-插入用户表数据insert into Tse_User(UserID, UserName, RealName, Email, Mobile)values(111, zhangsan, zhangsan, zs, ) -插入产品表数据INSERT INTO Tse_Product(ProductID, ProductName, Price, Storage)V

10、ALUES(PD00030, Benz, 500500.0, 30000) -插入订单表数据declare OrderID VARCHAR(64)-将年,月,日,时,分,秒,毫秒以字符串形式连接起来作为订单号 SET OrderID = DATENAME(YEAR, GETDATE() + DATENAME(MONTH, GETDATE() +DATENAME(DAY, GETDATE()+ DATENAME(HOUR, GETDATE() + DATENAME(MINUTE, GETDATE()+DATENAME(SECOND, GETDATE() +DATENAME(MILLISECOND

11、, GETDATE() INSERT INTO Tse_Order(OrderID, UserID, ProductID, Number, PostTime) VALUES(OrderID, 115, PD00040, 10, GETDATE()修改Update Tse_User set RealName = 李四 where UserID = 112删除Delete from Tse_User Where UserID = 111简单查询select * from Tse_User with(nolock)select * from Tse_Order with(nolock) where

12、ID = 27.连接内连接-左右表匹配的行SELECT * FROM Tse_Order AS O WITH(NOLOCK)INNER JOIN Tse_User AS U WITH(NOLOCK) ON O.UserID = U.UserIDWHERE U.UserID = 111 左连接(左外连接)-左边表中所有行,右边匹配左边, 右边为空的补NULLSELECT * FROM Tse_User AS U WITH(NOLOCK)LEFT JOIN Tse_Order AS O WITH(NOLOCK) ON U.UserID = O.UserID 右连接(右外连接)-右边表中所有行,左边

13、匹配右边,左边为空的补NULLSELECT * FROM Tse_Order AS O WITH(NOLOCK)RIGHT JOIN Tse_Product AS P WITH(NOLOCK) ON O.ProductID = P.ProductID 全连接-左右表所有行,为空的补NULLSELECT * FROM Tse_Order AS O WITH(NOLOCK)FULL JOIN Tse_Product AS P WITH(NOLOCK) ON O.ProductID = P.ProductID8.分组和排序按UserID分组SELECT UserID, COUNT(0) AS Num

14、ber FROM Tse_Order WITH(NOLOCK) GROUP BY UserID 按UserID分组,订单数量大于等于3SELECT UserID, COUNT(0) AS Number FROM Tse_Order WITH(NOLOCK) GROUP BY UserID HAVING COUNT(0) =3按UserID分组,订单数量大于等于1,按订单数量升序SELECT UserID, COUNT(0) AS Number FROM Tse_Order WITH(NOLOCK) GROUP BY UserID HAVING COUNT(0) =1 ORDER BY Numb

15、er ASC9.通配符LIKE:匹配多个未知字符_:匹配一个未知字符 -匹配126邮箱的SELECT * FROM Tse_User WITH(NOLOCK) WHERE Email LIKE % -匹配所有包含的邮箱 SELECT * FROM Tse_User WITH(NOLOCK) WHERE Email LIKE % -匹配16开头,后面跟一个任意字符的邮箱 SELECT * FROM Tse_User WITH(NOLOCK) WHERE Email LIKE %16_.com-匹配除126以外的所有邮箱SELECT * FROM Tse_User WITH(NOLOCK) WHE

16、RE Email NOT LIKE %10.视图 删除视图 IF EXISTS (SELECT * FROM SYSOBJECTS WHERE Name = V_Tse_TotalInfo) DROP VIEW V_Tse_TotalInfo 创建视图-包含用户表,产品表和订单表关联后的所有信息 CREATE VIEW V_Tse_TotalInfo AS SELECT O.OrderID, O.UserID, O.ProductID, O.PostTime, U.UserName, U.RealName, U.Email, U.Mobile, P.ProductName, P.Price F

17、ROM Tse_Order AS O WITH(NOLOCK) INNER JOIN Tse_User AS U WITH(NOLOCK) ON O.UserID = U.UserID INNER JOIN Tse_Product AS P WITH(NOLOCK) ON O.ProductID = P.ProductID11.存储过程和事务创建存储过程,先删除订单表(外键表)中的记录,再删除产品表(主键表)中的记录CREATE PROCEDURE dbo.SC_Tse_DeleteProduct( ProductID VARCHAR(64), Result int output)ASBEGI

18、N SET NOCOUNT ON; BEGIN TRAN -开始事务 BEGIN DELETE FROM Tse_Order WHERE ProductID = ProductID DELETE FROM Tse_Product WHERE ProductID = ProductID IF (ERROR 0) BEGIN SET Result = -999 ROLLBACK TRAN -回滚 END ELSE BEGIN SET Result = 888 COMMIT TRAN -提交 END ENDEND12.游标获取所有产品的名字,以|分隔,包含在输出参数Names中CREATE PROC

19、EDURE SC_Tse_GetProductNames ( Names varchar(max) OUTPUT ) AS BEGIN SET NOCOUNT ON; declare ProductName varchar(64) declare curTest cursor for (select ProductName from Tse_Product) open curTest -打开游标 fetch next from curTest into ProductName while fetch_status = 0 -获取成功 begin if (ProductName is not n

20、ull and ProductName ) begin if (Names is null or Names = ) begin set Names = ProductName end else begin set Names = Names + |+ ProductName end end fetch next from curTest into ProductName end close curTest -关闭游标 deallocate curTest -释放游标 END13.触发器因为用户编号在订单表中为外键,所以,直接删除某个用户时,如果该用户下了订单,就会提示有外键不能删除。针对这种

21、情况,可以考虑使用触发器。创建触发器,删除用户表中用户时,会自动先删除订单表中的订单CREATE TRIGGER TR_Tse_DelUser ON Tse_User INSTEAD OF DELETE -代替默认的删除 AS BEGIN SET NOCOUNT ON DELETE FROM Tse_Order WHERE UserID IN (SELECT UserID FROM Deleted) DELETE FROM Tse_User WHERE UserID IN (SELECT UserID FROM Deleted)END 使用触发器,添加订单时,产品表库存相应减少CREATE T

22、RIGGER TR_Tse_ADDOrder ON Tse_Order AFTER INSERT AS BEGIN UPDATE Tse_Product SET Storage = Storage - (SELECT Number FROM INSERTED) WHERE ProductID IN (SELECT ProductID FROM INSERTED)END关于SQL定时作业部门的介绍,请看“工作经常使用的SQL整理,实战篇(三)”接着本系列前面两篇继续讨论。有时候当你需要定时处理数据库数据时,你会怎么做呢?当然你可以手工编写一个程序去完成任务,但写程序既需要时间也需要考验程序的稳定

23、性,这里,介绍一种快捷的方法,这里只介绍SQLSERVER数据库中建立作业的方法,其他数据库我相信也有这个功能。14.作业在SQLSERVER数据库中建立作业的步骤大致如下:1.安装完SQLSERVER后,打开SQLSERVERManagementStudio,找到SQLSERVER代理,如下图。2.在“作业”上点击鼠标右键,选择新建作业。3.在弹出的界面上,常规属性中填写名称。4.单击“步骤”属性,再点击新建。5.填写步骤名称, 类型, 选择数据库, 命令填写你要执行的存储过程或sql语句。6.选择高级属性,由于这里只有一步,所以选择“退出报告成功的作业”,也可以选择脚本输出到文件的路径。点击确定。7.下一步点击“计划”-“新建”。8.执行计划中输入名称,选择计划类型,执行频率(每天/每周/每月),按你想要的选择。9.还可以在通知属性中,选择作业完成后发电子邮件等操作(如果远程的话)。10.最后点击确定,这个作业就新建好了。11.新建成功后,从作业中可以看到这个作业。12.另外,你还可以通过作业活动监视器监视作业的执行情况。以上就是SQL SERVER数据库新建定时作业的全过程,希望对你有用,有错误的地方,请指出来喔,谢谢

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1