sqlsever 约束相关语句
--1、添加外键约束
ALTER TABLE Product ADD CONSTRAINT FK_Product_Category FOREIGN KEY(CategoryId) REFERENCES Category(CatId)
--给delflag添加默认值约束
--ALTER TABLE [dbo].[UserInfo] ADD CONSTRAINT DF_UserInfo_DelFlag default(0) for DelFlag
--ALTER TABLE dbo.UserInfo DROP CONSTRAINT [DF_UserInfo_DelFlag]
--ALTER TABLE dbo.UserInfo DROP COLUMN DelFlag
--ALTER TABLE dbo.UserInfo ALTER COLUMN [Address] nvarchar(64) null
--2、去重操作
--distinct只能紧跟SELECT后面,而且是对后面的所有的列都进行去重复操作;
demo:SELECT DISTINCT Title,MiddleName from dbo.Student order by Title,MiddleName;
这个案例去重复是对Title,MiddleName两列中所有的重复值进行去重,但是Tittle列中的重复值依然存在,要对Title列进行去重必须使用下面的demo
demo:SELECT DISTINCT Title from dbo.Student order by Title;
--3、多条件过滤
--not 非 or 或 and 且
--优先级(not>and>or)
--not 在sql语句中可以是!=或者<>
demo:SELECT * FROM dbo.Product WHERE ProId > 2 AND ProName<>'洗发露' OR CountNumber =100
--4、区间查询
SELECT * FROM Product WHERE ProId between 2 and 4;
--5、模糊查询
demo:SELECT * FROM Customer WHERE FirstName LIKE '_o%';
WHERE CompanyName like '%' '%';--两个单引号代表一个单引号
WHERE CompanyName like '%[0-9]%';--公司姓名中包含0-9数字的查询出来
WHERE CompanyName like '%[[]%';匹配公司名字中包含[的公司
demo:匹配名字中第二个字母是O的数据
--6、对于sql中的空值处理
--查询出ProName中为空的列
SELECT * FROM Product WHERE ProName IS null;
--7、group by 分组介绍
SELECT --第三步:此时只能把分组的信息给查询出来
TITLE,
COUNT(*)
FROM--第一步:找到这个表
SalesLt.Customer
group by --第二步:对这个表进行分组
Title;
--只要用了GROUP BY 进行分组 SELECT后面只能跟group by后面的字段或者是聚合函数;
--8、类型转换
-- Convert Cast
SELECT CONVERT(nvarchar(32),ProId)+ProName FROM Product;
SELECT CAST(ProId AS nvarchar(32))+ProName FROM Product;
--9、日期函数
SELECT GETDATE();
--dataadd(day/month/year,个数,日期)
SELECT DATEADD(day,1,'2015-3-1')
--DATEDIFF()
SELECT DATEDIFF(MONTH,'2015-3-1','2015-5-6')
--DATEPART()
SELECT DATEPART(day,'2014-4-3');
SELECT year('2014-4-3');
--10、字符串函数
SELECT left('123456',4);
SELECT right('123456',4);
SELECT len('1234');
SELECT datalength(N'1234');--8
SELECT datalength('1234');--4
SELECT LTRIM(' 123 ');--去掉左边空格
SELECT RTRIM(' 123 ');--去掉右边的空格
--11、demo分组函数的使用
sql代码:=======================================================
--CREATE TABLE [CallRecords]
--(
-- [Id] [int] NOT NULL identity(1,1),
-- [CallerNumber] [nvarchar](50), --三位数字,呼叫中心员工编号(工号)
-- [TelNum] [varchar](50),
-- [StartDateTime] [datetime] NULL,
-- [EndDateTime] [datetime] NULL --结束时间要大于开始时间,默认当前时间
--)
----主键约束
--alter table [CallRecords]
--add constraint PK_CallRecords primary key(id)
----检查约束
--alter table [CallRecords]
--add constraint CK_CallRecords check(CallerNumber like '[0-9][0-9][0-9]')
--alter table [CallRecords]
--add constraint CK_CallRecords_EndDateTime check(EndDateTime > StartDateTime)
----默认约束
--alter table [CallRecords]
--add constraint DF_CallRecords default(getdate()) for EndDateTime
--INSERT [dbo].[CallRecords] ([CallerNumber], [TelNum], [StartDateTime], [EndDateTime]) VALUES ('001', '0208888888', CAST(0x00009DAF00A4CB80 AS DateTime), CAST(0x00009DAF00A62E94 AS DateTime));
--INSERT [dbo].[CallRecords] ([CallerNumber], [TelNum], [StartDateTime], [EndDateTime]) VALUES ('001', '0208888888', CAST(0x00009DB000D63BC0 AS DateTime), CAST(0x00009DB000D68DC8 AS DateTime));
--INSERT [dbo].[CallRecords] ([CallerNumber], [TelNum], [StartDateTime], [EndDateTime]) VALUES ('001', '89898989', CAST(0x00009DB000E85C60 AS DateTime), CAST(0x00009DB000E92F50 AS DateTime));
--INSERT [dbo].[CallRecords] ([CallerNumber], [TelNum], [StartDateTime], [EndDateTime]) VALUES ('002', '98987676', CAST(0x00009DB2015BB7A0 AS DateTime), CAST(0x00009DB2015C4DA0 AS DateTime));
--INSERT [dbo].[CallRecords] ([CallerNumber], [TelNum], [StartDateTime], [EndDateTime]) VALUES ('002', '02188839389', CAST(0x00009DA4014C9C70 AS DateTime), CAST(0x00009DA4014E0308 AS DateTime));
--INSERT [dbo].[CallRecords] ([CallerNumber], [TelNum], [StartDateTime], [EndDateTime]) VALUES ('001', '767676766', CAST(0x00009DB400DAA0C0 AS DateTime), CAST(0x00009DB400DD5FE0 AS DateTime));
--INSERT [dbo].[CallRecords] ([CallerNumber], [TelNum], [StartDateTime], [EndDateTime]) VALUES ('003', '0227864656', CAST(0x00009DB200B9AB40 AS DateTime), CAST(0x00009DB200B9FC1C AS DateTime));
--INSERT [dbo].[CallRecords] ([CallerNumber], [TelNum], [StartDateTime], [EndDateTime]) VALUES ('003', '676765777', CAST(0x00009DB8014042B8 AS DateTime), CAST(0x00009DB80141804C AS DateTime));
--INSERT [dbo].[CallRecords] ([CallerNumber], [TelNum], [StartDateTime], [EndDateTime]) VALUES ('001', '89977653', CAST(0x00009D9A00FB9898 AS DateTime), CAST(0x00009D9A00FE6118 AS DateTime));
--INSERT [dbo].[CallRecords] ([CallerNumber], [TelNum], [StartDateTime], [EndDateTime]) VALUES ('004', '400400400', CAST(0x00009D9A00FB9898 AS DateTime), CAST(0x00009D9A00FE6118 AS DateTime));
===============================================================
SELECT *
FROM CallRecords;
----查询通话时间最长的5条记录
SELECT TOP 5 Id,
CallerNumber,
DATEDIFF(second, StartDateTime, EndDateTime) AS 通话最长时间
FROM CallRecords
ORDER BY 通话最长时间 DESC;
----查询以0开头的通话总时,以秒为计算单位
SELECT SUM(DATEDIFF(SECOND, StartDateTime, EndDateTime))
FROM CallRecords
WHERE TelNum LIKE '0%';
----查询2010年7月通话总时长最多的前两个呼叫员的编号
SELECT TOP 2 CallerNumber,
SUM(DATEDIFF(second, StartDateTime, EndDateTime)) AS 时长,
COUNT(*) AS 电话数
FROM CallRecords
WHERE DATEDIFF(month, '2010-7-1', StartDateTime) = 0
GROUP BY CallerNumber
ORDER BY 时长 DESC;
----查询2010年7月拨打电话次数最多的前两个呼叫员的编号
SELECT TOP 2 CallerNumber,
SUM(DATEDIFF(second, StartDateTime, EndDateTime)) AS 时长,
COUNT(*) AS 电话数
FROM CallRecords
WHERE DATEDIFF(month, '2010-7-1', StartDateTime) = 0
GROUP BY CallerNumber
ORDER BY 电话数 DESC;
--rownumber分页查询
SELECT *
FROM ( SELECT TOP ( @pageSize * @pageIndex )
ROW_NUMBER() OVER ( ORDER BY dbo.Products.UnitPrice DESC ) AS rownum ,
*
FROM dbo.Products
) AS temp
WHERE temp.rownum > ( @pageSize * ( @pageIndex - 1 ) )
ORDER BY temp.UnitPrice
http://www.cnblogs.com/yangecnu/p/3702975.html
浙公网安备 33010602011771号