• 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

  • 相关阅读:
    我的浏览器收藏夹分类
    我的浏览器收藏夹分类
    Java实现 LeetCode 318 最大单词长度乘积
    Java实现 LeetCode 318 最大单词长度乘积
    Java实现 LeetCode 318 最大单词长度乘积
    Java实现 LeetCode 316 去除重复字母
    Java实现 LeetCode 316 去除重复字母
    Java实现 LeetCode 316 去除重复字母
    Java实现 LeetCode 315 计算右侧小于当前元素的个数
    Java实现 LeetCode 315 计算右侧小于当前元素的个数
  • 原文地址:https://www.cnblogs.com/liufei88866/p/1376840.html
Copyright © 2020-2023  润新知