[转]http://www.cnblogs.com/Sientuo/p/6245826.html
1、数据库常见三种数据模型: 层次、网状、关系
2、关系的 三类完整性约束:实体完整性(主键不为空)、参照完整性、用户自定义完整性
3、常用易忘数据类型:
①int 4byte = 32bit 一个汉字2字节,中文标点、全角占两字节;字母、英文标点、半角占一个字节
②char 固定长度的非unicode 字符数据,最大长度为8000个字符
③varchar 可变长度的非unicode 字符数据,最大长度为8000个字符,存储大小为输入数据的实际长度
④nchar 固定长度的unicode 字符数据,最大长度为4000个字符,存储大小为实际长度的两倍
⑤nvarchar 可变长度的unicode 字符数据,最大长度为4000个字符,存储大小为实际长度的两倍
4. 查询31到40条记录(面试)
--id连续 SELECT * FROM IBBC.dbo.Students AS s WHERE s.Stu_id BETWEEN 31 AND 40 --id不连续 --普快 SELECT TOP 10 * FROM Students AS s WHERE s.Stu_id NOT IN (SELECT TOP 30 s2.Stu_id FROM Students AS s2) --动车 SELECT TOP 10 * FROM (SELECT TOP 40 * FROM IBBC.dbo.Students AS s ORDER BY s.Stu_id ASC) AS temp ORDER BY temp.Stu_id DESC --高铁 SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY s.Stu_id) Newcolumn,* FROM Students AS s)s1 WHERE s1.Newcolumn BETWEEN 31 AND 40 --蹦蹦车 易混淆 实际查询的是最后十条记录的降序 SELECT TOP 10 * FROM (SELECT TOP 40 * FROM IBBC.dbo.Students AS s) AS temp ORDER BY temp.Stu_id DESC
5、常见的判断操作
--判断表是否存在
IF exists(select * from dbo.sysobjects where id = object_id(N'[dbo].[Table_22]'))
--判断表栏位是否存在
IF EXISTS (select * from syscolumns where id=object_id('Table_1') and name='IDD')
--判断存储过程是否存在
If exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[test]'))
--判断视图是否存在
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[v_test]'))
6、常见的表操作
--增加栏位 ALTER TABLE IBBC.dbo.Table_1 ADD YYY CHAR(5) --删除栏位 ALTER TABLE IBBC.dbo.Table_1 DROP COLUMN YYY --更改栏位类型型 ALTER TABLE IBBC.dbo.Table_1 ALTER COLUMN b_id INT NOT NULL --指定栏位添加描述 exec sp_addextendedproperty N'MS_Description', N'我是描述信息', N'user', N'dbo', N'table', N'Table_1', N'column', N'YYY' --添加主键 ALTER TABLE IBBC.dbo.Table_2 ADD CONSTRAINT test_main PRIMARY KEY(b_id) --删除主键 ALTER TABLE IBBC.dbo.Table_2 DROP CONSTRAINT test_main --添加外键 alter table IBBC.dbo.Table_1 add constraint test_foreign foreign key(bas_id) references IBBC.dbo.Table_2(b_id) --删除外键 ALTER TABLE IBBC.dbo.Table_1 DROP CONSTRAINT test_foreign
7. 常用判断函数操作
--case when then
SELECT s.Stu_id,s.Stu_Name,s.Date_,
(CASE s.Stu_id
WHEN 1 THEN DATEADD(mm,1,s.Date_)
WHEN 2 THEN DATEADD(mm,-1,s.Date_)
ELSE DATEADD(mm,2,s.Date_)
END) New_date
FROM IBBC.dbo.Students AS s
--日期函數
SELECT DATEPART(yy,GETDATE()) AS 'Year' --yy/yyyy/yy
SELECT DATEPART(mm,GETDATE()) AS 'Month' --mm/m/Month
SELECT DATEPART(ww,GETDATE()) AS 'Week' -- ww/wk/Week
--类型转换
SELECT CONVERT(VARCHAR(8),GETDATE(),112)
SELECT CAST (GETDATE() AS VARCHAR(11))
8. 聚合函数
--执行顺序 where -> group by -> having 函数 -> order by --聚合函数 分组 select s.StudentName,sum(grade) as '总成绩' from IBCC.dbo.Student s group by s.StudentName --having 对聚合函数查询后的结果集进行筛选 select s.StudentName, sum(grade) as '总成绩' from ibcc.dbo.Student s group by s.StudentName having sum(grade)>100
9. 视图
--视图 虚拟表 use IBCC go --创建 create view view_test as select * from IBCC.dbo.Student where grade >80 go --查询 select * from ibcc.dbo.view_test --删除 不能指定数据库名为前缀 drop view dbo.view_test
10.存储过程
--不带参数的存储过程 --创建 create proc proc_test as select * from ibcc.dbo.Student go --带参数的存储过程 --创建 create proc proc_test1 @s_id int as select * from IBCC.dbo.Student where StudentID=@s_id go --调用 exec proc_test1 1002 exec proc_test1 @s_id =1002 --删除 drop proc proc_test1
