sql 小全
前些日子sql用到哪里写到哪里,乱七八糟,今天整理了一下,以作备份(虽然开通博客已经八个月了,但是今天还是第一次发表博文,好紧张啊~~)
--2014.08.27号整理sql语句
1:进入数据库
- use [数据库名]
- eg: use [dev]
2:创建表
- create table 表名(
- [ID] int identity(1,1) primary key,
- [列名] 数据类型 约束 ,
- )
eg:
- create table atblTest1(
- [ID] int identity(1,1) primary key, --从1开始每次增加1
- [Key] varchar(200) unique ,
- [Value] decimal(18,4) , --小数点后面保留四位小数,数据长18位(不加小数点位)
- [Unit1] varchar(100),
- --Message text,
- --Time datetime
- --[count] int,
- )
3:操作现有表/字段
- --修改字段数据类型
- alter table 表名 alter column 字段名 字段类型
- --删除字段出现约束什么错误
- ALTER TABLE 表名 DROP CONSTRAINT 默认约束名
- GO
- ALTER TABLE 表名 DROP COLUMN 字段名
- GO
- --获取默认约束名
- select name
- from sysobjects
- where id=(select cdefault
- from syscolumns
- where name='字段名' and id = (select id
- from sysobjects
- where name = '表名'))
- --添加字段
- alter table 表名 add 字段名 字段类型
- --不允许空字符:
- alter table 表名 add 新字段 字段类型 not NULL
- --允许空字符:
- alter table 表名 add 新字段 字段类型 NULL
- --修改字段
- exec sp_rename '表名.原列名','新列名','column'
- --修改表名
- exec sp_rename '旧表名', '新表名'
eg:
- exec sp_rename 'atblTest1', 'atblTest'
- exec sp_rename 'atblTest.Unit1','Unit','column'
- alter table atblTest alter column [Unit] varchar(200)
- alter table atblTransactions add IsInsertAccounting bit
- alter table atblMembers add AccountUserId int
- alter table atblAccounts add PendingBalance money
4:添加数据
- insert into 表名(列名1,列名2,列名3) values(数据1,数据2,数据3)
eg:
- insert into atblTest values('LOBcheckFee',3,'dollars')
5:更改数据
- update 表名 set 列名 = 列名数据 where id=标识数据
eg:
- update atblTest set [Unit] ='dollar' where [ID]=1
6:创建触发器 (就不连贯着来发例子了啊)
- create trigger 触发器名 --创建触发器名字
- on 触发器所在表 --在这个表中创建触发器
- for Update -- 因为哪个事件而触发(insert ,update,delete)
- as --事件触发后所做的事情
- if Update(该表字段) --如果修改XX字段
- begin
- 引发的sql操作
- end
eg:(主要是如果ablLeads表QuantityOnHand数量改变,就会将改变的过程存到另一个表中:1-->0)
- create trigger trQuantityOnHand
- on atblLeads
- for Update
- as
- if Update(QuantityOnHand)
- begin
- declare @QuantityOnHandOld int, @QuantityOnHandNew int,@LeadID int;
- select @QuantityOnHandNew=QuantityOnHand,@LeadID=LeadID from inserted;
- select @QuantityOnHandOld=QuantityOnHand from deleted;
- if(@QuantityOnHandOld != @QuantityOnHandNew)
- begin
- insert into atblTrigger([Type],[Time],[Result],[LeadID])
- values('QuantityOnHand',getdate(),convert(varchar, @QuantityOnHandOld)+' -> '+convert(varchar,@QuantityOnHandNew),@LeadID);
- end
- end
7:删除触发器
- if(object_id('触发器名称') is not null)
- drop trigger 触发器名称
- if(object_id('trQuantityOnHand') is not null)
- drop trigger trQuantityOnHand
8:对表数据分页
- select * from
- (
- select * , row_number() over
- (
- order by
- 某种规律的字段名(id)
- ) as rownum
- from 表名
- )DATA
- where DATA.rownum>开始页码*每页列显数量 and DATA.rownum<开始页码*每页列显数量+每页列显数量
eg:列显第六页的数据即600-610之间的数据
- select * from
- (
- select * , row_number() over
- (
- order by
- LEADID
- ) as rownum
- from atblLeads
- )DATA
- where DATA.rownum>60*10 and DATA.rownum<60*10+10
9:删除表
- drop table 表名
- -----如果表存在就drop掉-----------
- if exists (select 1
- from sysobjects
- where id = object_id('表名')
- and type = 'U')
- drop table 表名
- go
--eg:
- if exists (select 1
- from sysobjects
- where id = object_id('[dbo].[db3_IndexingDetails]')
- and type = 'U')
- drop table [dbo].[db3_IndexingDetails]
- go
注意:
--truncate 删除内容,并释放空间,并不删除表结构,删除标识列,标识列重新从1开始
--delete 删除内容,不释放空间,不删除表结构,不删除标识列,标识列继续增加
--drop 直接删除表
10:控制sql修改数量
eg:
- begin tran
- update atblOrders set OrderStatus = 2 where EbayOrderID = '131235536269-0'
- if(@@ROWCOUNT>1) --@@ROWCOUNT 是受影响的行数
- begin rollback tran
- print 'sql超过了指定的受影响行数,将不会执行该语句'
- end
- else if(@@ROWCOUNT=0)
- begin
- print '执行失败'
- end
- else
- begin commit tran
- print '恭喜你执行完成'
- end
11:获得行数
- select count(*) from 你的表名
12:获得列名以及详细数据
- select * from syscolumns where id = object_id('表名')
eg:
- select * from syscolumns where id = object_id('atblUsers')
13:获得列名数量
- select count(*) from syscolumns where id=object_id('你的表名')
14:读取库中的所有表名
- select name from sysobjects where xtype='u'
15:读取指定表的所有列名
- select name from syscolumns where id=(select max(id) from sysobjects where xtype='u' and name='表名')
16:获取字段类型
- select t.name from sysobjects o,syscolumns c,systypes t
- where o.id=c.id and c.usertype=t.usertype and o.name='表名' and c.name='列名'
17:Select语句 区分查询数据的大小写
--不区分大小写(默认不区分)
- select top 10 * from atblUsers where [Password]='sunflower134' COLLATE Chinese_PRC_CI_AS
eg:--区分大小写 针对某个字段
- select top 10 * from atblUsers where [Password]='sunflower134' COLLATE Chinese_PRC_CS_AS AND Status=1
18:数据查询
eg:
- select TransactionID,AccountID,TransactAmount,TransactDate,TransactType,
- Credit = CASE WHEN TransactAmount = 0 THEN 0 WHEN TransactAmount > 0 THEN TransactAmount END, --(添加的列显字段)
- Debit = CASE WHEN TransactAmount = 0 THEN 0 WHEN TransactAmount < 0 THEN -TransactAmount END
- FROM [atblAccounting]
- WHERE [AccountID] = 53 order by TransactDate DESC ,TransactType desc
- select Sum(TransactAmount) from atblAccounting where AccountID=54
- select TOP 200 * from atblAccounting order by TransactionID DESC
- select b.IsInsertAccounting, * from atblAccounting a
- inner join atblTransactions b on a.ebayOrderID=b.eBayOrderID and a.ItemID = b.ItemID
- select count(*) from atblUsereBayAuthToken
19:删除表中的所有数据
- DELETE FROM 表名
20:查询SQLserver的详细版本信息
- select @@VERSION
21:递归查找 根据父节点查找子节点数据/子节点查找父节点数据
根据这张图片,你大概已经知道表是什么结构的了吧。
a)-递归查找数据 这是从父节点到子节点的递归(需要限制大小)
- with cte as(
- select CategoryID,CategoryName,CategoryParentID ,CategoryLevel
- from atbleBayCategories
- where CategoryID ='6000'
- union all
- select a.CategoryID,a.CategoryName,a.CategoryParentID,a.CategoryLevel from atbleBayCategories a
- inner join cte b on a.CategoryParentID = b.CategoryID
- )
- select top 100 * from cte
b)--子节点到父节点(逆向递归)
- with temp as(
- select *
- from atbleBayCategories
- where CategoryID ='33636'
- union all
- select a.* from atbleBayCategories a
- inner join temp b on a.CategoryID = b.CategoryParentID where a.CategoryID != b.CategoryID
- )
- select * from temp
特别注意
由于大家表结构可能一致,数据也看似一致可能会导致sql运行错误(就因为之前没有加上这句:a.CategoryID != b.CategoryID,导致sql死循环,执行不成功,楼主当时都准备改表结构了..)
22:设置表中A字段数据=B字段数据:
情景:当用户修改商品信息,需要将修改的数据显示在最前方,假设数据库没有DateModify这个字段,你需要添加这个字段,并且设置这些DateModify数据:
- Update tableName set DateModify = DateCreate
23:复制表A数据到表B中
1.INSERT INTO SELECT语句
语句形式为:
- Insert into Table2(field1,field2,...) select value1,value2,... from Table1
2.SELECT INTO FROM语句
语句形式为:
- SELECT vale1, value2 into Table2 from Table1
要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中
24:查询数据库中的存储过程是否存在某文本内容
- SELECT ROUTINE_NAME, ROUTINE_DEFINITION
- FROM INFORMATION_SCHEMA.ROUTINES
- WHERE ROUTINE_DEFINITION LIKE '%text%'
- AND ROUTINE_TYPE='PROCEDURE'
- 查找存储过程包含某文字
- select name
- from sysobjects o, syscomments s
- where o.id = s.id
- and text like '%sp_WidgetCrossTabTables%'
- and o.xtype = 'P'
25:替换表中某列字段
- update 表名 set 字段名=replace(字段名,'aaaa','cccc');
eg:
aaaaxxxbbb 变成 ccccxxxbbb
aaaamtbbb 变成 ccccmtbbb
26:获取具体月份的数据
- SELECT CreateDate as time, * FROM [EKU_PrimaryData]
- where DATEPART(YEAR,CreateDate) = 2017 and MONTH(CreateDate) in( 10,11)
- order by CreateDate
- --最近一个月
- SELECT DATEADD(month, -1, getdate())
- --上个月
- select convert(varchar(7),dateadd(month,-1,getdate()),120)
27:partition by 分组
- select eBayItemID,Cost,FreeShipping from (
- --根据ebayitemid分组,价格从高到低排序 并标上序号 最后取第一行
- select row_number() over( partition by eBayItemID order by cost desc) as rn,*
- from [440294_Iguide].[dbo].[atbleBayItemUSShippingServices] --where ebayitemID =105490
- --where len(FileName)>0
- )
- as t
- where t.rn=1
28:总数据:db1, 不在db2 ,在db3, 获取数据
- with db1 as(
- select t1.Id, t1.ReferenceNumber, t2.ID as InventoryId, t1.UserName
- from post_GoAntiques t1
- left join EuroLuxProductBE.dbo.pdt_Inventory t2 on t1.ReferenceNumber=t2.ITEM
- ),
- db2 as (--not in
- select ProductNumber from post_ProductCommon where WebSiteName='GoAntiques'
- ),
- db3 as( -- in
- select min(Id) as Id from post_GoAntiques group by ReferenceNumber
- )
- select * from db1 where db1.ReferenceNumber in (
- select ReferenceNumber from db1
- EXCEPT --去除db2的数据
- SELECT ProductNumber as ReferenceNumber from db2
- )
- and db1.ID in (
- select id from db1
- INTERSECT-- 取db3的交集
- SELECT id from db3
- )
29:sqlserver库占用大小
- SELECT DB_NAME(database_id) AS [Database Name],[Name] AS [Logical Name],[Physical_Name] AS [Physical Name],((size * 8) / 1024) AS [Size(MB)],
[differential_base_time] AS [Differential Base Time]- FROM sys.master_files
30:一个积分等级表,一个用户积分表。获取用户属于哪个等级: left outer join
- select * from [TianYaDemo].[dbo].[Vip_ScoreLogs]
- left outer join [TianYaDemo].[dbo].[Vip_ScoreGrade] as sg on TotalValue between MinValue and MaxValue
31:行列转换
- create table tb
- (
- Name varchar(10) ,
- Subject varchar(10) ,
- Result int
- );
- insert into tb(Name , Subject , Result) values('张三' , '语文' , 74)
- insert into tb(Name , Subject , Result) values('张三' , '数学' , 83)
- insert into tb(Name , Subject , Result) values('张三' , '物理' , 93)
- insert into tb(Name , Subject , Result) values('李四' , '语文' , 74)
- insert into tb(Name , Subject , Result) values('李四' , '数学' , 84)
- insert into tb(Name , Subject , Result) values('李四' , '物理' , 94)
- select * from tb
- select name 姓名,
- max(case subject when'语文'then result else 0 end) 语文,
- max(case subject when'数学'then result else 0 end) 数学,
- max(case subject when'物理'then result else 0 end) 物理
- from tb
- --where 数学='83'
- group by name
32:批量更数据库字段的部分数据
- update 表的名称 set 此表要替换的字段名=REPLACE(此表要替换的字段名, '原来内容', '新内容')
- update [eku_WholeData_{0}] set Voltage =REPLACE(Voltage, Voltage, STUFF(Voltage, charindex('\"key',Voltage), 45, ''))
- where Voltage like '%\"key%'
33:统计库中每个表的行数
- SELECT a.name, b.rows
- FROM sysobjects AS a INNER JOIN sysindexes AS b ON a.id = b.id
- WHERE (a.type = 'u') AND (b.indid IN (0, 1))
- ORDER BY b.rows DESC
34:插入10w条数据
- INSERT INTO Department(name,[Company],groupname) VALUES('销售部','中国你好有限公司XX分公司','销售组')
- GO 100000
35:输出sql执行的时间
- set statistics time on
- select * from dbo.EKU_PrimaryDataFiles
- set statistics time off
36:sql server 规则使用
创建规则->将规则绑定到表上-->测试规则(插入不满足的条件测试)-->取消绑定规则
- --创建规则:价格要在0-1000以内
- go
- create rule rule_Price
- as
- @price >0 and @price<1000
- --查询表
- select * from books
- --将规则绑定到表上
- exec sp_bindrule 'rule_Price','books.book_price'
- --这里insert的数据不满足规则,会报错
- insert into books values('三国演义',1001,'罗贯中')
- --取消绑定
- exec sp_unbindrule 'books.book_price'
- --再去执行即可insert成功
- insert into books values('三国演义',1001,'罗贯中')
- --删除规则
- drop rule rule_price
37:默认值设置
设置默认值 -->将默认值绑定到某表某列 --->测试---> 取消默认值绑定 --->删除默认值
- --查询表
- select * from books
- --设置默认值
- create default defaultBookAuth as '作者不详'
- --将默认值绑定到表列
- exec sp_bindefault 'defaultBookAuth' ,'books.book_auth'
- insert into books(book_name) values('不存在的人2019')
- --查询表
- select * from books
- --取消绑定
- exec sp_unbindefault 'books.book_auth'
- --删除默认值
- drop default defaultBookAuth
38:存储过程
- --创建有参存储过程
- create proc p_BookAdd
- @Name varchar(30)
- as
- insert into books(book_name)values(@Name)
- go
- --sqlserver 执行存储过程测试,图中给【作者】创建了默认值,所以作者字段有默认值
- exec p_BookAdd '测试书名称'
- 创建无参存储过程
- --、不带参数的存储过程,获取MyStudentInfo表的所有记录
- CREATE proc Proc_GetInfo
- as
- select * from MyStudentInfo20190311
- go
- --执行存储过程
- exec Proc_GetInfo
- go
- 创建带输入参数的存储过程
- CREATE proc Proc_InsertData
- @Id int,
- @Name varchar(16),
- @Age int,
- @Gender varchar(2),
- @Phone varchar(16),
- @Address varchar(50),
- @GradeId int,
- @Score int
- as
- begin
- insert INTO MyStudentInfo20190311 VALUES(@Id,@Name,@Age,@Gender,@Phone,@Address,@Gender,@Score)
- end
- 创建带默认值的输入参数的存储过程
- CREATE proc Proc_InsertDefault
- @Id int,
- @Name varchar(16),
- @Age int,
- @Gender varchar(2)='',
- @Phone varchar(16),
- @Address varchar(50)='沈阳',
- @GradeId int,
- @Score int
- as
- begin
- insert INTO MyStudentInfo20190311 VALUES(@Id,@Name,@Age,@Gender,@Phone,@Address,@Gender,@Score)
- end
- 创建带输出参数的存储过程(根据输入的ID返回名字)
- create proc Proc_Out
- @Id int,
- @Name varchar(200) out
- as
- begin
- select @Name=Name from MyStudentInfo20190311 where id=@id
- end
- --sql执行存储过程
- declare @Name nvarchar(200)
- exec Proc_Out 1 , @Name out
- select @Name as 输出的值
- create proc Proc_Out
- 存储过程返回多个结果
- create proc Proc_Page
- @StartIndex int,
- @EndIndex int
- as
- begin
- select COUNT(*) as 总数 from MyStudentInfo20190311
- select * from (
- SELECT ROW_NUMBER() OVER(ORDER BY Id) AS rowid,* FROM MyStudentInfo20190311 ) temp
- where temp.rowid between @StartIndex AND @EndIndex
- end
- --sql调用存储过程
- exec Proc_Page 1,2
- create proc Proc_Page
39:函数
sql 小全的更多相关文章
- SQL Server全时区转换
SQL Server全时区转换 假如你的应用程序是跨国(例如跨国银行交易)使用的话,那么数据库的一些国际化特性支持可以说是非常重要 其中最常见的就是各国时区上的差异,由于SQL Server getd ...
- SQL转换全角/半角函数
/****** SQL转换全角/半角函数 开始******/ CREATE FUNCTION ConvertWordAngle ( ), --要转换的字符串 @flag bit --转换标志,0转换成 ...
- SQL小汇总
SQL小汇总 1.对每个时段的数据进行统计2.查询时间条件(to_date)3.插入序列号和系统时间4.查询当天.7天内.30天内5.查询前后x小时.分钟.天.月.6.保留小数点后4位7.查询字段A中 ...
- ICANN认证注册商小全 英、德、法
转载 在ICANN认证注册商小全(一)和ICANN认证注册商小全(二)中,QQPCC介绍了美洲的各ICANN认证注册商.今天我们移师欧洲,介绍欧洲的ICANN认证注册商,欧洲的注册商也很多,不可能在一 ...
- SQL转换全角和半角函数
SQL转换全角和半角函数 CREATE FUNCTION f_Convert( ), --要转换的字符串 @flag bit --转换标志,0转换成半角,1转换成全角 )) AS BEGIN ),@s ...
- windows蓝屏错误小全
作者:siyizhu 日期:2005-11-27 字体大小: 小 中 大 引用内容 0 0x00000000 作业完成. 1 0x00000001 不正确的函数. 2 0x00000002 系统 ...
- sql server 全角与半角字符转换
/****** SQL转换全角/半角函数 开始******/CREATE FUNCTION ConvertWordAngle ( @str NVARCHAR(4000), --要转换的字符串 @f ...
- linux常用命令与实例小全
转至:https://www.cnblogs.com/xieguohui/p/8296864.html linux常用命令与实例小全 阅读目录(Content) 引言 一.安装和登录 (一) ...
- java面试题小全
面向对象的特征有哪些方面 1. 抽象:抽象就是忽略一个主题中与当前目标2. 无关的那些方面,3. 以便更充分地注意与当前目标4. 有关的方面.抽象并不5. 打算了解全部问题,而6. 只是选择其中的 ...
随机推荐
- java之操作集合的工具类--Collections
Collections是一个操作Set.List和Map等集合的工具类. Collections中提供了大量方法对集合元素进行排序.查询和修改等操作,还提供了对集合对象设置不可变.对集合对象实现同步控 ...
- go面向对象之多态即接口(interface)
Go 语言接口 Go 语言提供了另外一种数据类型即接口,它把所有的具有共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口. 实例 /* 定义接口 */ type interface ...
- form表单中的button自动刷新页面问题
form表单中如果存在button的话,有可能会出现一个问题:点击button,触发了页面的自动刷新事件. 原因是因为<button>标签默认的类型是submit,即默认的button点击 ...
- 清新简约风格毕业论文答辩PPT模板推荐
不管是学生还是老师,应该经常会需要学生答辩的PPT模板,今天给大家推荐织梦58的学生答辩ppt模板. 模版来源:http://ppt.dede58.com/gongzuohuibao/26494.ht ...
- Script - 检查当前的undo配置和建议设置 (Doc ID 1579035.1)
Script - Check Current Undo Configuration and Advise Recommended Setup (Doc ID 1579035.1) APPLIES TO ...
- July 7th, 2019. Week 27th, Sunday
We laughed and kept syaing "see you soon", but inside we both knew we would never see each ...
- Linux设置免密登陆
生成秘钥 ssh-keygen -t rsa -C "XX@qq.com",然后一路回车就行 生成之后会在用户的根目录生成一个 ".ssh"的文件夹 进入&qu ...
- 【CentOS7】CentOS7各个版本镜像下载地址(转)
链接:https://www.cnblogs.com/caidingyu/p/10679422.html # CentOS7.6 下载地址 # CentOS-7-x86_64-DVD-18 ...
- AcWing 45. 之字形打印二叉树
地址 https://www.acwing.com/problem/content/description/43/ 题目描述请实现一个函数按照之字形顺序从上向下打印二叉树. 即第一行按照从左到右的顺序 ...
- Spring Batch基本概念
Spring batch主要有以下部分组成: JobRepository 用来注册job的容器 JobLauncher 用来启动Job的接口 Job ...