SQL常用语句和函数
从一个表中选取数据插入到另一个表中:
select column_name(s) into new_table_name from old_table_name --new_table_name表不必事先存在(复制旧表的架构和数据)
select * into table_new from table_old where 1=2 --只复制旧表架构
identity与select into合用,插入行号:
set identity_insert students on
insert students(id, name, age, city) values(10, 'jim', 18, 'newyank')
set identity_insert students off
--注意:一张表中只能有一列为identity,如果指定了自增列,又需要插入指定id的值,需要停止indentiy,执行后再开启 select identity(int,1,1) as rownumber, name, age, sex, city
into students_backup
from students
--注意:如果查询的列中有自增列,需要将其删除,或者屏蔽,因为一张表中只有一个identity字段。
在有identity列的插入时,需要返回当前行的identit的列值:scope_identity()函数
insert into dbo.tb_test2( NAME ) values ( '测试' )
select scope_identity()
返回架构范围内对象的数据库对象标识号:object_id()
--查询表是否存在
select object_id(N'students', N'u') --与以下语句等价
select id from sysobjects where name=N'Students' and type=N'U'
对已存在表进行操作:
1) 增加列:
alter table tablename add colum_name datatype
2) 修改列:
alter table dbo.tb_test alter column NAME text
注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
添加主键:
alter table tabname add primary key(col)
删除主键:
alter table tabname drop primary key(col)
添加唯一约束:
alter table dbo.Students add constraint UK_Stu_Name unique(Name)
删除唯一约束:
alter table dbo.Students drop constraint UK_Stu_Name
创建索引:
create [unique] index idxname on tabname(col….) --unique唯一索引,col1, col2, col3...多个列联合索引
删除索引:
drop index idxname
注:索引是不可更改的,想更改必须删除重新建。
创建视图:
create view viewname as select statement
删除视图:
drop view viewname
注:更新视图暂时没有直接方法,建议删除重建
union 运算符
union 运算符通过组合其他两个结果表(例如 table1 和 table2)并消去表中任何重复行而派生出一个结果表。当 all 随 union一起使用时(即 union all),不消除重复行。两种情况下,派生表的每一行不是来自 table1 就是来自table2。
except 运算符
except 运算符通过包括所有在 table1 中但不在 table2 中的行并消除所有重复行而派生出一个结果表。当 all 随 except 一起使用时 (except all),不消除重复行。
intersect 运算符
intersect 运算符通过只包括 table1 和 table2 中都有的行并消除所有重复行而派生出一个结果表。当 all 随 intersect 一起使用时 (intersect all),不消除重复行。
修改数据库的名称:
sp_renamedb 'old_name', 'new_name'
随机取出10条数据:
select top 10 * from tablename order by newid()
列出数据库里所有的表名:
select name from sysobjects where type='U' --U代表用户
列出表里的所有的列名:
select name from syscolumns where id=object_id('TableName')
选择从10到15的记录:
select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc
数据库分页查询:
declare @pageSize int --每页数量
declare @pageIndex int --页码
set @pageSize=10
set @pageIndex=5 --适应于SQL Server 2012以下的版本
select top @pageSize id from tb_test2
where id not in (select top (@pageIndex - 1) * @pageSize id from tb_test2) --row_number() over( order by id desc ),该关键字只有在SQL Server 2005版本以上才有
select * from (select row_number() over( order by id desc ) as rowNumber, * from tb_test2) temp
where rowNumber > (@pageIndex - 1) * @pageSize and rowNumber <= @pageIndex * @pageSize --SQL Server 2012以上版本才支持
select * from tb_test2
order by id
offset ((@pageIndex - 1) * @pageSize) rows
fetch next @pageSize rows only
按姓氏笔画排序:
select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as --从少到多
查询各科成绩最好的前三名,按课程号升序排列,同课程的成绩倒叙排列,加上排名
select CID, SID, Score, Place=(select count(Score) from dbo.SC b where b.CID=a.cid and b.Score>a.score)+1
from dbo.SC a
where Score in(select top 3 Score from dbo.SC where CID=a.CID order by Score desc)
order by a.CID asc, a.Score desc
结果:
查询各科的及格率
select CID, convert(varchar(50),100*Pass/(Pass+Fail),2)+'%' as 及格率 from (
select CID, sum(case when Score>=60 then 1 else 0 end) Pass,
sum(case when Score<60 then 1 else 0 end) Fail
from dbo.SC
group by dbo.SC.CID) T1
结果:
查询“英语”课程第三名的学生的成绩单
--查询所有英语成绩(会有并列可能)
select * from dbo.SC
where CID=(select CID from dbo.Course where CName='英语') --把成绩加入序号,直接获取序号为3的数据
select * from (
select SID, CID, Score, Place=(select count(distinct(Score)) from dbo.SC b
where CID=(select CID from dbo.Course where CName='英语') and b.Score>a.score)+1
from (
select SID, CID, Score from dbo.SC where CID=(select CID from dbo.Course where CName='英语') ) a
)c where c.Place=3
结果:
有多条重复数据时,只保留一条
delete from Btype_CustomColumns
where typeid in (select typeid from Btype_CustomColumns group by typeid having count(typeid) > 1)
and dbo.Btype_CustomColumns.ID not in (select min(dbo.Btype_CustomColumns.ID) from Btype_CustomColumns group by typeid having count(typeid)>1)
转换函数:convert()
说明:一般在时间类型(datetime, smalldatetime)与字符串类型(nchar, nvarchar, char, varchar)相互转换的时候才用到
tyle数字在转换时间时的含义如下:
------------------------------------------------------------------------------------------------------------
Style(2位表示年份) | Style(4位表示年份) | 输入输出格式
------------------------------------------------------------------------------------------------------------
0 | 100 | mon dd yyyy hh:miAM(或PM)
------------------------------------------------------------------------------------------------------------
1 | 101 美国 | mm/dd/yy
------------------------------------------------------------------------------------------------------------
2 | 102 ANSI | yy-mm-dd
------------------------------------------------------------------------------------------------------------
3 | 103 英法 | dd/mm/yy
------------------------------------------------------------------------------------------------------------
4 | 104 德国 | dd.mm.yy
------------------------------------------------------------------------------------------------------------
5 | 105 意大利 | dd-mm-yy
------------------------------------------------------------------------------------------------------------
6 | 106 | dd mon yy
------------------------------------------------------------------------------------------------------------
7 | 107 | mon dd,yy
------------------------------------------------------------------------------------------------------------
8 | 108 | hh:mm:ss
------------------------------------------------------------------------------------------------------------
9 | 109 | mon dd yyyy hh:mi:ss:mmmmAM(或PM)
------------------------------------------------------------------------------------------------------------
10 | 110 美国 | mm-dd-yy
------------------------------------------------------------------------------------------------------------
11 | 111 日本 | yy/mm/dd
------------------------------------------------------------------------------------------------------------
12 | 112 ISO | yymmdd
------------------------------------------------------------------------------------------------------------
13 | 113 欧洲默认值 | dd mon yyyy hh:mi:ss:mmm(24小时制)
------------------------------------------------------------------------------------------------------------
14 | 114 | hh:mi:ss:mmm(24小时制)
------------------------------------------------------------------------------------------------------------
20 | 120 ODBC 规范 | yyyy-mm-dd hh:mi:ss(24小时制)
------------------------------------------------------------------------------------------------------------
21 | 121 | yyyy-mm-dd hh:mi:ss:mmm(24小时制)
------------------------------------------------------------------------------------------------------------
1) 时间转换为指定形式
select convert(nvarchar(20), getdate(), 120)
select convert(nvarchar(100), getdate(), 109)
select convert(nvarchar(20), getdate(), 102)
select convert(nvarchar(100), getdate(), 113)
结果:
2) 转为XML格式
IF OBJECT_ID('Orders','U') IS NOT NULL
DROP TABLE Orders
CREATE TABLE Orders
(
ID bigint primary key not null,
ProductID int,
ProductName nvarchar(50),
Price float,
Scheme text,
Created datetime default(getdate())
) INSERT INTO Orders(ID,ProductID,ProductName,Price,Scheme)
VALUES(201405130001,101,'Card',10.899,'<xml><ProductID>101</ProductID><ProductName>Card</ProductName></xml>')
结果:
存储过程:
1) 每次执行都进行重新编译
--1、存储过程,重复编译
IF OBJECT_ID (N'PROC_SELECT_STUDENTS_WITH_RECOMPILE', N'P') IS NOT NULL
DROP procedure PROC_SELECT_STUDENTS_WITH_RECOMPILE;
GO
CREATE procedure PROC_SELECT_STUDENTS_WITH_RECOMPILE
with recompile --重复编译
AS
SELECT * FROM Students
GO
2) 加密存储过程
--2、查询存储过程,进行加密
IF OBJECT_ID (N'PROC_SELECT_STUDENTS_WITH_ENCRYPTION', N'P') IS NOT NULL
DROP procedure PROC_SELECT_STUDENTS_WITH_ENCRYPTION;
GO
CREATE procedure PROC_SELECT_STUDENTS_WITH_ENCRYPTION
with encryption --加密
AS
SELECT * FROM Students
GO
备份数据库:
backup database ttt to disk = 'F:\BaiduNetdiskDownload\t.bak'
还原数据库:
use master
restore database test_aa from disk = 'F:\BaiduNetdiskDownload\t.bak'
分离数据库:
use master
exec sp_detach_db @dbname=N'数据库名'
附加数据库:
exec sp_attach_db @dbname=N'数据库名',@filename1=N'.mdf的文件路径',@filename2=N'.ldf的文件路径'
参考链接:https://www.cnblogs.com/yank/p/3758107.html
SQL常用语句和函数的更多相关文章
- 【数据库】 SQL 常用语句
[数据库] SQL 常用语句 1.批量导入 INSERT INTO Table2(field1,field2,...) SELECT value1,value2,... FROMTable1 要求目标 ...
- 【数据库】 SQL 常用语句之系统语法
[数据库] SQL 常用语句之系统语法 1. 获取取数据库服务器上所有数据库的名字 SELECT name FROM master.dbo.sysdatabases 2. 获取取数据库服务器上所有非系 ...
- GJM :Sql 各种语句 以及函数 [转载]
版权声明:本文原创发表于 [请点击连接前往] ,未经作者同意必须保留此段声明!如有侵权请联系我删帖处理! 1.更改数据库的名称 2.表中有数据的情况下再添加列.删除列 3.在SQLServer 中各种 ...
- SQL各种语句、函数
1.更改数据库的名称 2.表中有数据的情况下再添加列.删除列 3.在SQLServer 中各种查询语句的使用示例 4.模糊查询的语句 5.排序语句.排序并查前三名的语句 聚合函数:sum,avg,ma ...
- SQL常用语句之数据库的创建、删除以及属性的修改-篇幅1
本篇文章主要总结了SQL Server 语句的使用和一些基础知识,因为目前我也正在学习,所以总结一下. 要使用数据库语句,首先就要知道数据库对象的结构: 通常情况下,如果不会引起混淆,可以直接使用对象 ...
- SQL常用语句,随时用随时更新
更多详细说明文档查询 http://www.postgres.cn/docs/9.5/infoschema-columns.html 1.1通过表名查询表的属性 SELECT * FROM sys.s ...
- SQL常用语句(二)
--语 句 功 能--数据操作SELECT --从数据库表中检索数据行和列INSERT --向数据库表添加新数据行DELETE --从数据库表中删除数据行UPDATE --更新数据库表中的数据 --数 ...
- oracle 时间日期常用语句及函数
记录常用时间函数以及处理时间的sql语句 (1)获得系统时间select sysdate from dual; (2)设置时间的格式select to_char(sysdate,'yyyy/MM/dd ...
- ORACLE数据库 常用命令和Sql常用语句
ORACLE 账号相关 如何获取表及权限 1.COPY表空间backup scottexp登录管理员账号system2.创建用户 create user han identified(认证) by m ...
随机推荐
- Tensorflow中one_hot() 函数用法
官网默认定义如下: one_hot(indices, depth, on_value=None, off_value=None, axis=None, dtype=None, name=None) 该 ...
- 安装proxmox VE(PVE)教程
proxmox VE,又叫PVE,全称是 Proxmox Virtual Environment 官网地址:https://www.proxmox.com/en/ 1)在官网下载PVE最新镜像,笔者下 ...
- Redis09——事务(悲观锁、乐观锁)
事务 定义: Redis事务是一个单独的隔离操作 ①事务中所有的命令都会被序列化.按照顺序执行 ②事务在执行过程中不会被其他客户端发送来的命令请求打断 作用: 串联多个命令防止别的命令插队 multi ...
- java下载和环境变量配置
初学java,以前没有接触过这方面内容,所以简要记录一下我2个月的学习流程. 首先,我在慕课上学习java的基础,浙江大学翁恺老师的课程. 下载ECLIPSE-java 进入官网:https://ww ...
- VIM键盘映射 (Map)
http://www.pythonclub.org/linux/vim/map VIM键盘映射 (Map) 设置键盘映射 使用:map命令,可以将键盘上的某个按键与Vim的命令绑定起来.例如使用以下命 ...
- 第四十三篇 入门机器学习——Numpy的基本操作——Fancy Indexing
No.1. 通过索引快速访问向量中的多个元素 No.2. 用索引对应的元素快速生成一个矩阵 No.3. 通过索引从矩阵中快速获取多个元素 No.4. 获取矩阵中感兴趣的行或感兴趣的列,重新组成矩阵 N ...
- 这是一篇通过open live writer发布的博文
这两天零零总总的尝试了两三款写博客的软件,总感觉不怎么上手,最后还是使用博客园官方推荐的工具写博吧,简单方便,目前的功能基本都有,尤其是粘贴图片特别方便,回想之前的几篇博文,真是一种煎熬哈哈(对于我这 ...
- 链接测试工具:Xenu
Xenu 是一款深受业界好评,并被广泛使用的死链接检测工具.时常检测网站并排除死链接,对网站的 SEO(搜索引擎优化) 非常重要,因为大量死链接存在会降低用户和搜索引擎对网站的信任. 最大支持100线 ...
- pikaqiu练习平台(XSS(跨站脚本))
XSS(跨站脚本)概述 Cross-Site Scripting 简称为“CSS”,为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS.一般XSS可以分为如下几种常见类型: ...
- 【游戏体验】Sift Heads World Act 1(暗杀行动1)
>>>点此处可试玩无敌版<<< 注意,本游戏含有少量暴力元素,13岁以下的儿童切勿尝试本款游戏 非常良心的火柴人游戏,值得一玩 个人测评 游戏性 8/10 音乐 9 ...