第一章 什么是数据库
一、数据库究竟是什么
1. 数据库是结构化的数据存储文件
2. 文件的结构确保文件的精确性
3. 数据库文件的访问权限、数据的维护通常由软件来管理,SQL SERVER正是这样一款软件
二、为何需要数据库
为何需要数据库而不直接把数据存储在txt或者excel等文件中,而需要数据库?使用数据库给我们许多许多的方便。比如减少数据冗余,比如数据查询更加方便,比如数据访问权限的控制,而且,通常来说,存储在数据库中的数据所需要的空间要比直接存储在文件中的数据所需要的空间小。
三、什么是关系数据库
关系数据库靠以下几点来维护数据的完整性:
1. 数据类型的正确性
2. 除去冗余数据使数据唯一来保证数据的精确性
3. 避免关系数据被意外删除的可能
4. 数据被高效的存取和操作
四、关系数据库的其它服务
1. 安全性
2. 管理(备份、恢复、复制)
3. 临时报表
4. 可用性
五、C#和SQL SERVER的交互ADO.NET
1. ADO.NET和数据库握手(数据里那届)
2. ADO.NET执行命令(插入、更新、删除)
3. ADO.NET执行查询(读数据、过滤数据等等)
第二章 理解数据库表和记录
一、数据库表
数据库可以包含多个表,数据库表是由列和行组成的。
二、列
列有列名,列的类型来保证数据的完整性,有助于数据空间的存储
三、行
行用来存储一个实体的信息。
四、Field
Cell
五、术语
CRUD=Create,Read,Update,Delete
第三章 深入数据类型和其它属性
一、什么是数据完整性
数据完整性说的主要有:保证数据类型的正确性;保证重要数据不意外丢失;保证数据值在用户要求的特定范围中。
二、约束
关系数据库用约束来强制数据的完整性。
约束主要包括数据类型的约束;引用约束;其他约束。
三、数据类型的选择
大数据 |
Int |
时间 |
Smalldatetime |
小数据 |
smallint |
货币 |
smallmoney |
大量文本 |
Varchar(max) |
Text(unicode) |
nvarchar |
四、为何需要合适的数据类型
1. 太大的数据类型浪费空间
2. 太小的数据类型不够存储
3. 不正确的数据类型需要数据转换
4. 不正确的数据类型使得读取更加困难
五、表中的重要列
主键列,唯一列,索引列,自增列
第四章 设计关系表
一、为什么使用关系数据库
关系数据库保证数据完整性,减少数据冗余;降低数据存储空间;提高性能
二、主键、外键
主键可作为行的唯一标识(各行的主键都不相同)
外键用于连接另一张表(一行的数据为另一张表的主键)
三、如何设计关系
建表、建主键、建外键、建关系
四、数据关系
一对多,一对一,多对多
第五章 数据库数据操作
一、应用程序从数据库获得数据
ADO.NET,操作SQL来查,操作数据
二、SQL
CRUD。
三、READ(SELECT)
--获取表的所有列
SELECT * FROM Customers
--获取表的特定列
SELECT FirstName,LastName FROM Customers
--给特定列命名
SELECT FirstName as 'First Name',LastName as 'Last Name' FROM Customers
SELECT FirstName 'First Name',LastName 'Last Name' FROM Customers
SELECT FirstName a,LastName b FROM Customers
--连接列
SELECT FirstName+' '+LastName as 'Customer Name' FROM Customers
--增加查询条件
SELECT * FROM Customers WHERE CustomersID = 5
SELECT * FROM Customers WHERE CustomersID > 5
SELECT * FROM Customers WHERE CustomersID >= 5
SELECT * FROM Customers WHERE CustomersID <> 5
SELECT * FROM Customers WHERE FirstName = 'Fred'
SELECT * FROM Customers WHERE DateCreate > '2008-12-01' AND DateCreate < '2008-12-31'
SELECT * FROM Customers WHERE DateCreate > '2008-12-01' OR DateCreate < '2007-12-31'
--一些函数
SELECT SUM(Tax) as 'Taxes Collected' FROM Orders
SELECT COUNT(Tax) as 'Taxes Collected' FROM Orders
SELECT ProductID, ProductPrice as 'Regular Price', ProductPrice*.9 as 'Sale Price'
FROM Products
SELECT Min(ProductPrice) FROM Products
SELECT Max(ProductPrice) FROM Products
SELECT Avg(ProductPrice) FROM Products
SELECT OrderID, OrderDateTime,Month(OrderDateTime),Day(OrderDateTime) FROM Ordes
SELECT GetDate()
-- yy = Year
-- mm = Month
-- dd = Day
-- hh = Hour
-- mi = Minute
-- weekday = (sunday through Saturday)
-- 取名字
SELECT datename(mm,OrderDateTime) FROM Orders
-- 取相应的部分
SELECT datepart(mm,OrderDateTime) FROM Orders
-- 取差距
SELECT datediff(mm,getdate(),OrderDateTime) FROM Orders
-- 增加
SELECT dateadd(dd,5,OrderDateTime) FROM Orders
-- 字符串
SELECT substring(ProductDescripption, 3, 5) FROM Products
SELECT right(ProductDescripption, 5) FROM Products
SELECT left(ProductDescripption, 5) FROM Products
SELECT lower(ProductDescripption) FROM Products
SELECT upper(ProductDescripption) FROM Products
SELECT reverse(ProductDescripption) FROM Products
-- 模糊查询
SELECT * FROM Customers WHERE FirstName LIKE '%es%'
SELECT * FROM Customers WHERE FirstName IN ('Fred','Chris')
-- 排序
SELECT * FROM Customers ORDER BY LastName ASC
SELECT * FROM Customers ORDER BY LastName DESC
SELECT * FROM Customers ORDER BY LastName, FirstName ASC
-- 分组(SELECT 中没有使用聚合函数的都应在GROUP BY组中)
SELECT CustomerID, SUM(Shipping) FROM Orders
GROUP BY CustomerID
-- 分组条件
SELECT CustomerID, SUM(Shipping) FROM Orders
GROUP BY CustomerID
HAVING COUNT(*) >=3
-- 连接
SELECT Products.ProductID,Products.ProductName, ProductTypes.ProductTypeName
FROM Products INNER JOIN ProductType ON Products.ProductTypeID = ProductType.ProductTypeID
--
SELECT p.ProductID,p.ProductName, pt.ProductTypeName
FROM Products p INNER JOIN ProductType pt ON p.ProductTypeID = pt.ProductTypeID
--
SELECT p.ProductID,p.ProductName, pt.ProductTypeName
FROM Products p INNER JOIN ProductType pt ON p.ProductTypeID = pt.ProductTypeID
INNER JOIN Orders o ON o.ProductID = p.ProductID
WHERE p.ProductPrice > 29.95
ORDER BY p.ProductID
第六章 深入SQL
一、子查询
SELECT * FROM Orders WHERE OrderID IN
(SELECT DISTINCT OrderID FROM OrderItems WHERE ProductID=3)
二、插入
INSERT Customers(FirstName,LastName,Address)
VALUES('Pok','Tabor','1201 Wheatfield Dr')
三、更新
UPDATE Customers SET City='NewYord',PostalCode='75086'
WHERE LastName='Tabor'
四、删除
DELETE Customers WHERE LastName='Tabor'
五、存储过程
CREATE PROCEDURE CustomerInsert
@FirstName varchar(50),
@LastName varchar(50),
@Address varchar(50),
@City varchar(50)
AS
BEGIN
INSERT Customers(FirstName,LastName,Address,City)
VALUES(@FirstName,@LastName,@Address,@City)
END
EXECUTE CustomerInsert('Fox','Talor','1032 dr','New York')
六、VIEW->Template Explorer
七、存储过程和用户自定义函数的区别
1.嵌套
function:无限制
sp:最多32层
2.改数据操作
function:不支持
sp:支持
3.结果返回
function:可以返回标量值,返回表变量(表甚至可以定义名字) 具有不确定性,必须返回
sp:并不一定需要返回,可返回记录集。
户定义函数不能用于执行一组修改全局数据库状态的操作
4.是否可以使用非确定函数
function:不允许在用户定义函数主体中内置非确定函数。
sp:可以使用非确定函数。
5.返回值引用
function:其返回值可以被直接引用
sp:其返回值不能被直接引用
6.调用
function:在其他语句中调用select
sp:EXEC
7.是否可以使用out参数
function:function没有out参数,但是可以有返回值.
sp:可以out参数
第七章 理解安全和网络连接
一、默认情况下,用户是”User Instance”的管理员,用户都与其他用户互不影响。
二、分布式”User Instance”
Windows验证和SQL SERVER混合验证
三、给Login赋予权限,赋予角色,常用角色包括
Sysadmin
Db_owner
Db_datareader
Db_datawriter
同时也可创建自定义角色,赋予默认值
四、通常可能需要设置的地方
网络设置
创建login
赋予角色
修改连接字符串
配置防火墙
五、网络设置
SQL Server Configuration Manager
六、Login和User的区别
Login是针对服务器的,User是针对数据库的
第八章 连接客户端和SQL SERVER
一、创建Web Application
二、ADO.NET
Connection, Command, Adapter, DataSet, DataAdapter, DataReader, DataTable, DataRow, DataColumn, CommandBuilder
DataSet和DataReader的区别
DataSet无连接,DataReader连接;DataSet相当于数据库,DataReader相当于游标;
三、ConnectionString的配置
<configuration>
<configSections>
<add key="ConnectionStrings"
value="Data Source=ser;Initial Catalog=advertise;Integrated Security=True"></add>
ConfigurationManager.AppSettings["ConnectionStrings"]
第九章 SQL Server Management Studio
一、管理多台Server
注册数据库,添加组等
二、备份还原数据库(右键)
三、Attach/Deattach(右键)
四、Design Query In Editor
Query->Design Query In Editor
第十章 Reporting Service入门
一、什么是Reporting Service
组成:RDL(Report Definition Language)文件,由SQL Serever Business Intelligence Development Studio创建
Report Server:用SQL Server存储大量文件
Report Manger:基于WEB的用户图形界面,通过浏览器查看Report。
二、Reporting Services Configuration Manger配置
三、创建数据库,SQL Serever Business Intelligence Development Studio创建Report。
四、部署时碰到弹出对话框要求输入用户名密码的问题
原本的TargetServerURL为:http://localhost:8080/Report
改成http://localhost:8080/ReportServer后,问题解决
第十一章 用Business Intelligence Development Studio构建自己的Reporting Service
一、创建Report可以用Wizard,也可以用自己创建
第十二章 存储过程
一、什么是存储过程,为什么需要储存过程以及何时使用存储过程
存储过程是SQL语句的集合,有点像C#中的函数;定义在SQL SERVER中,供C#、VB调用。其中可包含事务等逻辑。
可以有多个输入输出参数,可以定义声明变量,循环,游标等等。
可以控制用户对数据库的访问;和应用程序集成
二、创建和执行简单的存储过程
CREATE PROCEDURE GetProducts
AS
BEGIN
SELECT * FROM Product
END
Execute GetProducts
exec GetProducts
三、输入输出参数以及返回值
CREATE PROCEDURE GetProducts
@id INT
AS
BEGIN
SELECT * FROM Product WHERE [ID]=@id
END
CREATE PROCEDURE GetProducts
@id INT,
@productName NVARCHAR(50) OUTPUT
AS
BEGIN
SELECT @productName=ProductName,* FROM Product WHERE [ID]=@id
END
CREATE PROCEDURE GetProducts
AS
BEGIN
DECLARE @rowcount INT
SELECT * FROM Product
SET @rowcount=@@rowcount
RETURN @rowcount
END
declare @output NVARCHAR(50)
exec GetProducts 5,@output OUTPUT
Print 'Output '+@output
declare @rowcount NVARCHAR(50)
exec @rowcount = GetProducts
Print 'Output '+@rowcount
四、ADO.NET调用存储过程
第十三章 全文搜索
一、全文搜索的作用
全文搜索可以搜索打文本数据,包括OFFICE,HTML,ASP.NET,XML等等
比LIKE更加高效
可以做INDEX优化
二、 一些常用的语句
CREATE FULL CATALOG MyFullTextCatalog
CREATE UNIQUE INDEX UI_ProductReview ON Production.ProductReview(ProductID)
--一张表只能创建一个全文搜索
CREATE FULLTEXT INDEX ON Production.ProductReview (Comments)
KEY INDEX UI_ProductReview ON MyFullTextCatalog
WITH CHANGE_TRACKING AUTO
--索引种类
--Full Population, Change Tracking, Incremental time-stamp based
SELECT Comments
FROM Production.ProductReview
WHERE CONTAINS(Comments,'"learn curve"');
--AND/OR/NOT...
--FORMSOF/ISABOUT