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

Laboratornye Raboty Sqlserver Result

Nov 21, 2015

Download

Documents

IuraDanilov

Laboratornye Raboty Sqlserver Result
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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