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

 

posted on 2017-08-13 21:26  泽泽博客  阅读(318)  评论(0)    收藏  举报

导航