SQL 复习笔记

第一章      什么是数据库

一、数据库究竟是什么

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=CreateReadUpdateDelete

第三章      深入数据类型和其它属性

一、什么是数据完整性

数据完整性说的主要有:保证数据类型的正确性;保证重要数据不意外丢失;保证数据值在用户要求的特定范围中。

二、约束

关系数据库用约束来强制数据的完整性。

约束主要包括数据类型的约束;引用约束;其他约束。

三、数据类型的选择

大数据

Int

时间

Smalldatetime

小数据

smallint

货币

smallmoney

大量文本

Varchar(max)

Text(unicode)

nvarchar

 

四、为何需要合适的数据类型

1.       太大的数据类型浪费空间

2.       太小的数据类型不够存储

3.       不正确的数据类型需要数据转换

4.       不正确的数据类型使得读取更加困难

五、表中的重要列

主键列,唯一列,索引列,自增列

第四章      设计关系表

一、为什么使用关系数据库

关系数据库保证数据完整性,减少数据冗余;降低数据存储空间;提高性能

二、主键、外键

主键可作为行的唯一标识(各行的主键都不相同)

外键用于连接另一张表(一行的数据为另一张表的主键)

三、如何设计关系

建表、建主键、建外键、建关系

四、数据关系

一对多,一对一,多对多

第五章      数据库数据操作

一、应用程序从数据库获得数据

ADO.NET,操作SQL来查,操作数据

二、SQL

CRUD

三、READSELECT

--获取表的所有列

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

六、LoginUser的区别

Login是针对服务器的,User是针对数据库的

第八章      连接客户端和SQL SERVER

一、创建Web Application

二、ADO.NET

Connection, Command, Adapter, DataSet, DataAdapter, DataReader, DataTable, DataRow, DataColumn, CommandBuilder

DataSetDataReader的区别

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调用存储过程

第十三章      全文搜索

一、全文搜索的作用

全文搜索可以搜索打文本数据,包括OFFICEHTMLASP.NETXML等等

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

原文地址:https://www.cnblogs.com/liufei88866/p/1376840.html