sql知识的小结(一)
来源:互联网 发布:安徽航天网络发票v2.0 编辑:程序博客网 时间:2024/05/22 06:26
1.数据库的备份
1)新建数据库操作
对于操作的数据库——》右击“编写数据库脚本”--->"create 到(c)"——》“新建查询编辑器窗口”
2)在创建新的数据库后,"任务"-》“生成脚本”,这一步操作是为了在已生成的数据库中创建新的表、导入存储过程,注意导入的只是数据库的结构
3)导入数据到表中
在源数据库上右击任务-》导入数据
2.将表1的数据放到表2
--允许将显式值插入表的标识列中 ON-允许 OFF-不允许
set identity_insert 表2 ON--打开
insert into [表2所在的数据库].dbo.表2(表2中需要加数据的字段)
select 表1中的字段 from [表1所在的数据库].dbo.表1
set identity_insert 表2 OFF--关闭
3.sql复制表结构,但是不复制数据
select * into 数据库名.dbo.新表名 from 数据库名.dbo.原表名 where 1=0
4.复制表结构和表数据
1)如果新表不存在
select * into 数据库名.dbo.新表名 from 数据库名.dbo.原表名
2)如果新表存在
5.数据库原有ID字段,是自增列的,后来把数据全删除后,想让ID自增列从1开始算起
dbcc checkident('表名',reseed,0)---ID自增列从1开始算起
6.备份表的一部分列(不写*而写出列的列表)
select 列名1,列名2,列名3 into 数据库名.dbo.新表名 from 数据库名.dbo.原表名
7.备份表的一部分行(加WHERE条件)
select * into 数据库名.dbo.新表名 from 数据库名.dbo.原表名 where id<10
8.在存储过程中,如果某个字段出错了,可以采用“新建查询”,打印出当前的变量
eg.DECLARE @tbGetFields nvarchar(max) = N'*';
print @tbGetFields;
9.从项目表中读出开发人员
eg.
SELECT TOP (200) 项目_编号, 项目_名称,
(select Top 1 负责人= stuff((select ',' + (select top 1 姓名 from 员工表 where 员工编号= 任务_负责人) from 任务表 t
where t.负责人 = 负责人 and
charindex(','+ltrim(项目编号)+',',','+convert( nvarchar(50),项目_编号)+',')>0
for xml path(''))
, 1 , 1 , '')
from 任务表 ) as aaaaa
FROM 项目表
convert( nvarchar(50),要转的字段)
select (select SUM(任务_所占百分比) from 任务表 where ((select top 1 状态_类型 from 任务状态表 where 状态_任务编号 = 任务_编号 order by 状态_编号 desc) = 3 ) and (任务_项目编号 = 项目_编号)) as 进度 from 项目表
12.存储过程中的变量
#变量类型为nvarchar(50),则放在字符串中,用“set where += And 对应的字段名 = '+@变量名+'';”
#变量判断是否为空,变量类型为nvarchar(50):“@变量名<>''”
#判断为并且用“and”
13.临时表的建立
1.#判断临时表是否存在
IF OBJECT_ID('tempdb..#临时表') is not null
drop table #临时表
#向临时表中加字段(适合临时表中的字段是从表中读取的)
create table #临时表(公司名称2 nvarchar(150),合同号21 int,合同号22 int)
2.#将客户订单的数据加到临时表中
Select * into #临时表 FROM 客户订单
3.#读取临时表中的数据
Select * FROM #客户订单Temp;
14数据库的建表中
字段中需要添加时间:1.基础表(比如个人信息)2.需要不断向其中添加数据的表(比如商品的出入库)
15.charindex函数
CHARINDEX函数返回字符或者字符串在另一个字符串中的起始位置
CHARINDEX ( expression1 , expression2 [ , start_location ] )
说明:
Expression1是要到expression2中寻找的字符中,start_location是CHARINDEX函数开始在
expression2中找expression1的位置。
CHARINDEX函数返回一个整数,返回的整数是要找的字符串在被找的字符串中的位置
16.用SQL语句备份一张数据表 :
select * into 备份表_backup from 备份表
17.用sql语句查询某天的数据条数
SELECT COUNT(*) AS Expr1
FROM GongHai
WHERE (ghk_addtime >= '2017-05-05') AND (ghk_addtime < '2017-05-06')
18.数据库中的MD5加密:SUBSTRING(sys.fn_VarBinToHexStr(hashbytes('MD5', 变量名)),3,32)
19.根据部门编号读取包含的所有职位,函数STUFF()可以用来组合字符串,charindex()用于依次读取到数据
select *,
(select top 1 配置_职位名称 = STUFF((select ',' + 配置_职位名称 from 配置_职位
where
charindex(','+ltrim(配置_职位所属部门)+',',','+convert( nvarchar(50),配置_部门编号)+',')
>0
for xml path('')),1,1,'') from 配置_职位)
from 配置_部门
20.读取重复项,根据重复项判断重复
select 重复项 from 表名 group by 重复项 having count(重复项) > 1
21.联系人和联系电话重复,并把重复的数据留一条,其他的状态更新为1
----sql中循环9次
declare @i int=0;
while(@i<9)
begin
循环的语句
set @i+=1;
end
---更新字段
UPDATE 需要更新的表名 set 状态 = 1,时间=GETDATE(), 错误原因='联系人和联系电话重复' where 表名_ID in(
--重复项的读取
select max(表名_ID) from 表1 as h1
where (select COUNT(*) from 表1 as h2 where h2.重复字段1=h1.重复字段1 and h2.重复字段
2=h1.重复字段2 )>1
and (错误状态 = 0) ---排除数据在错误表中的
group by 重复字段1,重复字段2)---重复项分组
22.程序员是做功能,删除数据是不行的,除非确定是测试数据
23.#读取某个字段上的数据,呈字符串显示,如“1,2,3”
select stuff((select ','+ 学校 from 表名 t where t.表名_编号 = 表名_编号 group by 学校 for xml path('')) , 1 , 1 , '') as 校区;
24.#sql中charindex的用法:
charindex(','+ltrim(查询的值)+',',','+convert( nvarchar(50),查询的数值组)+',')>0
25.#sql拼接字符串的用法:
SELECT
STUFF
(
(
SELECT
',' + --分隔符
KeyID --查询字段
FROM #tmp --查询数据表
WITH(NOLOCK)
WHERE 1=1 --查询条件
FOR XML PATH('')
),
1,-- 0:NULL 1:原样输出 2++:首位添加分隔符
1,-- N:截取 N - Len 的字符
''-- 在字符串首尾添加的符号
)
26.#SQL字符串截取(SubString)的用法:
SubString(需要截取的字符串,截取指定的位置,截取的子字符串长度)
#SQL中DATENAME函数的用法:
DATENAME(param,date);
param是指定要返回日期部分的参数
date就是指定的日期
27.sql自动备份的教程
http://jingyan.baidu.com/article/6525d4b132ea10ac7c2e947c.html
28.查询表中下月生日的人:
比如生日字段是 DOB, 表名 TABLE ,那就是
SELECT * FROM TABLE WHERE Datediff(month,getdate(),DOB) = 1 ; 这个是 SQL Server 的
SELECT * FROM TABLE WHERE EXTRACT(MONTH FROM DOB) + 1 = EXTRACT(MONTH FROM CURDATE) ; 这个是 mysql 的
29.SQL Server中截取字符串常用函数
1)LEFT ( character_expression , integer_expression )
函数说明:LEFT ( '源字符串' , '要截取最左边的字符数' )
返回从字符串左边开始指定个数的字符
select LEFT('SQL_Server_2008',4 );
返回结果:SQL_
2)RIGHT ( character_expression , integer_expression )
函数说明:RIGHT ( '源字符串' , '要截取最右边的字符数' )
返回字符串中从右边开始指定个数的 integer_expression 字符
select RIGHT('SQL_Server_2008',4 );
返回结果:2008
3)SUBSTRING ( character_expression , start , length )
函数说明:SUBSTRING ( '源字符串' , '截取起始位置(含该位置上的字符)' , '截取长度' )
返回字符、binary、text 或 image 表达式的一部分
select SUBSTRING('SQL_Server_2008',5 ,6);
返回结果:Server
30. 名称 ****不是有效的标识符 sql
解决方法:
http://blog.csdn.net/xb12369/article/details/8202703
40.数据库、mysql的学习网站
http://www.yiibai.com/
50.SQL 指的是Structured Query Language(结构化查询语句)
用SQL从 "Persons" 表中选取 "FirstName" 列的值以 "a" 开头的所有记录:
SELECT * FROM Persons WHERE FirstName LIKE 'a%'
51.读取某个数据库中所有的表名称
SELECT Name FROM SysObjects Where XType='U' ORDER BY Name
52.读取某个数据库中所有的存储过程名称
SELECT Name FROM SysObjects Where XType='P' ORDER BY Name
53.表1和表2是没有关联的,表1中的字段有字段1、字段2、字段3,表2中的字段有字段1、字段2,用null来补足表
select 字段1,字段2,字段3 from 表1
UNION ALL
SELECT 字段1,字段2,null FROM 表2
54.year(时间字段)=2015:某一年的记录,按照每月来统计
----根据选择的年份统计出该年下每个月的销售额
select month(sdate) as 月份,SUM(money) as 销售额 from sale
where year(sdate)=2015 group by month(sdate)
55.读取某个表中的所有字段:
Select Name FROM SysColumns Where id=Object_Id('表名')
56.sql数据库中的循环:
declare @sum int=4;---总的循环次数
declare @i int;---循环的变量
set @i=0
while @i<@sum---循环条件
begin
print @i;
set @i=@i+1
end
57.sql delete删除表中的最后一条语句为:
delete from table_Name where Id like (select top 1 Id from table_Name order by Id desc)
思路为:查找倒序的第一个,即上面代码中的子sql语句select top 1 Id from table_Name order by Id desc
58.---sql语句查询某个id值是否在字符串中
方法1:select 查询条件 from 表名 where (CHARINDEX(',id值,', ','+字段名称+',') > 0)
方法2:select 查询条件 from 表名 where ','+字段名称+',' like '%,id值,%'
59.SQLServer数据库和Access数据库的区别
SQLServer数据库比Access数据库更完整一些 功能更强大,更复杂,所以一般大型的公司都用SQLServer数据库,而中小型公司都用SQLServer数据库
1)新建数据库操作
对于操作的数据库——》右击“编写数据库脚本”--->"create 到(c)"——》“新建查询编辑器窗口”
2)在创建新的数据库后,"任务"-》“生成脚本”,这一步操作是为了在已生成的数据库中创建新的表、导入存储过程,注意导入的只是数据库的结构
3)导入数据到表中
在源数据库上右击任务-》导入数据
2.将表1的数据放到表2
--允许将显式值插入表的标识列中 ON-允许 OFF-不允许
set identity_insert 表2 ON--打开
insert into [表2所在的数据库].dbo.表2(表2中需要加数据的字段)
select 表1中的字段 from [表1所在的数据库].dbo.表1
set identity_insert 表2 OFF--关闭
3.sql复制表结构,但是不复制数据
select * into 数据库名.dbo.新表名 from 数据库名.dbo.原表名 where 1=0
4.复制表结构和表数据
1)如果新表不存在
select * into 数据库名.dbo.新表名 from 数据库名.dbo.原表名
2)如果新表存在
insert into 数据库名.dbo.新表名 select * from 数据库名.dbo.原表名 ---表结构一致
5.数据库原有ID字段,是自增列的,后来把数据全删除后,想让ID自增列从1开始算起
dbcc checkident('表名',reseed,0)---ID自增列从1开始算起
6.备份表的一部分列(不写*而写出列的列表)
select 列名1,列名2,列名3 into 数据库名.dbo.新表名 from 数据库名.dbo.原表名
7.备份表的一部分行(加WHERE条件)
select * into 数据库名.dbo.新表名 from 数据库名.dbo.原表名 where id<10
8.在存储过程中,如果某个字段出错了,可以采用“新建查询”,打印出当前的变量
eg.DECLARE @tbGetFields nvarchar(max) = N'*';
print @tbGetFields;
9.从项目表中读出开发人员
eg.
SELECT TOP (200) 项目_编号, 项目_名称,
(select Top 1 负责人= stuff((select ',' + (select top 1 姓名 from 员工表 where 员工编号= 任务_负责人) from 任务表 t
where t.负责人 = 负责人 and
charindex(','+ltrim(项目编号)+',',','+convert( nvarchar(50),项目_编号)+',')>0
for xml path(''))
, 1 , 1 , '')
from 任务表 ) as aaaaa
FROM 项目表
convert( nvarchar(50),要转的字段)
select (select SUM(任务_所占百分比) from 任务表 where ((select top 1 状态_类型 from 任务状态表 where 状态_任务编号 = 任务_编号 order by 状态_编号 desc) = 3 ) and (任务_项目编号 = 项目_编号)) as 进度 from 项目表
12.存储过程中的变量
#变量类型为nvarchar(50),则放在字符串中,用“set where += And 对应的字段名 = '+@变量名+'';”
#变量判断是否为空,变量类型为nvarchar(50):“@变量名<>''”
#判断为并且用“and”
13.临时表的建立
1.#判断临时表是否存在
IF OBJECT_ID('tempdb..#临时表') is not null
drop table #临时表
#向临时表中加字段(适合临时表中的字段是从表中读取的)
create table #临时表(公司名称2 nvarchar(150),合同号21 int,合同号22 int)
2.#将客户订单的数据加到临时表中
Select * into #临时表 FROM 客户订单
3.#读取临时表中的数据
Select * FROM #客户订单Temp;
14数据库的建表中
字段中需要添加时间:1.基础表(比如个人信息)2.需要不断向其中添加数据的表(比如商品的出入库)
15.charindex函数
CHARINDEX函数返回字符或者字符串在另一个字符串中的起始位置
CHARINDEX ( expression1 , expression2 [ , start_location ] )
说明:
Expression1是要到expression2中寻找的字符中,start_location是CHARINDEX函数开始在
expression2中找expression1的位置。
CHARINDEX函数返回一个整数,返回的整数是要找的字符串在被找的字符串中的位置
16.用SQL语句备份一张数据表 :
select * into 备份表_backup from 备份表
17.用sql语句查询某天的数据条数
SELECT COUNT(*) AS Expr1
FROM GongHai
WHERE (ghk_addtime >= '2017-05-05') AND (ghk_addtime < '2017-05-06')
18.数据库中的MD5加密:SUBSTRING(sys.fn_VarBinToHexStr(hashbytes('MD5', 变量名)),3,32)
19.根据部门编号读取包含的所有职位,函数STUFF()可以用来组合字符串,charindex()用于依次读取到数据
select *,
(select top 1 配置_职位名称 = STUFF((select ',' + 配置_职位名称 from 配置_职位
where
charindex(','+ltrim(配置_职位所属部门)+',',','+convert( nvarchar(50),配置_部门编号)+',')
>0
for xml path('')),1,1,'') from 配置_职位)
from 配置_部门
20.读取重复项,根据重复项判断重复
select 重复项 from 表名 group by 重复项 having count(重复项) > 1
21.联系人和联系电话重复,并把重复的数据留一条,其他的状态更新为1
----sql中循环9次
declare @i int=0;
while(@i<9)
begin
循环的语句
set @i+=1;
end
---更新字段
UPDATE 需要更新的表名 set 状态 = 1,时间=GETDATE(), 错误原因='联系人和联系电话重复' where 表名_ID in(
--重复项的读取
select max(表名_ID) from 表1 as h1
where (select COUNT(*) from 表1 as h2 where h2.重复字段1=h1.重复字段1 and h2.重复字段
2=h1.重复字段2 )>1
and (错误状态 = 0) ---排除数据在错误表中的
group by 重复字段1,重复字段2)---重复项分组
22.程序员是做功能,删除数据是不行的,除非确定是测试数据
23.#读取某个字段上的数据,呈字符串显示,如“1,2,3”
select stuff((select ','+ 学校 from 表名 t where t.表名_编号 = 表名_编号 group by 学校 for xml path('')) , 1 , 1 , '') as 校区;
24.#sql中charindex的用法:
charindex(','+ltrim(查询的值)+',',','+convert( nvarchar(50),查询的数值组)+',')>0
25.#sql拼接字符串的用法:
SELECT
STUFF
(
(
SELECT
',' + --分隔符
KeyID --查询字段
FROM #tmp --查询数据表
WITH(NOLOCK)
WHERE 1=1 --查询条件
FOR XML PATH('')
),
1,-- 0:NULL 1:原样输出 2++:首位添加分隔符
1,-- N:截取 N - Len 的字符
''-- 在字符串首尾添加的符号
)
26.#SQL字符串截取(SubString)的用法:
SubString(需要截取的字符串,截取指定的位置,截取的子字符串长度)
#SQL中DATENAME函数的用法:
DATENAME(param,date);
param是指定要返回日期部分的参数
date就是指定的日期
27.sql自动备份的教程
http://jingyan.baidu.com/article/6525d4b132ea10ac7c2e947c.html
28.查询表中下月生日的人:
比如生日字段是 DOB, 表名 TABLE ,那就是
SELECT * FROM TABLE WHERE Datediff(month,getdate(),DOB) = 1 ; 这个是 SQL Server 的
SELECT * FROM TABLE WHERE EXTRACT(MONTH FROM DOB) + 1 = EXTRACT(MONTH FROM CURDATE) ; 这个是 mysql 的
29.SQL Server中截取字符串常用函数
1)LEFT ( character_expression , integer_expression )
函数说明:LEFT ( '源字符串' , '要截取最左边的字符数' )
返回从字符串左边开始指定个数的字符
select LEFT('SQL_Server_2008',4 );
返回结果:SQL_
2)RIGHT ( character_expression , integer_expression )
函数说明:RIGHT ( '源字符串' , '要截取最右边的字符数' )
返回字符串中从右边开始指定个数的 integer_expression 字符
select RIGHT('SQL_Server_2008',4 );
返回结果:2008
3)SUBSTRING ( character_expression , start , length )
函数说明:SUBSTRING ( '源字符串' , '截取起始位置(含该位置上的字符)' , '截取长度' )
返回字符、binary、text 或 image 表达式的一部分
select SUBSTRING('SQL_Server_2008',5 ,6);
返回结果:Server
30. 名称 ****不是有效的标识符 sql
解决方法:
http://blog.csdn.net/xb12369/article/details/8202703
40.数据库、mysql的学习网站
http://www.yiibai.com/
50.SQL 指的是Structured Query Language(结构化查询语句)
用SQL从 "Persons" 表中选取 "FirstName" 列的值以 "a" 开头的所有记录:
SELECT * FROM Persons WHERE FirstName LIKE 'a%'
51.读取某个数据库中所有的表名称
SELECT Name FROM SysObjects Where XType='U' ORDER BY Name
52.读取某个数据库中所有的存储过程名称
SELECT Name FROM SysObjects Where XType='P' ORDER BY Name
53.表1和表2是没有关联的,表1中的字段有字段1、字段2、字段3,表2中的字段有字段1、字段2,用null来补足表
select 字段1,字段2,字段3 from 表1
UNION ALL
SELECT 字段1,字段2,null FROM 表2
54.year(时间字段)=2015:某一年的记录,按照每月来统计
----根据选择的年份统计出该年下每个月的销售额
select month(sdate) as 月份,SUM(money) as 销售额 from sale
where year(sdate)=2015 group by month(sdate)
55.读取某个表中的所有字段:
Select Name FROM SysColumns Where id=Object_Id('表名')
56.sql数据库中的循环:
declare @sum int=4;---总的循环次数
declare @i int;---循环的变量
set @i=0
while @i<@sum---循环条件
begin
print @i;
set @i=@i+1
end
57.sql delete删除表中的最后一条语句为:
delete from table_Name where Id like (select top 1 Id from table_Name order by Id desc)
思路为:查找倒序的第一个,即上面代码中的子sql语句select top 1 Id from table_Name order by Id desc
58.---sql语句查询某个id值是否在字符串中
方法1:select 查询条件 from 表名 where (CHARINDEX(',id值,', ','+字段名称+',') > 0)
方法2:select 查询条件 from 表名 where ','+字段名称+',' like '%,id值,%'
59.SQLServer数据库和Access数据库的区别
SQLServer数据库比Access数据库更完整一些 功能更强大,更复杂,所以一般大型的公司都用SQLServer数据库,而中小型公司都用SQLServer数据库
Access是一种桌面数据库,只适合数据量少的应用,在处理少量数据和单机访问的数据库时是很好的,效率也很高。但是它的同时访问客户端不能多于4个。 access数据库有一定的极限,如果数据达到100M左右,很容易造成服务器iis假死,或者消耗掉服务器的内存导致服务器崩溃。
SQL Server是基于服务器端的中型的数据库,可以适合大容量数据的应用,在功能上管理上也要比Access要强得多。在处理海量数据的效率,后台开发的灵活性,可扩展性等方面强大。因为现在数据库都使用标准的SQL语言对数据库进行管理,所以如果是标准SQL语言,两者基本上都可以通用的。SQL Server还有更多的扩展,可以用存储过程,数据库大小无极限限制。
对过去用过的sql的一个小结,可能会存在某些问题,请大家帮忙指正。
阅读全文
0 0
- sql知识的小结(一)
- js 知识小结(一)
- OC知识小结(一)
- SQL小结(一)
- 知识小结(PL/SQL)
- 知识小结(SQL SERVER)
- sql知识小结
- IO流知识小结(一)
- 学生信息管理系统--知识小结(一)
- React.js学习知识小结(一)
- Linux系统知识小结(一)
- C语言知识小结(一)
- 多线程知识小结(一)
- C#知识小结一
- 线程知识小结一
- SQL 知识总结(一)
- SQL语言学习小结(一)
- MyBatis动态sql小结(一)
- opengl笔记1
- 高并发大数据相关面试题
- iOS 构建版本失效
- Android——仿美团商品详情页折叠效果
- ros中的map_server package分析
- sql知识的小结(一)
- 我的名字叫马克杨
- mybatis 特殊符号转义笔记
- Android QQ SDK分享功能接入
- 准确率(accuracy)、精确率(precision)、召回率(recall)
- 《java高并发程序设计》读书笔记(2)
- Android中view和viewGroup的区别
- 倾情大奉送--Spark入门实战系列
- 用两个栈实现队列