laboratornye raboty sqlserver result

90
ИВЭСЭП САНКТ-ПЕТЕРБУРГСКИЙ ИНСТИТУТ ВНЕШНЕЭКОНОМИЧЕСКИХ СВЯЗЕЙ, ЭКОНОМИКИ И ПРАВА Москвин Д. Н. БАЗЫ ДАННЫХ Учебно-методическое пособие

Upload: iuradanilov

Post on 21-Nov-2015

29 views

Category:

Documents


3 download

DESCRIPTION

Laboratornye Raboty Sqlserver Result

TRANSCRIPT

1

-

,

. .

- -

2005

. .

: - . \SYMBOL 150 \f "Times New Roman Cyr" .: , 2005. \SYMBOL 150 \f "Times New Roman Cyr" ??.

ISBN

, -. Microsoft SQL Server. SQL . . , .

:

,

. .

- ,

. .

\SYMBOL 169 \f "Arial Cyr" .., 2005

\SYMBOL 169 \f "Arial Cyr" , 2005.

351400 ( ), . , .

. -, - . -, SQL (Structured Query Language) .

- (, DBMS -). , MicrosoftAccess MicrosoftVisualFoxPro, . - ( ) . () . , , . : C, C++, C#, Java, Basic, Pascal ..

SQL , (query), , . , . (result set) , . SQL. Microsoft SQLServer2000. SQLServer , : Enterprise Manager Query Analyzer. Enterprise Manager . Query Analyzer Transact SQL SQL, Microsoft.

TradeSQL, . . Products . Sales , Purchases .

1 TradeSQL . , .

2 ( DEFAULT, CHECK), -. (VIEW) .

3 SELECT SQL . , , .

4 5 . -, . TradeSQL . ( ) ( ) . , . , Products , . Sales Purchases, .

6 . , (, ), ( ODBC, ).

, , . A . A , .

B TradeSQL. , .

C . . .

1.

1.1. SQL Server

1. SQLServer Enterprise Manager.

2. , Databases .

3. Databases New Database4. General Database Properties Name TradeSQL.

5. Data Files Transaction Log , , . D:\Student\.

6. OK, .

7. TradeSQL .

TradeSQL? , ? ? ()

1. TradeSQL, All Tasks | Generate SQL Script2. Generate SQL Scripts Options. Script Database OK.

3. D:\Student\Lab01\ CreateDb.sql.

4. OK .

1. SQL Query Analyzer.

2. (local) D:\Student\Lab01\CreateDb.sql.

3. , , .

4. . SQL- DROP DATABASE TradeSQL. CREATE DATABASE . sp_dboption . USE .

5. . , (Results Pane).

1.2.

c

1. SQLServer Enterprise Manager.

2. Tables , New Table3. Prod_id, int, NULL . Prod_name, char, 50, NULL .

4. Prod_id. Prod_id, Set Primary Key.

5. Identity () . Columns

6. New Table Products.

c

1. () Products , Open Table | Return all rows

2. Prod_name Enter. . , Prod_id Identity.

3. Data in Table c Transact-SQL1. SQL Query Analyzer.

2. , New query (trl+N) .

3. Transact-SQL

USE TradeSQL

GO

CREATE TABLE dbo.Sales (

Sale_id int IDENTITY (1, 1) NOT NULL PRIMARY KEY ,

Sale_date datetime NOT NULL ,

Prod_id int NOT NULL ,

Quantity numeric (8,0) NOT NULL ,

Price numeric (8,2) NOT NULL

)

GO4. , Parse query (trl+F5) . , , Execute query (F5).

5. SQLServer Enterprise Manager , .

6. SQL Query Analyzer. ,

USE TradeSQL

GO

INSERT dbo.Sales (Sale_date, Prod_id, Quantity, Price)

VALUES ('20030301', 1, 8, 40)

GO

SELECT * FROM dbo.Sales

GO. SQL- INSERT . SELECT .

1.3.

1. SQL Query Analyzer. ,

USE TradeSQL

GO

ALTER TABLE dbo.Products ADD Unt_of_mes char(20)

GO

UPDATE dbo.Products SET Unt_of_mes = N'.'

GO

SELECT * FROM dbo.Products

GO

. ALTER TABLE . UPDATE ; WHERE , .

1. , , Unt_of_mes, 10 ( ):

USE TradeSQL

GO

ALTER TABLE dbo.Products

ALTER COLUMN Unt_of_mes char(10) NOT NULL

GO 1.4.

1. SQLServer Enterprise Manager.

2. () Sales , Design Table.

3. Table and Index Properties ( ).

4. Relationships New.

5. Primary Key Table Products. Prod_id.

6. Foreign Key Table Sales. Prod_id.

7. Close () Properties. Design Table, .

. (Foreign Key) Prod_id Sales, -- Products.

6. SQL Query Analyzer. ,

USE TradeSQL

GO

INSERT dbo.Sales (Sale_date, Prod_id, Quantity, Price)

VALUES ('20030301', 555, 1, 10)

GO ? ? c Transact-SQL1. SQL Query Analyzer. ,

USE TradeSQL

GO

CREATE TABLE dbo.Purchases (

Pur_id int IDENTITY (1, 1) NOT NULL PRIMARY KEY ,

Pur_date datetime NOT NULL ,

Prod_id int NOT NULL ,

Quantity numeric (8,0) NOT NULL ,

Price numeric (8,2) NOT NULL

)

GO

ALTER TABLE dbo.Purchases

ADD CONSTRAINT FK_Purchases_Products

FOREIGN KEY (Prod_id)

REFERENCES dbo.Products (Prod_id)

GO. ALTER TABLE .

2. SQLServer Enterprise Manager , . (, Tables .)

1.5.

1. SQLServer Enterprise Manager.

2. Diagrams , New Database Diagram (Create Database Diagram Wizard).

3. , (Available Tables) Sales. Add>, . Products Purchases.

4. , . TradeSQL, .

5. Save ( ) . Diagram1, OK.

6. . : Diagram1. 1.6.

,

1. SQLServer Enterprise Manager. TradeSQL, All Tasks | Generate SQL Script2. Generate SQL Scripts General ShowAll. Script All Objects Preview.

3. Generate SQL Script Preview. 2 , 3 . 3 , . Close Generate SQL Script Preview.

4. , . Options Table Scripting Options Script PRIMARY keys, FOREIGN keys, defaults, and check constraints.

5. General Preview .

?6. OK Generate SQL Script. D:\Student\Lab01\ CreateTables.sql.

7. OK .

8. SQL Query Analyzer , .

9. D:\Student\Lab01\CreateTables.sql.

10. . , (Results Pane).

2. , ,

1. Query Analyzer.

2. SQL- (local) \\ntserver\SQLServer\Lab02\CreateDb2.sql. , . TradeSQL .

3. , , .

4. .

2.1.

1. Query Analyzer

USE TradeSQL

GO

INSERT dbo.Products (Prod_name)

VALUES ('')

GO2. , INSERT , , NULL ( Identity ()), . .

1. Enterprise Manager.

2. , TradeSQL . Tables . () Products , Design Table.

3. (Unt_of_mes) . Columns Default Value .

4. Design Table, .

5. SQL Query Analyzer. . INSERT .

6.

SELECT * FROM dbo.Products c Transact-SQL1. Query Analyzer. ,

USE TradeSQL

GO

ALTER TABLE dbo.Products

DROP CONSTRAINT DF_Products_Unt_of_mes

GO

ALTER TABLE dbo.Products ADD CONSTRAINT

DF_Products_Unt_of_mes DEFAULT '.' FOR Unt_of_mes

GO

. ALTER TABLE . ALTER TABLE ( - ) .

2.2. (Check)

Check

1. Enterprise Manager. () Sales , Design Table.

2. Table and Index Properties ( ).

3. Check Constraints New. Constraint expression

Price > 0

4. New

Quantity > 0

5. Close () Properties. Design Table, .

Check

1. Query Analyzer. ,

USE TradeSQL

GO

UPDATE dbo.Sales SET Price = 0 WHERE Sale_id = 1

GO2. .

Check c Transact-SQL1. SQL Query Analyzer. ,

USE TradeSQL

GO

ALTER TABLE dbo.Purchases ADD CONSTRAINT

CK_Purchases CHECK ([Price] > 0)

GO

ALTER TABLE dbo.Purchases ADD CONSTRAINT

CK_Purchases_1 CHECK ([Quantity] > 0)

GO Purchases, , Sales Enterprise Manager.

2.3.

1. Enterprise Manager. Views , New View2. Add table ( ) New View3. Sales, Products. Add tables.

4. Sales.Sale_id, Sales.Date_sale, Sales.Prod_id, Products.Prod_name, Sales.Quantity, Sales.Price.

5. Properties ( ). TOP ( Sales ) Properties.

6. Run ( ) Results Pane.

7. New View, SalesWithNames.

8. PurchasesWithNames, (Purchases).

1. SQL Query Analyzer. ,

USE TradeSQL

GO

INSERT INTO PurchasesWithNames

(Pur_date, Prod_id, Quantity, Price)

VALUES ('20030303', 4, 12, 3.55)

GO

SELECT * FROM PurchasesWithNames

GO , SQL, .

2. , , ? ? 2.4.

1. Enterprise Manager. Views , New View2. Add table ( ) New View

3. Sales Add tables.

4. Use Group By ( ) New View Grid Pane Group By.

5. Prod_id Quantity. Grid Pane Sum() Quantity Group By., . Alias Expr1 Qty_tot. Quantity * Price Turnover () , .

6. Run ( ) Results Pane.

7. New View, SalesGroupedByProducts.

8. Products, .

9. (Turnover).

10. PurchasesGroupedByProducts, (Purchases).

11. , SQL Query Analyzer.

12. SalesGroupedByProducts PurchasesGroupedByProducts ? 3. SQL-

1. Query Analyzer.

2. SQL- (local) \\ntserver\SQLServer\Lab03\CreateDb3.sql. , . TradeSQL .

3. , , .

4. .

3.1.

1. Query Analyzer

USE TradeSQL

GO

SELECT Prod_name AS [],

Unt_of_mes AS [ ]

FROM Products

GO2. . Grid , .

1. , . Query Analyzer

USE TradeSQL

GO

SELECT Sale_date AS [ ],

Prod_id,

Quantity AS [],

Price AS [],

Quantity * Price AS []

FROM SalesGO2. . , .

3. , ? , .

3.2.

1. . , , Products. . JOIN ON 2. Query Analyzer. ,

USE TradeSQL

GO

SELECT Sales.Sale_date AS [ ],

Sales.Prod_id,

Products.Prod_name AS [],

Sales.Quantity * Sales.Price AS []

FROM Sales INNER JOIN Products

ON Sales.Prod_id = Products.Prod_id

GO. , Sales Products (JOIN), ON . . , , . (INNER) , INNER .

3. . Query Analyzer

USE TradeSQLGO

SELECT Sales.Sale_date AS [ ],

Sales.Prod_id,

Products.Prod_name AS [],

Sales.Quantity * Sales.Price AS []

FROM Sales, Products

WHERE Sales.Prod_id = Products.Prod_id

GO WHERE. , .

1. SELECT . . FROM. , , SELECT .

2. Query Analyzer. ,

USE TradeSQL

GO

SELECT s.Sale_date AS [ ],

s.Prod_id,

p.Prod_name AS [],

s.Quantity * s.Price AS []

FROM Sales s JOIN Products p

ON s.Prod_id = p.Prod_id

GO

3.3.

1. () , , . : Sum(), Avg(), Min(), Max(), Count() ..

2. , , .

3. Query Analyzer. ,

USE TradeSQL

GO

SELECT Sum(Quantity * Price) AS []

FROM SalesGO. Quantity Price , . .

3.

USE TradeSQL

GO

SELECT Sum(Quantity * Price) AS [],

Sum(Quantity),

Avg(Quantity),

Max(Price),

Min(Price),

Max(Quantity * Price),

Min(Quantity * Price),

Count(*)

FROM Sales

GO4. .

5. Sales ? 6. .

1. . , , . , Sales, . GROUP BY. , , : .

2. SQL Query Analyzer. ,

USE TradeSQL

GO

SELECT Sale_date AS [ ],

Sum(Quantity * Price) AS []

FROM Sales

GROUP BY Sale_date

GO

3. SQL Query Analyzer. ,

USE TradeSQL

GO

SELECT Prod_id,

Max(Quantity * Price) AS [ ]

FROM Sales

GROUP BY Prod_id

ORDER BY [ ] DESCGO , , , .

4. Sales, . .

5. , , .

3.4.

1. SQL Query Analyzer. ,

USE TradeSQL

GO

INSERT Products (Prod_name, Unt_of_mes)

VALUES ('', '')

GO

. Products. Sales, .

2. SQL Query Analyzer. ,

USE TradeSQL

GO

SELECT s.Sale_date AS [ ],

s.Prod_id,

p.Prod_name AS [],

s.Quantity * s.Price AS []

FROM Sales s JOIN Products p

ON s.Prod_id = p.Prod_id

GO3. , Sales . Products, (OUTER JOIN). RIGHT OUTER JOIN, JOIN LEFT OUTER JOIN, .

4. Query Analyzer

USE TradeSQL

GO

SELECT s.Sale_date AS [ ],

s.Prod_id,

p.Prod_name AS [],

s.Quantity * s.Price AS []

FROM Sales s RIGHT OUTER JOIN Products p

ON s.Prod_id = p.Prod_id

GO 3.5. UNION

1. : , . , , Sales. , Products . IN.

2. SQL Query Analyzer. ,

USE TradeSQLGO

SELECT Prod_id, Prod_name

FROM Products

WHERE Prod_id NOT IN

(SELECT DISTINCT Prod_id FROM Sales)

GO. ( ) , . IN , ( Prod_id Products) . NOT IN, , .

3. , , 30 . : . UNION1. , , . , , - ( , ). UNION.

2. SQL Query Analyzer. ,

USE TradeSQL

GO

SELECT a.Pur_date AS Date_wrk

FROM Purchases a

UNION

SELECT b.Sale_date

FROM Sales bGO , , , .

4.

1. Query Analyzer.

2. SQL- (local) \\ntserver\SQLServer\Lab04\CreateDb4.sql. , . TradeSQL .

3. , , . .

4.1

1. SQL Query Analyzer. ,

EXEC sp_helpdb sp_helpdb. . , , .

2. . , sp_helpdb : . . sp_helpdb ; .

3.

EXEC sp_helpdb TradeSQL . .

4. . :

EXEC sp_helpdb @dbname = TradeSQL , .

5. , SQLServer. SQL Query Analyzer Shift+F1.

4.2.

1. Enterprise Manager.

2. , TradeSQL . Stored Procedures . , New Stored Procedure

3. Text Stored Procedure Properties CREATE PROCEDURE dbo.insert_Products

( @Prod_id_ int OUTPUT,

@Prod_name_ char(50),

@Unt_of_mes_ char(10) = '.'

)

AS

INSERT INTO dbo.Products (Prod_name, Unt_of_mes)

VALUES (@Prod_name_, @Unt_of_mes_)

SET @Prod_id_ = @@IDENTITY

GO

. insert_Products Products. : ( @Prod_name_) , , ( @Unt_of_mes_). @Unt_of_mes_ , (.). insert_Products @Prod_id_, Prod_id .

4. Check Syntax .

5. Stored Procedure Properties, OK.

1. SQL Query Analyzer. ,

USE TradeSQL

GO

DECLARE @NewProdId int, @NewProdName char(50)

SET @NewProdName = ''

EXEC insert_Products @NewProdId OUTPUT, @NewProdName

SELECT @NewProdId AS Res EXEC. , (@NewProdId). SELECT Result Pane.

2.

SELECT * FROM Products3. , , insert_Products . 4.3.

c Transact-SQL1. SQL Query Analyzer ,

USE [TradeSQL]

GO

CREATE PROCEDURE dbo.Remains

AS

SELECT Operations.Prod_id,

SUM(Operations.Qnty_tot) AS Remain

FROM (

SELECT Prod_id, -SUM(Quantity) AS Qnty_tot

FROM dbo.Sales

GROUP BY Prod_id

UNION ALL

SELECT Prod_id, SUM(Quantity) AS Qnty_tot

FROM dbo.Purchases

GROUP BY Prod_id

) AS Operations

GROUP BY Operations.Prod_id

GO. Remains , / . SELECT Sales Purchases, ( ) . UNION, Operations. SELECT ( Operations), ( ) , , .

2.

EXEC Remains3. , , RemainsWithNames. , , . (: Products, Operations Prod_id). , datetime . .4.

EXEC RemainsWithNames '20030301'

EXEC RemainsWithNames '20030302'

RemainsWithNames ? 5.

1. Query Analyzer.

2. SQL- (local) \\ntserver\SQLServer\Lab05\CreateDb5.sql. , . TradeSQL .

3. , , .

4. .

5.1.

Remain () Products, . , , , . , . Sales Purchases, .

1. Query Analyzer, : \\ntserver\SQLServer\Lab05\Remain.sql. Products Remain, .

2. .

1. SQL Query Analyzer ,

USE [TradeSQL]

GO

CREATE TRIGGER RemSalesInsert

ON Sales

FOR INSERT

AS

UPDATE p SET p.Remain = p.Remain - i.Quantity

FROM Products p INNER JOIN inserted i

ON p.Prod_id = i.Prod_id

GO. , Sales. (Remain) Products, , Quantity Sales. Inserted, , , ( Sales).

2.

SELECT * FROM Products WHERE Prod_id = 1

INSERT Sales (Sale_date, Prod_id, Quantity, Price)

VALUES ('20030304', 1, 100, 40)

SELECT * FROM Products WHERE Prod_id = 1

, Prod_id = 1 Products 100, INSERT Sales.

1. SQL Query Analyzer ,

USE [TradeSQL]

GO

CREATE TRIGGER RemSalesDelete

ON Sales

FOR DELETE

AS

UPDATE p SET p.Remain = p.Remain + d.Quantity

FROM Products p INNER JOIN deleted d

ON p.Prod_id = d.Prod_id

GO. , Sales. (Remain) Products, , Quantity Sales. Deleted, , , ( Sales).

2.

SELECT * FROM Products WHERE Prod_id = 1

DELETE dbo.Sales

WHERE Sale_date = '20030304'

SELECT * FROM Products WHERE Prod_id = 1

, Prod_id = 1 Products 100, DELETE Sales.

3. SQL Query Analyzer ,

USE [TradeSQL]

GO

CREATE TRIGGER RemSalesUpdate

ON Sales

FOR UPDATE

AS

UPDATE p SET p.Remain = p.Remain - i.Quantity + d.Quantity

FROM Products p

INNER JOIN inserted i ON p.Prod_id = i.Prod_id

INNER JOIN deleted d ON p.Prod_id = d.Prod_id

GO. , Sales. (Remain) Products, , Quantity Sales. Inserted Deleted, Sales, .

4.

SELECT * FROM dbo.Products

UPDATE dbo.Sales SET Quantity = Quantity + 20

WHERE Sale_date = '20030301'

SELECT * FROM dbo.Products

, , 1 , Products 20, UPDATE Sales.

1. SQL Query Analyzer ,

USE [TradeSQL]

GO

CREATE TRIGGER RemPurchases

ON Purchases

FOR INSERT, UPDATE, DELETE

AS

IF EXISTS(SELECT * FROM inserted)

BEGIN

UPDATE p SET p.Remain = p.Remain + i.Quantity

FROM Products p INNER JOIN inserted i

ON p.Prod_id = i.Prod_id

END

IF EXISTS(SELECT * FROM deleted)

BEGIN

UPDATE p SET p.Remain = p.Remain - d.Quantity

FROM Products p INNER JOIN deleted d

ON p.Prod_id = d.Prod_id

END

GO

. , , Purchases. Inserted Deleted , , Products. , Quantity Purchases Sales.

2.

SELECT * FROM Products WHERE Prod_id = 1

/* +100 */

INSERT Purchases (Pur_date, Prod_id, Quantity, Price)

VALUES ('20030305', 1, 100, 28.5)

SELECT * FROM dbo.Products

/* -60 */

UPDATE Purchases SET Quantity = Quantity - 60

WHERE Pur_date = '20030305' AND Prod_id = 1

SELECT * FROM Products WHERE Prod_id = 1

/* -40 */

DELETE Purchases

WHERE Pur_date = '20030305'

SELECT * FROM dbo.Products WHERE Prod_id = 1

, Prod_id = 1 Products , Sales.

6. -

1. Query Analyzer.

2. SQL- (local) \\ntserver\SQLServer\Lab06\CreateDb6.sql. , . TradeSQL .

3. , , .

4. .

6.1. ODBC

, (Data Source Name, DSN). , , .

(ODBC-), , , ODBC (Open Database Connectivity). DSN , ODBC-.

ODBC

1. , , . , ODBC.

2. System DSN ( DSN) Add (), Create New Data Source ( ) SQLServer .

3. New Data Source to SQL Server TradeDS ( Name), (Description) . Server (local). .

4. : With SQL Server authentication, LoginID sa, Password () . .

5. Change the default database to TradeSQL. .

6. . TradeDS. Test Data Source TESTS COMPLETED SUCCESSFULLY!

7. OK, .

8. TradeDS. OK.

Excel1. MS Excel. , , .

2. TradeDS. , . OK.

3. SalesWithNames . .

4. , . .

5. , . .

6. test.dqy. , Microsoft Excel, .

7. , OK. , SalesWithNames TradeDS Excel. , , , Excel .

8. Excel TradeSQL.xls.

9. 2 PurchasesWithNames, 3 - Products.

6.2. MS Visual C++

ODBC , . , ODBC- .

MS Visual C++ MFC, , Windows. MFC ODBC CDatabase CRecordset. CDatabase DSN ; CRecordset SQL .

, MFC1. MS Visual C++ 6.0. File, New. New Projects Win32 Console Application, Project name TradeMFC. OK.

2. ( ) An application that supports MFC ( MFC). Finish, , Application Wizard, OK.

3. Workspace FileView. TradeMFC files, Header Files StdAfx.h . #include MFC, #include / C++.

4. #include afxdb.h MFC,

#include

#include

#include

#include

#ifndef _AFX_NO_AFXCMN_SUPPORT

#include

#endif

#include

#include

(, , , .) StdAfx.h, .

5. FileView Workspace TradeMFC files Source Files TradeMFC.cpp. _tmain. AfxWinInit, MFC, , Application Wizard:

// TODO: code your application's behavior here.

CString strHello;

strHello.LoadString(IDS_HELLO);

cout