SQL Server 2008基础教程 第七章 操纵数据

来源:互联网 发布:2017年京东抢购软件 编辑:程序博客网 时间:2024/04/27 03:44

创建books表

USE ElecTrravelCom

CREATE TABLE books(

     ISBN NVARCHAR(128)  NOT NULL,

     title NVARCHAR(128)  NOT NULL,

     pressName NVARCHAR(32) NULL,

     page INT NULL,

     price DECIMAL (10,2) NULL,

     publishDate DATETIME

GO

insert语句

INSERT INTO table_or_view_name

(column_list)

VALUES (expression)

向表中插入部分列的数据

USE ElecTravelCom

INSERT INTO books(title,pressName,ISBN)

VALUES ('N','数据库设计与开发教程',

                ‘N’,'清华大学出版社',

                 ‘7-302-09350-9’)

GO

使用DEFAULT VALUES 子句

USE ElecTravelCom

INSERT INTO books

DEFAULT VALUES

GO

INSERT SELECT

USE ElecTravelCom

INSERT INTO books (ISBN,title,price)

SELECT productNumber,Name,ListPrice

   FROM AdventureWorks,Production.Product

GO

使用BULK INSERT语句

USE ElecTravelCom

BULK INSERT ElecTravelCom.dbo.books

FROM 'C:\Temp\ch07.txt'

WITH (

          FIELDTERMINATOR = ',',

          ROWTERNINATOR = '\n')

GO

----------------------------------------------------------------------------------------------------------------------------------

UPDATE 语句

UPDATE语句的基本语法形式

UPDATE table_or_view_name

SET  column_name = expression

WHERE search_condition

在UPDATE语句中使用FROM子句

USE AdventureWorks

UPDATE Sales.SalesPerson

SET SalesYTD = SalesYTD + SubTotal

FROM Sales.SalesPerson sp

JOIN Sales.SalesOrderHeader so

   ON sp.SalesPersonID = so.SalesPersonID

  AND so.OrderDate = ( SELECT MAX(OrderDate

                                        FROM sales.SalesOrdereader

                                       WHERE SalesPersonID = sp.SalesPersonID)

                                       )

GO          

----------------------------------------------------------------------------------------------------------------------------------

删除数据

DELETE

FROM table_or_name

WHERE search_condition

删除表中的数据

USE ElecTravelCom

DELETE FROM books

WHERE DATEDIFF (

                                   YEAR ,

                                   publishDate,GETDATE())> 5

GO

最基本的检索语句(网络显示形式)

USE AdventrueWorks

SELECT *

FROM  Production。Product

GO


SELECT  '产品 编码'  = ProductNumber

                Name AS 产品名称,

                safetyStockLevel SSL

FROM Production.Product

GO

使用算术运算符

USE AdventureWorks

SELECT ProductNmuber ,

               Name,

               SSL = SafetyStockLevel,

               minSSL = SafetyStockLevel * 0.81,

               maxSSL = safetyStockLevel  * 1.29

FROM Production.Product

GO

使用数学函数

SELECT  '圆周率值' = PI(),

                'PI/2 的余弦值' = SIN(PI() / 2.0)

SELECT 'PI/4的余弦值' = COS(PI()/4.0),

               'PI/4正切值'  = TAN(PI()/4.0)

GO

使用字符串函数

USE AdventureWorks

SELECT  'PRODUCT and ITS NUMBER' = 'The number of'   + UPPER(SUBSTRING(Name, 1, 3)) + ‘ product is ’  + ProductNmber

FROM Production.Product

GO

使用 ALL 关键字

USE AdventureWorks

SELECT ALL Color

FROM Production.Product

GO

使用DISTINCT关键字

USE AdventureWorks

SELECT DISTINCT Color

FORM Production.Product

GO

使用一个列进行排序

USE AdventureWorks

SELECT Name,safetyStockLevel, ReorderPoint,StanddardCost

FROM  Production.Product

ORDER BY SafetyStockLevel

使用3个列进行排序

USE AdventureWorks

SELECT Name,StandardCost,ListPrice,

               SafetyStockLevel, ReorderPoint

FROM    Production.Product

ORDER BY StandardCost   DESC, ListPrice, SafetyStockLevel

GO

使用TOP(1) PERCENT 子句

USE AdventureWorks

SELECT TOP(1) SELECT PERCENT Name,StandardCost

FROM Production.Product

ORDER BY StandardCost DESC

GO

使用TOP(1) PERCENT WITH TIES 子句

USE AdventureWorks

Select TOP(1) PERCENT WITH TIES Name,StandardCost

FROM  Production.Product

ORDER BY StandardCost DESC

GO

复合搜索条件

USE AdventureWorks

SELECT Name,StandardCost,ListPrice

FROM Production.Product

WHERE Name LIKE '%Ball'

OR StandardCost > 2000

GO

在SELECT子句中使用聚合函数

USE AdventureWorks

SELECT 表中数据量 = COUNT(*),

               表中数据量 = COUNT(StandardCost),

               表中标准成本不同的数据量 = COUNT(DISTINCT StandardCost),

               表中产品颜色非空的数据量 = COUNT(Color)

 FROM Production.Product

 

SELECT 标准成本的最大值 = MAX(StandardCost),

               标准成本的最小值 = MIN(StandardCost),

               标准成本的平均值 = AVG(StandardCost),

               标准成本的标准偏差 = STDEV(StandardCost),

               标准成本的方差 = VAR(StandardCost)

FROM  Production.Prodect

GO

使用没有BY子句的COMPUTE子句

USE AdventureWorks

SELECT CustomerID,OrderDate,

FROM Sales.SalesOrderHeader

ORDER BY OrderDate

COMPUTE SUM(SubTotal), SUM(TotalDue)

使用有BY子句的COMPUTE子句

USE AdvenrureWorks

SELECT Sales[ersonID,CustomerID,OrderDate,SubTotal,TotalDue

FROM  Sales.SalesOrderHeader

ORDER BY SalesPersonID, OrderDate

COMPUTE SUM(SubTotal),SUM(TotalDue), BY SalesPersonID

GO

没有分组 条件的分组语句

USE AdventureWorks

SELECT Color,

                颜色相同产品的数量 = COUNT(*),

                颜色相同产品的最大安全库存量 = MAX(SafetyStockLevel)

    FROM Production.Product

 WHERE Color IS NOT NULL

GROUP BY Color

GO

有分组条件的分组语句

USE  AdventureWorks

SELECT Color,

                颜色相同产品的数量 = COUNT(*),

                颜色相同产品的最大安全库存量 = MAX(SafetyStockLevel)

FROM Production.Product

GROUP BY Color

HAVING COUNT(*) > 25

简单的分组

USE ElecTravelCom

SELECT ItemName,Color,Amount = SUM(Quantity)

FROM  InvenTory

GROUP BY ItemName,Color

GO

使用ROLLUP关键字的分组

USE ElecTravelCom

SELECT ItemName,Color,Amount = SUM(Quantity)

FROM Inventory

GROUP BY ItemName,Color WITH ROLLUP

GO

使用CUBE关键字的分组

USE AdventureWorks

SELECT ItemName,Color,Amount = SUM(Quantity)

FROM Inventory

GROUP BY ItemName,Color WITH CUBE

GO

交叉连接

USE AdventureWorks

SELECT PP.ProductID,Name,ProductNumber,

               LocationID,Quantity

FROM Production.Product PP

CROSS JOIN Production.ProductInventory PPI

GO

内连接

USE AdventureWorks

SELECT PP.ProductID,Name,ProductNumber,

                SafetyStockLevel,

                ReorderPoint,LocationID, Quantity

FROM  Production.Product PP

INNER JOIN Production.ProductInventory PPI

      ON PP.ProductID  = PPI.ProductID

GO

左外连接

USE AdventureWorks

SELECT PP.Name,SOD.SalesOrderID

FROM Production.Product PP

LEFT OUTER JOIN Sale.SalesOrderDetail SOD

                           ON PP.ProductID = SOD.ProductID

ORDER BY PP.Name

GO

使用EXCEPT运算符

USE ElecTravelCom

SELECT col1 FROM T1

EXCEPT

SELECT col1 FROM T2

GO

EXCEPT运算符

EXCEPT运算符通过包括所有在TABLE1中但不在TABLE2中的行并消除所有重复行而派生出一个结果表。

当ALL随EXCEPT一起使用时(EXCEPT ALL)不消除重复行。

公用表表达式

CTE是定义在SELECT INESRT UPDATE DELETE 语句中临时命名的结果集,

CTE也可以用在视图的定义中。

在CTE中,可以包括对自身的引用,因此这种表达式也被称为递归CTE

USE AdventureWorks

WITH AmountOrder(SalesPersonID,AmountOrderOfPerson,MaxDate)

    AS (SELECT SalesPersonID,COUNT(*),MAX(OrderDate)

              FROM Sales.SalesOrderHeader

           WHERE SalesPersonID IS NOT NULL

            GROUP BY SalesPersonID )

SELECT SalesPersonID,AmountOrderOfPerson,MaxDate

    FROM AmountOrder

 ORDER BY SalesPersonID

GO

使用递归的CTE

USE AdventureWorks

WITH DirectReports(ManagerID, EmplyeeID,0 AS EmployeeLevel)

AS (SELECT ManagerID,EmployeeID, 0 AS EmplyeeLevel

          FROM  HumanResources.Employee

        WHERE ManagerID IS NULL

   UNION ALL

    SELECT e.ManagerID, e.EmplyeeID, EmployeeLevel + 1

       FROM HumanResources.Employee e

       INNER JOIN DirectReports d

                       ON e.ManagerID = d.EmployeeID )

SELECT ManagerID , EmployeeID, EmloyeeLevel

   FROM DirectReports

GO

PIVOT和UNPIVOT是从Microsoft SQL Server 2005 开始新增的关系运算符,提供了一种把列数据转换为行数据的方式。

PIVOT运算符把表达式中某一列中的数据转换为输出中的多个列,UNPIVOT运算符则相反。


 





0 0
原创粉丝点击