【SQL SERVER】语法复习
一、数据类型
截图来源:http://www.w3school.com.cn/sql/sql_datatypes.asp
二、数据表操作
1、创建数据表
USE [Test]
GO
/****** Object: Table [dbo].[UserInfo] Script Date: 2018/3/11 13:11:40 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[UserInfo](
[Id] [INT] IDENTITY(1,1) NOT NULL,
[UserName] [NVARCHAR](50) NOT NULL,
[Pass] [NVARCHAR](100) NOT NULL,
[Tel] [NVARCHAR](50) NULL,
[Email] [NVARCHAR](100) NULL,
[Type] [INT] NOT NULL,
[IsActive] [BIT] NOT NULL,
[CreateBy] [NVARCHAR](100) NOT NULL,
[CreateDate] [DATETIME] NOT NULL,
[UpdateBy] [NVARCHAR](100) NOT NULL,
[UpdateDate] [DATETIME] NOT NULL,
CONSTRAINT [PK_UserInfo] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
2、删除数据表
常用于删除临时表。
DROP TABLE dbo.UserInfo;
3、表字段修改
-- 新增字段
ALTER TABLE UserInfo ADD IsDel bit NOT NULL; -- 删除字段
ALTER TABLE UserInfo DROP COLUMN IsDel; -- 修改字段类型
ALTER TABLE UserInfo ALTER COLUMN Tel NVARCHAR(50) NOT NULL; -- 修改字段名
EXEC sp_rename 'UserInfo.Type', 'UserType', 'column';
三、增删改查
SQL Promat 简直是神器,为什么mySql没有相似的工具可用
1、新增
INSERT INTO dbo.UserInfo
(
UserName, Pass, Tel, Email, UserType, IsActive, CreateBy, CreateDate
)
VALUES
(
N'小可爱', N'', N'', N'xiaokeai@qq.com', 0, 1, N'admin', GETDATE ()
);
2、删除
-- 条件删除
DELETE dbo.UserInfo WHERE IsActive=0; -- 重置数据,自增主键重新计算
TRUNCATE TABLE dbo.UserInfo;
3、更新
UPDATE dbo.UserInfo SET UserName=N'大可爱' WHERE UserName = N'小可爱';
4、查询
-- 条件查询
SELECT * FROM dbo.UserInfo WHERE IsActive=1; -- 分组
SELECT UserName FROM dbo.UserInfo GROUP BY UserName; -- 统计
SELECT COUNT(1) FROM dbo.UserInfo; -- 排序,默认ASC,顺序
SELECT * FROM dbo.UserInfo ORDER BY Id DESC; /*
JOIN: 如果表中有至少一个匹配,则返回行
LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
FULL JOIN: 只要其中一个表中存在匹配,就返回行
INNRT JOIN: 左右表中都存在匹配,才返回行
*/
SELECT U.*
FROM dbo.UserInfo U
INNER JOIN dbo.Customer C ON C.UserId=U.Id
WHERE U.IsActive=1; /*
UNION: 删除结果集中重复的数据
UNION ALL: 返回所有结果集,包含重复数据
*/
SELECT * FROM dbo.UserInfo WHERE IsActive = 1
UNION
SELECT * FROM dbo.UserInfo WHERE IsActive = 0;
四、其他查询
1、排序有关
RANK():发生不持续的编号 例如数据值 1,2,2,3 发生的编号将是1,2,2,4
DENSE_RANK():发生持续的编号 例如数据值 1,2,2,3 发生的编号将是1,2,2,3
ROW_NUMBER():发生持续的编号(不重复) 例如数据值 1,2,2,3 发生的编号将是1,2,3,4
RANK()和DENSE_RANK()排序的差异就是排序存在并列的情况下。
-- 根据AID排列行号
SELECT
ROW_NUMBER() OVER (ORDER BY AID DESC) AS rowid
FROM bb;
2、分页有关
-- BETWEEN
SELECT tab.*
FROM
(
SELECT ROW_NUMBER () OVER (ORDER BY u.CreateDate DESC) Rn,
u.UserName
FROM dbo.UserInfo u
WHERE u.IsActive=1
) tab
WHERE tab.Rn BETWEEN 1 AND 10; -- OFFSET
SELECT *,
COUNT(1) OVER (PARTITION BY '') AS Total
FROM Customers
WHERE CustomerCity IN ('A-City','B-City')
ORDER BY CustomerID
OFFSET (@page-1)*@size ROWS
FETCH NEXT @size ROWS ONLY;
3、判断有关
-- CASE-WHEN判断
SELECT *
FROM dbo.UserInfo WITH (NOLOCK)
WHERE UserType=(CASE
WHEN @type=2 THEN
N'消费用户'
ELSE
N'流量用户'
END); -- Choose函数
SELECT
Id ,
UserName ,
CHOOSE(IsActive, N'正常', N'无效') AS State
FROM dbo.UserInfo; -- IIF
SELECT IIF(IsActive=1, N'正常', N'无效') State
FROM dbo.UserInfo; -- IF-ELSE
IF (0=0)
BEGIN
RETURN 1;
END;
ELSE
BEGIN
RETURN 0
END; -- EXISTS ,我理解为“是否存在”
UPDATE U
SET U.IsActive=0
FROM dbo.UserInfo AS U WITH (NOLOCK)
WHERE NOT EXISTS (
SELECT 1
FROM dbo.UserInfo WITH (NOLOCK)
WHERE U.Tel IS NOT NULL);
4、循环有关
-- WHILE
DECLARE @i INT;
SET @i=1;
WHILE @i<=DATEPART(MONTH,GETDATE())
BEGIN
SELECT 1
SET @i=@i+1;
END;
5、时间格式
-- 2006-05-16 10:57:47
Select CONVERT(varchar(100), GETDATE(), 20);
-- 2006-05-16
Select CONVERT(varchar(100), GETDATE(), 23);
-- 10:57:47
Select CONVERT(varchar(100), GETDATE(), 24); -- 今天的所有数据
select * from 表名 where DateDiff(dd,datetime类型字段,getdate())=0
-- 昨天的所有数据
select * from 表名 where DateDiff(dd,datetime类型字段,getdate())=1
-- 7天内的所有数据
select * from 表名 where DateDiff(dd,datetime类型字段,getdate())<=7
-- 30天内的所有数据
select * from 表名 where DateDiff(dd,datetime类型字段,getdate())<=30
-- 本月的所有数据
select * from 表名 where DateDiff(mm,datetime类型字段,getdate())=0
-- 本年的所有数据
select * from 表名 where DateDiff(yy,datetime类型字段,getdate())=0 -- 时间段查询
SELECT Id,CreatedDatetime,Status
FROM dbo.Order
WHERE Status = N'已收货'
AND CreatedDatetime >= N'2017-05-31'
AND CreatedDatetime <=N'2017-06-30'
AND (CreatedDatetime < N'2017-06-14' OR CreatedDatetime > N'2017-06-20')
ORDER BY CreatedDatetime;
6、统计有关
-- 去重统计
SELECT COUNT(DISTINCT V.PKID)
FROM #VendorTab V
WHERE V.Status=N'新建'
AND V.IsDelivery=0
-- 等同于
SELECT TOP 1 COUNT(1) OVER()
FROM #VendorTab V
WHERE V.Status=N'新建'
AND V.IsDelivery=0
GROUP BY V.PKID
五、其他
1、拼接多行数据为一行
SELECT STUFF(( SELECT ',' + Name
FROM toponline..T_CourseClass a
WHERE a.Id IN ( SELECT CourseClassId
FROM toponline..T_MyCourse m
WHERE m.UserId = u.Id
AND m.IsDel = 0 )
FOR
XML PATH('')
), 1, 1, '') ClassName
FROM topmember..T_User u
LEFT JOIN topmember..T_Person p ON p.Id = u.PersonId
WHERE u.IsDel = 0;
2、逗号拼接
SELECT STUFF((SELECT ','+VenderName
FROM dbo.VenderRebateVenderInfo
WHERE RuleId=VRI.PKID
FOR
XML PATH('')
),1,1,'') VenderNames,
ROW_NUMBER() OVER ( ORDER BY VRI.CreateTime DESC ) AS RowNum ,
COUNT(1) OVER ( ) AS TotalCount
FROM dbo.Vender AS VRI WITH ( NOLOCK )
WHERE 1 = 1
【SQL SERVER】语法复习的更多相关文章
- MySQL基本语法(一):和SQL Server语法的差异小归纳
html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...
- Access与SQL Server 语法差异
序号 简述 Access语法 SqlServer语法 Oracle语法 解决方案 01 系统时间 Now(),Date() GETDATE() SYSDATE GetSysTimeStr 02 连接字 ...
- ORACLE与SQL SERVER语法区别
一.数据类型 ORACLE与SQL SERVER在数据类型的对比如下: SQL SERVER ORACLE 数字类型 DECIMAL[(P[, S])] NUMBER[(P[, S])] NUMERI ...
- SQL SERVER 语法汇总
一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备 ...
- SQL Server 语法大全
SQL语句参考,包含Access.MySQL 以及 SQL Server 基础 创建数据库 CREATE DATABASE database-name 删除数据库 drop database dbna ...
- SQL Server语法入门
1.说明:增加.删除一个列 Alter table tablename add columnName col type alter table tablename drop columnName co ...
- sql基础语法复习(二)-- 分组,连接的使用
一.深入学习 group by group by ,分组,顾名思义,把数据按什么来分组,每一组都有什么特点. 1.我们先从最简单的开始: select count(*) from tb1 group ...
- SQL Server视图复习
视图的好处: 第一点:使用视图,可以定制用户数据,聚焦特定的数据. 第一点:使用视图,可以定制用户数据,聚焦特定的数据. 在实际过程中,公司有不同角色的工作人员,我们以销售公司为例的话,采购人员,可以 ...
- sql server 语法 MSDN
https://docs.microsoft.com/en-us/sql/t-sql/statements/create-view-transact-sql
- sql基础语法复习
约定:数据库名:test:表名:tb1,tb2,tb3…: 对象:数据库:database 表:table 列:column 索引:index 视图:view 存储过程:procedure 一.数据结 ...
随机推荐
- apk的php解析
<?php/****************************************************** * Android APK File Parser * Author: ...
- Nginx性能优化功能- Gzip压缩(大幅度提高页面加载速度)
Nginx开启Gzip压缩功能, 可以使网站的css.js .xml.html 文件在传输时进行压缩,提高访问速度, 进而优化Nginx性能! Web网站上的图片,视频等其它多媒体文件以及大文件,因 ...
- C字符串
C字符串 C中的字符串是以空字符('\0')结尾的一个char数组,基本的实现字符串的方法有:字符串常量,字符串数组,char数组,char指针.字符串使用广泛,如与用户交互等处理自然语言的情况.C为 ...
- [转]解决ssh登录后闲置时间过长而断开连接
本文转自: 转载自博客园wanghetao的博客 我们通过终端连接服务器时,当鼠标和键盘长时间不操作,服务器就会自动断开连接,我们还的需要重新连接,感觉很麻烦,总结一下解决此问题的方法 方法一 修改/ ...
- MongoDB中空间数据的存储和操作
本文使用官方C# Driver,实现在MongoDB中存储,查询空间数据(矢量) 空间数据的存储 本例中,从一个矢量文件(shapefile格式)中读取矢量要素空间信息以及属性表,并写入到MongoD ...
- 安卓开发笔记①:利用高德地图API进行定位、开发电子围栏、天气预报、轨迹记录、搜索周边(位置)
高德地图开发时需要导入的包在下面的网盘链接中:(由于高德地图api更新得太快,官网上最新的包使用起来没有之前的方便,所以以下提供最全面的原始包) 链接:http://pan.baidu.com/s/1 ...
- Java基础——网络编程(一)
本文主要记录网络编程的一些基础知识,学了前班部分,对专业术语有些蒙,但是,收货也是很多很多的.观察了自己计算机的进程,查找其他网络地址的IP,对互联网的层次关系有了更深一步的了解.下面多是概念的摘录, ...
- JVM调优的总结
堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内存限制:系统的可用物理内存限制.32位系统下,一般限制在1.5G~2G:64为操作 ...
- 消息推送SignalR简单实例
消息推送SignalR:一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信. 功能:当所连接的客户端变得可用时服务器代码可以立即向其推送内容,而不是让服务器等待客户端请 ...
- js中Date 方法
Date (对象) Date 对象能够使你获得相对于国际标准时间(格林威治标准时间,现在被称为 UTC-Universal Coordinated Time)或者是 Flash 播放器正运行的操作系统 ...