csdl3_northwind

Màu nền
Font chữ
Font size
Chiều cao dòng

Chương I: Tổng quan về Cơ sở dữ liệu và SQL Server 2005

1. Cơ sở dữ liệu

Trong thực tế, khi giải quyết một bài toán với khối lượng dữ liệu lớn cần xử lý, sẽ phát sinh việc quản lý các dữ liệu đó một cách khoa học. Tuy nhiên, việc dùng hệ quản lý tệp với các tệp dữ liệu chứa thông tin và dùng chương trình để thực hiện các thao tác trên dữ liệu đó đã dẫn tới một số nhược điểm không mong muốn như:

-       Dư thừa và không nhất quán về dữ liệu

-       Khó khăn trong việc truy cập dữ liệu

-       Sự cô lập dữ liệu

-       Các dị thường truy nhập tương tranh

-       Các vấn đề về an toàn, toàn vẹn, độ tin cậy dữ liệu

Vì vậy để khắc phục các nhược điểm trên cũng như phục vụ việc quản lý dữ liệu một cách khoa học đã xuất hiện hệ cơ sở dữ liệu.

Một cơ sở dữ liệu (CSDL) là tập hợp các dữ liệu có liên quan đến nhau chứa thông tin về một tổ chức nào đó, được lưu trữ trên các thiết bị nhớ thứ cấp để đáp ứng nhu cầu khai thác thông tin của nhiều người sử dụng với các mục đích khác nhau. Một CSDL phải thỏa mãn hai tính chất:

-       Tính độc lập dữ liệu

-       Tính chia sẻ dữ liệu

Hệ quản trị CSDL là một hệ thống phần mềm cho phép tạo lập CSDL và điều khiển mọi truy nhập đối với CSDL đó.

Các thao tác truy nhập chủ yếu:

-       Tìm kiếm dữ liệu theo chỉ tiêu nào đó

-       Bổ sung dữ liệu vào CSDL

-       Loại bỏ dữ liệu khỏi CSDL

-       Sửa chữa dữ liệu trong CSDL

Các hệ quản trị CSDL hiện nay đều có đặc điểm chung là sử dụng ngôn ngữ truy vấn có cấu trúc Structured Query Language (SQL). Một số hệ quản trị CSDL thường dùng là:MS Access, VFP, SQL Server, Oracle, DB2, Sybase…

2. SQL Server 2005:

Microsoft SQl Server là một hệ quản trị cơ sở dữ liệu quan hệ (relational database management system – RDBMS) do Microsoft phát triển. SQL Server là một hệ quản trị cơ sở dữ liệu quan hệ mạng máy tính hoạt động theo mô hình khách chủ cho phép đồng thời cùng lúc có nhiều người dùng truy xuất đến dữ liệu, quản lý việc truy nhập hợp lệ và các quyền hạn của từng người dùng trên mạng. Ngôn ngữ truy vấn quan trọng của Microsoft SQL Server là Transact-SQL. Một RDBMS bao gồm databases, database engine và các ứng dụng dùng để quản lý dữ liệu và các bộ phận khác trong RDBMS.

Các phiên bản của SQL Server 2005: Enterprise, Standard, Workgroup, Express.

Các thành phần của SQL Server :

-       Đối tượng CSDL:

·      master: là CSDL chứa tất cả các bảng của hệ thống dùng để kiểm soát mọi hoạt động của SQL Server

·      model: là CSDL chứa các khuôn mẫu cho bất kì một CSDL mới nào được tạo ra

·      msdb: là CSDL dùng để lưu các tác vụ xảy ra trong SQL Server

·      tempdb: là CSDL chứa các bảng tạm do người sử dụng sinh ra

-       Tập tin chuyển tác log: là tập tin ghi lại hoạt động của CSDL theo thòi gian

-       Các đối tượng cơ bản của CSDL

·      Bảng dữ liệu (Tables)

·      Chỉ mục (Indexes)

·      Bẫy lỗi (Triggers)

·      Ràng buộc (Constraints)

-       Tập tin nhóm (Filegroups)

-       Lược đồ (Diagrams)

-       Khung nhìn (Views)

-       Thủ tục nội tại (Stored procedures)

-       Hàm do người dùng định nghĩa (User Defined Functions)

-       Người sử dụng và vai trò của người sử dụng (Users and Roles)

-       Các quy tắc (Rules)

-       Giá trị ngầm định (Defaults)

-       Kiểu dữ liệu người dùng định nghĩa (User-Defined Data Types)

-       Phân loại dữ liệu text (Full-text Catalogs)

-       Các kiểu dữ liệu trong SQL Server như: bit, int, smallint, money, float, DateTime, nchar, nvarchar…

3. Một số khái niệm cần lưu ý:

-  Các thông tin trong thực tế thường được lưu trữ dưới dạng tập hợp các bảng, mỗi bảng gồm các dòng và các cột. Tên bảng là tên quan hệ. Mỗi dòng của bảng chứa dữ liệu tương ứng với dữ liệu của một thực thể. Có một hoặc nhiều giá trị dùng để phân biệt giữa các dòng. Trên mỗi cột, các giá trị có cùng kiểu dữ liệu.

-  Những giá trị không xác định được biểu diễn trong CSDL quan hệ bởi các giá trị Null. Đây là giá trị đặc biệt, đóng vai trò quan trọng trong CSDL. Hầu hết các hệ quản trị CSDL đều hỗ trợ việc sử dụng giá trị này.

-  Các ràng buộc dữ liệu: một ràng buộc (Constraint) là một hạn chế việc cập nhật dữ liệu lên CSDL. Ràng buộc có thể được đặt trên một hay nhiều cột hoặc bảng, nó đảm bảo rằng dữ liệu phải đáp ứng một số quy tắc toàn vẹn dữ liệu.

·      Ràng buộc PRIMARY KEY là ràng buộc áp lên một cột của bảng dữ liệu. Khi đó, giá trị của cột đối với mỗi hàng (bản ghi) trong bảng dữ liệu là duy nhất.  Ràng buộc PRIMARY KEY được sử dụng để định nghĩa khoá chính của bảng. Mỗi một bảng chỉ có thể có duy nhất một khoá chính và bản thân khoá chính không chấp nhận giá trị NULL. Ràng buộc PRIMARY KEY là cơ sở cho việc đảm bảo tính toàn vẹn thực thể cũng như toàn vẹn tham chiếu.

·      Ràng buộc FOREIGN KEY (Khóa ngoại) là một cột hay một sự kết hợp của nhiều cột được sử dụng để áp đặt mối liên kết dữ liệu giữa hai bảng dữ liệu. FOREIGN KEY của bảng này sẽ là  PRIMARY KEY của một bảng khác. Trong một bảng có thể tạo ra nhiều FOREIGN KEY. Cột FOREIGN KEY có thể chứa giá trị NULL. Ràng buộc FOREIGN KEY để kiểm soát dữ liệu có trong bảng con đồng thời kiểm soát dữ liệu trong bảng cha.

·      Ràng buộc UNIQUE là ràng buộc gần giống PRIMARY KEY, nó xác định các hàng trong bảng phải hoàn toàn khác nhau.

·      Ràng buộc CHECK được sử dụng nhằm chỉ định điều kiện hợp lệ đối với dữ liệu. Mỗi khi có sự thay đổi dữ liệu trên bảng (INSERT, UPDATE), những ràng buộc này sẽ được sử dụng nhằm kiểm tra xem dữ liệu mới có hợp lệ hay không.

·      Ràng buộc DEFAULT áp đặt cho cột của bảng dữ liệu. Khi có dòng mới được thêm vào bảng dữ liệu, nếu không xác định được dữ liệu cho cột thì SQL Server sẽ điền dữ liệu mặc định một cách tự động.

Chương II: Tìm hiểu về Cơ sở dữ liệu mẫu Northwind

Northwind là CSDL mẫu của SQL Server 2000 và những bản trước đó. Trong SQL Server 2005, Microsoft đã thay thế Northwind bằng CSDL AdventureWorks.

CSDL mẫu Northwind có chứa các dữ liệu về việc xuất, nhập khẩu các mặt hàng thực phẩm trên thế giới của một công ty có tên giả định là Northwind.

Các thành phần trong Northwind:

1.Database Diagrams

2.Tables

3.Views

4.Synonyms

5.Programmability

6.Security

1. Database Diagrams:

Đây là nơi mô tả một cách trực quan quan hệ giữa các bảng có trong CSDL.

Ví dụ: ta thể hiện mối quan hệ giữa 4 bảng Products, Order Details, Order, Customers như hình dưới

Ở đây, mỗi bảng là một ô, các cột ở mỗi bảng đều được thể hiện ở các ô này. Ví dụ như bảng Order Details có 5 cột gồm: OrderID, ProductID, UnitPrice, Quantity, Discount. Trong đó ProductID, OrderID là khóa.

2. Các bảng cơ sở dữ liệu - Tables

Tên bảng

Mô tả

Categories

Các loại sản phẩm của Northwind

CustomerCustomerDemo

CustomerDemographics

Customers

Tên của các khách hàng, địa chỉ, số điện thoại

Employees

Tên của các nhân viên, chức vụ và thông tin cá nhân

EmployeeTerritories

Mã nhân viên và mã hạt

Order Details

Các chi tiết về sản phẩm, số lượng và đơn giá cho mỗi đơn đặt hàng trong bảng Orders

Orders

Tên khách hàng, ngày đặt hàng và cước phí vận chuyển cho mỗi đơn hàng

Products

Tên sản phẩm, các nhà cung cấp, giá và đơn vị tồn kho

Region

Mã vùng, tên vùng

Shippers

Tên và số điện thoại của nhà vận chuyển

Suppliers

Tên, địa chỉ, số điện thoại và link trang chủ của nhà cung cấp.

Territories

Mã hạt (thuộc vùng), tên hạt, mã vùng

Lưu ý:

 PK: khóa chính

FK: khóa ngoại

Clust: Clustered Index

Non-Clust: Non-Clustered Index

Allow Nulls: có thể nhận giá trị Null

2.1 Bảng Categories

Đây là câu lệnh tạo bảng Categories với khóa chính là CategoryID sắp xếp theo kiểu tăng dần

CREATE TABLE [dbo].[Categories](

            [CategoryID] [int] IDENTITY(1,1) NOT NULL,

            [CategoryName] [nvarchar](15) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,

            [Description] [ntext] COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

            [Picture] [image] NULL,

 CONSTRAINT [PK_Categories] PRIMARY KEY CLUSTERED

            [CategoryID] ASC

)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

 Các cột dữ liệu trong bảng:

Tên cột

Kiểu dữ liệu

Allow Nulls

Khóa/Index

Mô tả

CategoryID

Int

PK/Clust

Số được tự động tăng với mỗi loại hàng mới

CategoryName

nvarchar(15)

Non-clust

Tên loại thực phẩm

Description

ntext

ü   

Mô tả chi tiết cho loại thực phẩm

Picture

image

ü   

Ảnh đại diện cho loại thực phẩm

Các mối quan hệ:

Bảng cha

Khóa chính

Bảng con

Khóa ngoại

Categories

CategoryID

Products

CategoryID

 Không có ràng buộc

2.2 Bảng CustomerCustomerDemo

Đây là câu lệnh tạo bảng CustomerCustomerDemo.

CREATE TABLE [dbo].[CustomerCustomerDemo](

            [CustomerID] [nchar](5) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,

            [CustomerTypeID] [nchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,

 CONSTRAINT [PK_CustomerCustomerDemo] PRIMARY KEY NONCLUSTERED

            [CustomerID] ASC,

            [CustomerTypeID] ASC

)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

GO

ALTER TABLE [dbo].[CustomerCustomerDemo]  WITH CHECK ADD  CONSTRAINT [FK_CustomerCustomerDemo] FOREIGN KEY([CustomerTypeID])

REFERENCES [dbo].[CustomerDemographics] ([CustomerTypeID])

ALTER TABLE [dbo].[CustomerCustomerDemo] CHECK CONSTRAINT [FK_CustomerCustomerDemo]

GO

ALTER TABLE [dbo].[CustomerCustomerDemo]  WITH CHECK ADD  CONSTRAINT [FK_CustomerCustomerDemo_Customers] FOREIGN KEY([CustomerID])

REFERENCES [dbo].[Customers] ([CustomerID])

GO

ALTER TABLE [dbo].[CustomerCustomerDemo] CHECK CONSTRAINT [FK_CustomerCustomerDemo_Customers]

Ở bảng này, CustomerID, CustomerTypeID vừa là khóa chính vừa là khóa ngoại. CustomerTypeID là khóa ngoại sẽ tham chiếu đến bảng  CustomerDemoGraphic, CustomerID là khóa ngoại sẽ tham chiếu đến bảng Customers

Các cột dữ liệu

Tên cột

Kiểu dữ liệu

Allow Nulls

Khóa/Index

CustomerID

nchar(5)

PK, FK

CustomerTypeID

nchar(10)

PK, FK

Các quan hệ

Bảng cha

Khóa chính

Bảng con

Khóa ngoại

CustomerCustomerDemo

CustomerTypeID

CustomerDemoGraphic

CustomerTypeID

2.3 Bảng CustomerDemoGraphics

Đây là câu lệnh tạo bảng CustomerDemoGraphics có khóa chính là CustomerTypeID

CREATE TABLE [dbo].[CustomerDemographics](

            [CustomerTypeID] [nchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,

            [CustomerDesc] [ntext] COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

 CONSTRAINT [PK_CustomerDemographics] PRIMARY KEY NONCLUSTERED

            [CustomerTypeID] ASC

)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

Các cột dữ liệu:

Tên cột

Kiểu dữ liệu

Allow Nulls

Khóa/Index

CustomerTypeID

PK

CustomerDesc

ntext

ü   

Các quan hệ

Bảng cha

Khóa chính

Bảng con

Khóa ngoại

CustomerCustomerDemo

CustomerTypeID

CustomerDemoGraphic

CustomerTypeID

2.4 Bảng Customers

Đây là câu lệnh tạo bảng Customers có khóa chính là CustomerID

CREATE TABLE [dbo].[Customers](

            [CustomerID] [nchar](5) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,

            [CompanyName] [nvarchar](40) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,

            [ContactName] [nvarchar](30) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

            [ContactTitle] [nvarchar](30) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

            [Address] [nvarchar](60) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

            [City] [nvarchar](15) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

            [Region] [nvarchar](15) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

            [PostalCode] [nvarchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

            [Country] [nvarchar](15) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

            [Phone] [nvarchar](24) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

            [Fax] [nvarchar](24) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

 CONSTRAINT [PK_Customers] PRIMARY KEY CLUSTERED

            [CustomerID] ASC

)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

Các cột dữ liệu trong bảng:

Tên cột

Kiểu dữ liệu

Allow Nulls

Khóa/Index

Mô tả

CustomerID

nchar(5)

PK/Clust

Mã hóa 5 kí tự dựa vào tên khách hàng

CompanyName

nvarchar(40)

Non-Clust

Tên công ty khách hàng

ContactName

nvarchar(30)

ü   

Tên người giao dịch

ContactTitle

nvarchar(30)

ü   

Chức vụ của người giao dịch

Address

nvarchar(60)

ü   

Địa chỉ

City

nvarchar(15)

ü   

Non-Clust

Tên thành phố

Region

nvarchar(15)

ü   

Non-Clust

Tên vùng

PostalCode

nvarchar(10)

ü   

Non-Clust

Mã bưu điện

Country

nvarchar(15)

ü   

Tên nước khách hàng ở

Phone

nvarchar(24)

ü   

Số điện thoại bao gồm cả mã nước hoặc mã vùng

Fax

nvarchar(24)

ü   

Số fax bao gồm cả mã nước hoặc mã vùng

Các mối quan hệ

Bảng cha

Khóa chính

Bảng con

Khóa ngoại

Customers

CustomerID

Orders

CustomerID

Không có ràng buộc

2.5 Bảng Employees

Đây là câu lệnh tạo bảng Employees với khóa chính là EmployeeID

CREATE TABLE [dbo].[Employees](

            [EmployeeID] [int] IDENTITY(1,1) NOT NULL,

            [LastName] [nvarchar](20) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,

            [FirstName] [nvarchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,

            [Title] [nvarchar](30) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

            [TitleOfCourtesy] [nvarchar](25) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

            [BirthDate] [datetime] NULL,

            [HireDate] [datetime] NULL,

            [Address] [nvarchar](60) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

            [City] [nvarchar](15) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

            [Region] [nvarchar](15) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

            [PostalCode] [nvarchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

            [Country] [nvarchar](15) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

            [HomePhone] [nvarchar](24) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

            [Extension] [nvarchar](4) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

            [Photo] [image] NULL,

            [Notes] [ntext] COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

            [ReportsTo] [int] NULL,

            [PhotoPath] [nvarchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

 CONSTRAINT [PK_Employees] PRIMARY KEY CLUSTERED

            [EmployeeID] ASC

)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

ALTER TABLE [dbo].[Employees]  WITH NOCHECK ADD  CONSTRAINT [FK_Employees_Employees] FOREIGN KEY([ReportsTo])

REFERENCES [dbo].[Employees] ([EmployeeID])

GO

ALTER TABLE [dbo].[Employees] CHECK CONSTRAINT [FK_Employees_Employees]

GO

ALTER TABLE [dbo].[Employees]  WITH NOCHECK ADD  CONSTRAINT [CK_Birthdate] CHECK  (([BirthDate] < getdate()))

GO

ALTER TABLE [dbo].[Employees] CHECK CONSTRAINT [CK_Birthdate]

Ở bảng này, khóa ngoài là ReportsTo tham chiếu đến cột EmployeeID chính trong bảng Employees.

Cột BirthDate có ràng buộc CHECK: BirthDate<getdate()

Các cột dữ liệu:

Tên cột

Kiểu dữ liệu

Allow Nulls

Khóa/Index

Mô tả

EmployeeID

PK/Clust

Tăng tự động lên 1 với mỗi nhân viên mới

LastName

nvarchar(20)

Non-clust

Họ nhân viên

FirstName

nvarchar(10)

Tên nhân viên

Title

nvarchar(30)

ü   

Chức vụ

TitleOfCourtesy

nvarchar(25)

ü   

Danh xưng (Ông/Bà)

BirthDate

datetime

ü   

Ngày sinh

HireDate

datetime

ü   

Ngày vào làm

Address

nvarchar(50)

ü   

Địa chỉ

City

nvarchar(15)

ü   

Tên thành phố

Region

nvarchar(15)

ü   

Tên vùng

PostalCode

nvarchar(10)

ü   

Non-clust

Mã bưu điện

Country

nvarchar(15)

ü   

Tên nước

HomePhone

nvarchar(24)

ü   

Số điện thoại nhà

Extension

nvarchar(4)

ü   

Số máy lẻ

Photo

image

ü   

Ảnh nhân viên

Notes

ntext

ü   

Một vài ghi chú về nhân viên

ReportsTo

ü   

FK (Employees)

EmployeeID

Nộp báo cáo cho ai

PhotoPath

nvarchar(255)

ü   

Đường dẫn ảnh

Các mối quan hệ:

Bảng cha

Khóa chính

Bảng con

Khóa ngoại

 Employees

 EmployeeID

Order

EmployeeID

EmployeeTerritories

EmployeeID

Ràng buộc:

Cột BirthDate có ràng buộc CHECK: BirthDate<getdate()

2.6 Bảng EmployeeTerritories

Đây là câu lệnh tạo bảng EmployeeTerritories với khóa chính là EmployeeID và TerritoryID

CREATE TABLE [dbo].[EmployeeTerritories](

            [EmployeeID] [int] NOT NULL,

            [TerritoryID] [nvarchar](20) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,

 CONSTRAINT [PK_EmployeeTerritories] PRIMARY KEY NONCLUSTERED

            [EmployeeID] ASC,

            [TerritoryID] ASC

)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

GO

ALTER TABLE [dbo].[EmployeeTerritories]  WITH CHECK ADD  CONSTRAINT [FK_EmployeeTerritories_Employees] FOREIGN KEY([EmployeeID])

REFERENCES [dbo].[Employees] ([EmployeeID])

GO

ALTER TABLE [dbo].[EmployeeTerritories] CHECK CONSTRAINT [FK_EmployeeTerritories_Employees]

GO

ALTER TABLE [dbo].[EmployeeTerritories]  WITH CHECK ADD  CONSTRAINT [FK_EmployeeTerritories_Territories] FOREIGN KEY([TerritoryID])

REFERENCES [dbo].[Territories] ([TerritoryID])

GO

ALTER TABLE [dbo].[EmployeeTerritories] CHECK CONSTRAINT [FK_EmployeeTerritories_Territories]

Bảng này có EmployeeID, TerritoryID sẽ tham chiếu lần lượt đến bảng Employees và bảng Territories.

Các cột:

Tên cột

Kiểu dữ liệu

Allow Nulls

Khóa/Index

EmployeeID

PK, FK

TerritoryID

nvarchar(20)

PK, FK

Các quan hệ:

Bảng cha

Khóa chính

Bảng con

Khóa ngoại

Employees

EmployeeID

EmployeeTerritories

EmployeeID

Territories

TerritoryID

EmployeeTerritories

TerritotyID

Không có ràng buộc

2.7 Bảng Order Details

Đây là câu lệnh tạo bảng Order Details với khóa chính là OrderID va ProductID

CREATE TABLE [dbo].[Order Details](

            [OrderID] [int] NOT NULL,

            [ProductID] [int] NOT NULL,

            [UnitPrice] [money] NOT NULL CONSTRAINT [DF_Order_Details_UnitPrice]  DEFAULT (0),

            [Quantity] [smallint] NOT NULL CONSTRAINT [DF_Order_Details_Quantity]  DEFAULT (1),

            [Discount] [real] NOT NULL CONSTRAINT [DF_Order_Details_Discount]  DEFAULT (0),

 CONSTRAINT [PK_Order_Details] PRIMARY KEY CLUSTERED

            [OrderID] ASC,

            [ProductID] ASC

)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

GO

ALTER TABLE [dbo].[Order Details]  WITH NOCHECK ADD  CONSTRAINT [FK_Order_Details_Orders] FOREIGN KEY([OrderID])

REFERENCES [dbo].[Orders] ([OrderID])

GO

ALTER TABLE [dbo].[Order Details] CHECK CONSTRAINT [FK_Order_Details_Orders]

GO

ALTER TABLE [dbo].[Order Details]  WITH NOCHECK ADD  CONSTRAINT [FK_Order_Details_Products] FOREIGN KEY([ProductID])

REFERENCES [dbo].[Products] ([ProductID])

GO

ALTER TABLE [dbo].[Order Details] CHECK CONSTRAINT [FK_Order_Details_Products]

GO

ALTER TABLE [dbo].[Order Details]  WITH NOCHECK ADD  CONSTRAINT [CK_Discount] CHECK  (([Discount] >= 0 and [Discount] <= 1))

GO

ALTER TABLE [dbo].[Order Details] CHECK CONSTRAINT [CK_Discount]

GO

ALTER TABLE [dbo].[Order Details]  WITH NOCHECK ADD  CONSTRAINT [CK_Quantity] CHECK  (([Quantity] > 0))

GO

ALTER TABLE [dbo].[Order Details] CHECK CONSTRAINT [CK_Quantity]

GO

ALTER TABLE [dbo].[Order Details]  WITH NOCHECK ADD  CONSTRAINT [CK_UnitPrice] CHECK  (([UnitPrice] >= 0))

GO

ALTER TABLE [dbo].[Order Details] CHECK CONSTRAINT [CK_UnitPrice]

Bảng có khóa ngoại là ProductID tham chiếu đến bảng Products và một số ràng buộc CHECK

Các cột dữ liệu:

Tên cột

Kiểu dữ liệu

Allow Nulls

Khóa/Index

Mô tả

OrderID

Int

PK,Clust,FK

giống trong bảng Orders

ProductID

Int

PK,Clust,FK

giống trong bảng Products

UnitPrice

Money

Giá đơn vị

Quantity

Smallint

Số lượng

Discount

Real

Tỉ lệ chiết khấu

Các ràng buộc:

-       Cột UnitPrice ràng buộc CHECK (UnitPrice >= 0)

-       Cột Quantity ràng buộc CHECK (Quantity > 0)

-       Toàn bảng Ràng buộc CHECK (Discount >= 0 and Discount <= 1)

2.8 Bảng Orders

Đây là câu lệnh tạo bảng Orders với khóa chính là CustomerID, khóa ngoại là EmployeeID tham chiếu đến bảng Employees và ShipVia tham chiếu đến cột ShipperID trong bảng Shippers.

CREATE TABLE [dbo].[Orders](

            [OrderID] [int] IDENTITY(1,1) NOT NULL,

            [CustomerID] [nchar](5) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

            [EmployeeID] [int] NULL,

            [OrderDate] [datetime] NULL,

            [RequiredDate] [datetime] NULL,

            [ShippedDate] [datetime] NULL,

            [ShipVia] [int] NULL,

            [Freight] [money] NULL CONSTRAINT [DF_Orders_Freight]  DEFAULT (0),

            [ShipName] [nvarchar](40) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

            [ShipAddress] [nvarchar](60) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

            [ShipCity] [nvarchar](15) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

            [ShipRegion] [nvarchar](15) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

            [ShipPostalCode] [nvarchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

            [ShipCountry] [nvarchar](15) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

 CONSTRAINT [PK_Orders] PRIMARY KEY CLUSTERED

            [OrderID] ASC

)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

GO

ALTER TABLE [dbo].[Orders]  WITH NOCHECK ADD  CONSTRAINT [FK_Orders_Customers] FOREIGN KEY([CustomerID])

REFERENCES [dbo].[Customers] ([CustomerID])

GO

ALTER TABLE [dbo].[Orders] CHECK CONSTRAINT [FK_Orders_Customers]

GO

ALTER TABLE [dbo].[Orders]  WITH NOCHECK ADD  CONSTRAINT [FK_Orders_Employees] FOREIGN KEY([EmployeeID])

REFERENCES [dbo].[Employees] ([EmployeeID])

GO

ALTER TABLE [dbo].[Orders] CHECK CONSTRAINT [FK_Orders_Employees]

GO

ALTER TABLE [dbo].[Orders]  WITH NOCHECK ADD  CONSTRAINT [FK_Orders_Shippers] FOREIGN KEY([ShipVia])

REFERENCES [dbo].[Shippers] ([ShipperID])

GO

ALTER TABLE [dbo].[Orders] CHECK CONSTRAINT [FK_Orders_Shippers]

Các cột dữ liệu:

Tên cột

Kiểu dữ liệu

Allow Nulls

Khóa/Index

Mô tả

OrderID

Int

PK, Clust

Tự tăng 1 với mỗi hóa đơn mới

CustomerID

Nchar(5)

ü 

FK Customers (CustomerID)

giống trong bảng Customers

EmployeeID

Int

ü 

FK Employees (EmployeeID)

giống trong bảng Employees

OrderDate

Datetime

ü 

Non-clust

Ngày đặt hàng

RequiredDate

Datetime

ü 

Ngày nhận hàng

ShippedDate

Datetime

ü 

Non-clust

Ngày chuyển hàng

Shipvia

Int

ü 

FK Shippers(ShipperID)

giống ShipperID trong bảng Shippers

Freight

Money

ü 

Cước vận chuyển

ShipName

Nvarchar(40)

ü 

tên người hoặc công ty nhận xếp hàng hóa

ShipAddress

Nvarchar(60)

ü 

Địa chỉ

ShipCity

Nvarchar(15)

ü 

Tên thành phố chuyển hàng đến

ShipRegion

Nvarchar(15)

ü 

Tên vùng chuyển hàng đến

ShipPostalCode

Nvarchar(10)

ü 

Non-clust

Mã bưu điện nơi hàng chuyển đến

ShipCountry

Nvarchar(15)

ü 

Tên đất nước nơi hàng chuyển đến

Các mối quan hệ:

Bảng cha

Khóa chính

Bảng con

Khóa ngoài

Customers

CustomerID

Orders

CustomerID

Employees

EmployeeID

Orders

EmployeeID

Shippers

ShipperID

Orders

Shipvia

Orders

OrderID

Order Details

OrderID

Không có ràng buộc

2.9 Bảng Products

Đây là câu lệnh tạo bảng Products, một số cột có thiết lập giá trị mặc định. Khóa chính của bảng ProductID, khóa ngoại là CategoryID và SupplierID tham chiếu lần lượt đến các bảng Categories và Suppliers. Một số ràng buộc CHECK.

CREATE TABLE [dbo].[Products](

            [ProductID] [int] IDENTITY(1,1) NOT NULL,

            [ProductName] [nvarchar](40) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,

            [SupplierID] [int] NULL,

            [CategoryID] [int] NULL,

            [QuantityPerUnit] [nvarchar](20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

            [UnitPrice] [money] NULL CONSTRAINT [DF_Products_UnitPrice]  DEFAULT (0),

            [UnitsInStock] [smallint] NULL CONSTRAINT [DF_Products_UnitsInStock]  DEFAULT (0),

            [UnitsOnOrder] [smallint] NULL CONSTRAINT [DF_Products_UnitsOnOrder]  DEFAULT (0),

            [ReorderLevel] [smallint] NULL CONSTRAINT [DF_Products_ReorderLevel]  DEFAULT (0),

            [Discontinued] [bit] NOT NULL CONSTRAINT [DF_Products_Discontinued]  DEFAULT (0),

 CONSTRAINT [PK_Products] PRIMARY KEY CLUSTERED

            [ProductID] ASC

)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

GO

ALTER TABLE [dbo].[Products]  WITH NOCHECK ADD  CONSTRAINT [FK_Products_Categories] FOREIGN KEY([CategoryID])

REFERENCES [dbo].[Categories] ([CategoryID])

GO

ALTER TABLE [dbo].[Products] CHECK CONSTRAINT [FK_Products_Categories]

GO

ALTER TABLE [dbo].[Products]  WITH NOCHECK ADD  CONSTRAINT [FK_Products_Suppliers] FOREIGN KEY([SupplierID])

REFERENCES [dbo].[Suppliers] ([SupplierID])

GO

ALTER TABLE [dbo].[Products] CHECK CONSTRAINT [FK_Products_Suppliers]

GO

ALTER TABLE [dbo].[Products]  WITH NOCHECK ADD  CONSTRAINT [CK_Products_UnitPrice] CHECK  (([UnitPrice] >= 0))

GO

ALTER TABLE [dbo].[Products] CHECK CONSTRAINT [CK_Products_UnitPrice]

GO

ALTER TABLE [dbo].[Products]  WITH NOCHECK ADD  CONSTRAINT [CK_ReorderLevel] CHECK  (([ReorderLevel] >= 0))

GO

ALTER TABLE [dbo].[Products] CHECK CONSTRAINT [CK_ReorderLevel]

GO

ALTER TABLE [dbo].[Products]  WITH NOCHECK ADD  CONSTRAINT [CK_UnitsInStock] CHECK  (([UnitsInStock] >= 0))

GO

ALTER TABLE [dbo].[Products] CHECK CONSTRAINT [CK_UnitsInStock]

GO

ALTER TABLE [dbo].[Products]  WITH NOCHECK ADD  CONSTRAINT [CK_UnitsOnOrder] CHECK  (([UnitsOnOrder] >= 0))

GO

ALTER TABLE [dbo].[Products] CHECK CONSTRAINT [CK_UnitsOnOrder]

Các cột dữ liệu:

Tên cột

Kiểu dữ liệu

Allow Nulls

Khóa/Index

Mô tả

ProductID

Int

PK,Clust

Số tự động được đánh dấu cho sản phẩm mới

ProductName

Nvarchar(40)

non-clust

Tên sản phẩm

SupplierID

ü 

FK Suppliers(SupplierID)

Nhập vào giống bảng Suppliers

CategoryID

Int

ü 

FK Categories(CategoryID)

Nhập vào giống bảng Categories

QuantityPerUnit

Nvarchar(20)

ü 

Số lượng trên mỗi đơn vị

Unit Price

money

ü 

Giá trên mỗi đơn vị

UnitsInStock

Smallint

ü 

Số đơn vị trong kho

UnitsOnOrder

Smallint

ü 

Số đơn vị trong đơn đặt hàng

ReorderLevel

smallint

ü 

Số lần đặt mua bổ sung

Discontinued

Bit

.T. tức là ngừng bán

   Các quan hệ :

Bảng cha

Khóa chính

Bảng con

Khóa ngoại

Categories

CategoryID

Products

CategoryID

Suppliers

SupplierID

Products

SupplierID

Products

ProductID

OrderDetails

ProductID

Các ràng buộc:

-       Cột UnitPrice ràng buộc CHECK : (UnitPrice >= 0)

-       Cột UnitInStock ràng buộc CHECK: (UnitInStock >= 0)

-       Cột UnitOnOrder ràng buộc CHECK: (UnitOnOrder >= 0)

-       Cột RecordsLevel ràng buộc CHECK: (RecordsLevel >= 0)

2.10 Bảng Region

Đây là câu lệnh tạo bảng Region với khóa chính là RegionID

CREATE TABLE [dbo].[Region](

            [RegionID] [int] NOT NULL,

            [RegionDescription] [nchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,

 CONSTRAINT [PK_Region] PRIMARY KEY NONCLUSTERED

            [RegionID] ASC

)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

Các cột dữ liệu:

Name

Kiểu dữ liệu

Allow Nulls

Khóa/Index

Mô tả

RegionID

Int

PK

Số tự động đánh cho khu vực

RegionDescription

Nchar(50)

Mô tả khu vực ( Bắc, Nam, Đông, Tây)

Không có ràng buộc

2.11 Bảng Shippers

Đây là câu lệnh tạo bảng Shippers với khóa chính là ShipperID

CREATE TABLE [dbo].[Shippers](

            [ShipperID] [int] IDENTITY(1,1) NOT NULL,

            [CompanyName] [nvarchar](40) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,

            [Phone] [nvarchar](24) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

 CONSTRAINT [PK_Shippers] PRIMARY KEY CLUSTERED

            [ShipperID] ASC

)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

Các cột dữ liệu

Name

Kiểu dữ liệu

Allow Nulls

PK/Index

Mô tả

ShipperID

Int

PK

 Tự động tăng 1 cho mỗi nhà vận chuyển mới

CompanyName

Nvarchar(40)

Tên công ty vận chuyển

Phone

Nvarchar(24)

ü   

Số điện thoại công ty vận chuyển (bao gồm cả mã quốc gia và mã khu vực)

 Các quan hệ

Bảng cha

Khóa chính

Bảng con

Khóa ngoại

Shippers

ShipperID

Orders

ShipVia

Không có ràng buộc

2.12 Bảng Suppliers

Đây là câu lệnh tạo bảng Suppliers với khóa chính là SupplierID

CREATE TABLE [dbo].[Suppliers](

            [SupplierID] [int] IDENTITY(1,1) NOT NULL,

            [CompanyName] [nvarchar](40) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,

            [ContactName] [nvarchar](30) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

            [ContactTitle] [nvarchar](30) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

            [Address] [nvarchar](60) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

            [City] [nvarchar](15) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

            [Region] [nvarchar](15) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

            [PostalCode] [nvarchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

            [Country] [nvarchar](15) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

            [Phone] [nvarchar](24) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

            [Fax] [nvarchar](24) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

            [HomePage] [ntext] COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

 CONSTRAINT [PK_Suppliers] PRIMARY KEY CLUSTERED

            [SupplierID] ASC

)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

Các cột dữ liệu:

Tên

Kiểu dữ liệu

Allow Nulls

PK/Index

Mô tả

SupplierID

Int

PK, clust

Số được tự động đánh cho nhà cung cấp mới

CompanyName

Nvarchar(40)

non-clust

Tên nhà cung cấp

ContactName

Nvarchar(30)

ü   

Tên người đại diện của nhà cung cấp

ContactTitle

Nvarchar(30)

ü   

Chức vụ người đại diện của nhà cung cấp

Address

Nvarchar(60)

ü   

Tên phố hoặc hộp thư bưu điện

City

Nvarchar(15)

ü   

Tên thành phố nơi nhà cung cấp đặt trụ sở

Region

Nvarchar(15)

ü   

Tên tiểu bang hoặc tỉnh

PostalCode

Nvarchar(10)

ü   

non-clust

Mã bưu chính nơi nhà cung cấp đặt trụ sở

Country

Nvarchar(15)

ü   

Tên của quốc gia nơi nhà cung cấp đặt trụ sở

Phone

Nvarchar(24)

ü   

Số điện thoại bao gồm mã quốc gia hoặc mã vung

Fax

Nvarchar(24)

ü   

Số Fax bao gồm mã quốc gia hoặc mã vùng

HomePage

Ntext

ü   

Trang chủ nhà cung cấp trên World Wide Web

Các quan hệ:

Bảng cha

Khóa chính

Bảng con

Khóa ngoại

Suppliers

SupplierID

Products

SupplierID

Không có ràng buộc

2.13 Bảng Territories:

Đây là câu lệnh tạo bảng Territories vói khóa chính là TerritoryID, khóa ngoài là RegionID tham chiếu đến bảng Regions.

CREATE TABLE [dbo].[Territories](

            [TerritoryID] [nvarchar](20) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,

            [TerritoryDescription] [nchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,

            [RegionID] [int] NOT NULL,

 CONSTRAINT [PK_Territories] PRIMARY KEY NONCLUSTERED

            [TerritoryID] ASC

)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

GO

ALTER TABLE [dbo].[Territories]  WITH CHECK ADD  CONSTRAINT [FK_Territories_Region] FOREIGN KEY([RegionID])

REFERENCES [dbo].[Region] ([RegionID])

GO

ALTER TABLE [dbo].[Territories] CHECK CONSTRAINT [FK_Territories_Region]

Các cột dữ liệu:

Tên cột

Kiểu dữ liệu

Allow Nulls

Khóa/Index

Mô tả

TerritoryID

Nvarchar(20)

PK

Số của vùng lãnh thổ

TerritoryDescription

Nvarchar(50)

Mô tả vùng lãnh thổ

RegionID

FK

Số của tiểu bang hoặc tỉnh

Các quan hệ

Bảng cha

Khóa chính

Bảng con

Khóa ngoại

Torritories

TerritoryID

EmployeeTerritories

TerritoryID

Region

RegionID

Territories

RegionID

Không có ràng buộc

3. View

Chúng ta sử dụng khung nhìn (View) để tìm kiếm một tập các cột từ 1 hoặc nhiều bảng. View có thể được cho như là một cách khá linh hoạt trong việc xem xét các hàng trong các bảng. Chúng ta có thể tạo mới, xem xét các thuộc tính, truy vấn các hàng thông qua một view.

Ví dụ: Chúng ta muốn tìm kiếm danh sách các sản phẩm theo thứ tự bảng chữ cái, tìm kiếm tên sản phẩm, tên loại sản phẩm. Khí đó, thông tin sẽ được tổng hợp từ bảng Products và bảng Categories.

Sau đây là các View trong Northwind

3.1 Alphabetical list of products

Liệt kê danh sách các sản phẩm theo loại sản phẩm. Dữ liệu được lấy từ bảng Categories và bảng Products với điều kiện là các mặt hàng vẫn còn xuất bán.

SELECT     dbo.Products.ProductID, dbo.Products.ProductName,     dbo.Products.SupplierID,dbo.Products.CategoryID,dbo.Products.QuantityPerUnit, dbo.Products.UnitPrice, dbo.Products.UnitsInStock, dbo.Products.UnitsOnOrder, dbo.Products.ReorderLevel, dbo.Products.Discontinued, dbo.Categories.CategoryName

FROM         dbo.Categories INNER JOIN

                      dbo.Products ON dbo.Categories.CategoryID = dbo.Products.CategoryID

WHERE     (dbo.Products.Discontinued = 0)

3.2 Category Sales for 1997

Tính tổng doanh thu bán hàng của các mặt hàng trong năm 1997

 SELECT     CategoryName, SUM(ProductSales) AS CategorySales FROM         dbo.[Product Sales for 1997]

GROUP BY CategoryName

3.3 Current Product List

Danh sách các sản phẩm hiện có, với điều kiện là sản phẩm này vẫn còn được xuất bán

SELECT     ProductID, ProductName

FROM         dbo.Products AS Product_List

WHERE     (Discontinued = 0)

3.4 Customer and Suppliers by City

Danh sách các khách hàng và nhà cung cấp theo từng thành phố

SELECT     City, CompanyName, ContactName, 'Customers' AS Relationship

FROM         dbo.Customers

UNION

SELECT     City, CompanyName, ContactName, 'Suppliers' AS Expr1

FROM         dbo.Suppliers

3.5 Invoices

In hóa đơn, các thông tin cần thiết được lấy từ các cột đánh dấu trong 6 bảng dưới đây, có tính toán các khoản chiết khấu

SELECT     dbo.Orders.ShipName, dbo.Orders.ShipAddress, dbo.Orders.ShipCity, dbo.Orders.ShipRegion, dbo.Orders.ShipPostalCode, dbo.Orders.ShipCountry,

                      dbo.Orders.CustomerID, dbo.Customers.CompanyName AS CustomerName, dbo.Customers.Address, dbo.Customers.City, dbo.Customers.Region,

                      dbo.Customers.PostalCode, dbo.Customers.Country, dbo.Employees.FirstName + ' ' + dbo.Employees.LastName AS Salesperson, dbo.Orders.OrderID,

                      dbo.Orders.OrderDate, dbo.Orders.RequiredDate, dbo.Orders.ShippedDate, dbo.Shippers.CompanyName AS ShipperName, dbo.[Order Details].ProductID,

                      dbo.Products.ProductName, dbo.[Order Details].UnitPrice, dbo.[Order Details].Quantity, dbo.[Order Details].Discount, CONVERT(money,

                      (dbo.[Order Details].UnitPrice * dbo.[Order Details].Quantity) * (1 - dbo.[Order Details].Discount) / 100) * 100 AS ExtendedPrice, dbo.Orders.Freight

FROM         dbo.Shippers INNER JOIN

                      dbo.Products INNER JOIN

                      dbo.Employees INNER JOIN

                      dbo.Customers INNER JOIN

                      dbo.Orders ON dbo.Customers.CustomerID = dbo.Orders.CustomerID ON dbo.Employees.EmployeeID = dbo.Orders.EmployeeID INNER JOIN

                      dbo.[Order Details] ON dbo.Orders.OrderID = dbo.[Order Details].OrderID ON dbo.Products.ProductID = dbo.[Order Details].ProductID ON

                      dbo.Shippers.ShipperID = dbo.Orders.ShipVia

3.6 Order Details Extended

Với view này, chúng ta nhìn được rộng hơn chi tiết các hóa đơn (ở đây có thêm cột tên sản phẩm) và có tính toán số tiền của mỗi hóa đơn.

SELECT     dbo.[Order Details].OrderID, dbo.[Order Details].ProductID, dbo.Products.ProductName, dbo.[Order Details].UnitPrice, dbo.[Order Details].Quantity,

                      dbo.[Order Details].Discount, CONVERT(money, (dbo.[Order Details].UnitPrice * dbo.[Order Details].Quantity) * (1 - dbo.[Order Details].Discount) / 100)

                      * 100 AS ExtendedPrice

FROM         dbo.Products INNER JOIN

                      dbo.[Order Details] ON dbo.Products.ProductID = dbo.[Order Details].ProductID

3.7 Order SubTotals

Tính tổng tiền của mỗi hóa đơn theo từng mã

SELECT     OrderID, SUM(CONVERT(money, (UnitPrice * Quantity) * (1 - Discount) / 100) * 100) AS Subtotal

FROM         dbo.[Order Details]

GROUP BY OrderID

3.8 Order Qry

Liệt kê đầy đủ các thông tin của từng hóa đơn liên quan đến nhân viên, khách hàng, ngày tháng nhận, giao hàng, cách thức vận chuyển, cước phí vận chuyển…

SELECT     dbo.Orders.OrderID, dbo.Orders.CustomerID, dbo.Orders.EmployeeID, dbo.Orders.OrderDate, dbo.Orders.RequiredDate, dbo.Orders.ShippedDate, dbo.Orders.ShipVia,

                      dbo.Orders.Freight, dbo.Orders.ShipName, dbo.Orders.ShipAddress, dbo.Orders.ShipCity, dbo.Orders.ShipRegion, dbo.Orders.ShipPostalCode,

                      dbo.Orders.ShipCountry, dbo.Customers.CompanyName, dbo.Customers.Address, dbo.Customers.City, dbo.Customers.Region, dbo.Customers.PostalCode,

                      dbo.Customers.Country

FROM         dbo.Customers INNER JOIN

                      dbo.Orders ON dbo.Customers.CustomerID = dbo.Orders.CustomerID

3.9 Product Sales for 1997

Doanh thu bán hàng của từng sản phẩm trong năm 1997, đồng thời cũng biết được sản phẩm đó thuộc loại sản phẩm  nào.

SELECT     dbo.Categories.CategoryName, dbo.Products.ProductName, SUM(CONVERT(money, (dbo.[Order Details].UnitPrice * dbo.[Order Details].Quantity)

                      * (1 - dbo.[Order Details].Discount) / 100) * 100) AS ProductSales

FROM         dbo.Categories INNER JOIN

                      dbo.Products ON dbo.Categories.CategoryID = dbo.Products.CategoryID INNER JOIN

                      dbo.Orders INNER JOIN

                      dbo.[Order Details] ON dbo.Orders.OrderID = dbo.[Order Details].OrderID ON dbo.Products.ProductID = dbo.[Order Details].ProductID

WHERE     (dbo.Orders.ShippedDate BETWEEN '19970101' AND '19971231')

GROUP BY dbo.Categories.CategoryName, dbo.Products.ProductName

3.10 Products Above Average Price

Cho biết sản phẩm nào có giá đơn vị cao hơn mức giá đơn vị trung bình

SELECT     ProductName, UnitPrice

FROM         dbo.Products

WHERE     (UnitPrice >

                          (SELECT     AVG(UnitPrice) AS Expr1

                            FROM          dbo.Products))

3.11 Products by Category

Danh sách các sản phẩm theo từng loại mà công ty vẫn còn xuất bán

SELECT     dbo.Categories.CategoryName, dbo.Products.ProductName, dbo.Products.QuantityPerUnit, dbo.Products.UnitsInStock, dbo.Products.Discontinued

FROM         dbo.Categories INNER JOIN

                      dbo.Products ON dbo.Categories.CategoryID = dbo.Products.CategoryID

WHERE     (dbo.Products.Discontinued <> 1)

3.12 Quarterly Order

Danh sách khách hàng có ngày đặt hàng  trong năm 1997

SELECT DISTINCT dbo.Customers.CustomerID, dbo.Customers.CompanyName, dbo.Customers.City, dbo.Customers.Country

FROM         dbo.Customers RIGHT OUTER JOIN

                      dbo.Orders ON dbo.Customers.CustomerID = dbo.Orders.CustomerID

WHERE     (dbo.Orders.OrderDate BETWEEN '19970101' AND '19971231')

3.13 Sales by Category

Doanh thu bán hàng theo từng loại sản phẩm

SELECT     dbo.Categories.CategoryID, dbo.Categories.CategoryName, dbo.Products.ProductName, SUM(dbo.[Order Details Extended].ExtendedPrice) AS ProductSales

FROM         dbo.Categories INNER JOIN

                      dbo.Products INNER JOIN

                      dbo.Orders INNER JOIN

                      dbo.[Order Details Extended] ON dbo.Orders.OrderID = dbo.[Order Details Extended].OrderID ON dbo.Products.ProductID = dbo.[Order Details Extended].ProductID ON

                      dbo.Categories.CategoryID = dbo.Products.CategoryID

WHERE     (dbo.Orders.OrderDate BETWEEN '19970101' AND '19971231')

GROUP BY dbo.Categories.CategoryID, dbo.Categories.CategoryName, dbo.Products.ProductName

3.14 Sales Totals by Amount

SELECT     dbo.[Order Subtotals].Subtotal AS SaleAmount, dbo.Orders.OrderID, dbo.Customers.CompanyName, dbo.Orders.ShippedDate

FROM         dbo.Customers INNER JOIN

                      dbo.Orders INNER JOIN

                      dbo.[Order Subtotals] ON dbo.Orders.OrderID = dbo.[Order Subtotals].OrderID ON dbo.Customers.CustomerID = dbo.Orders.CustomerID

WHERE     (dbo.[Order Subtotals].Subtotal > 2500) AND (dbo.Orders.ShippedDate BETWEEN '19970101' AND '19971231')

3.15 Summary of Sales by Quarter

SELECT     dbo.Orders.ShippedDate, dbo.Orders.OrderID, dbo.[Order Subtotals].Subtotal

FROM         dbo.Orders INNER JOIN

                      dbo.[Order Subtotals] ON dbo.Orders.OrderID = dbo.[Order Subtotals].OrderID

WHERE     (dbo.Orders.ShippedDate IS NOT NULL)

3.16 Summary of Sales by Year

SELECT     dbo.Orders.ShippedDate, dbo.Orders.OrderID, dbo.[Order Subtotals].Subtotal

FROM         dbo.Orders INNER JOIN

                      dbo.[Order Subtotals] ON dbo.Orders.OrderID = dbo.[Order Subtotals].OrderID

WHERE     (dbo.Orders.ShippedDate IS NOT NULL)

4. Synonyms

5. Programmability

5.1 Stored Procedures

Stored Procedure- thủ tục thường trú. Đây là một đối tượng trong CSDL gồm nhiều câu lệnh SQL tập hợp lại với nhau thành một nhóm và tất cả các lệnh này sẽ được thực thi khi thủ tục thường trú được thực thi.

Khi một thủ tục được định nghĩa, nó có thể được gọi thông qua tên.

Bên trong thủ tục thường trú có thể sử dụng các biến nhằm lưu trữ các giá trị tính toán được, các giá trị được truy xuất từ CSDL.

Một thủ tục có thể nhận các tham số truyền vào cũng như có thể trả về các giá trị thông qua các tham số sau khi thực hiện xong.

5.1.1 CustOrderHist

CREATE  PROCEDURE CustOrderHist @CustomerID nchar(5)

AS

SELECT ProductName, Total=SUM(Quantity)

FROM Products P, [Order Details] OD, Orders O, Customers C

WHERE C.CustomerID = @CustomerID

AND C.CustomerID = O.CustomerID AND O.OrderID = OD.OrderID AND OD.ProductID = P.ProductID

GROUP BY ProductName

5.1.2  CustOrderDetail

CREATE PROCEDURE [dbo].[CustOrdersDetail] @OrderID int

AS

SELECT ProductName,

    UnitPrice=ROUND(Od.UnitPrice, 2),

    Quantity,

    Discount=CONVERT(int, Discount * 100),

    ExtendedPrice=ROUND(CONVERT(money, Quantity * (1 - Discount) * Od.UnitPrice), 2)

FROM Products P, [Order Details] Od

WHERE Od.ProductID = P.ProductID and Od.OrderID = @OrderID

5.1.3 CustOrdersOrders

CREATE PROCEDURE [dbo].[CustOrdersOrders] @CustomerID nchar(5)

AS

SELECT OrderID,

            OrderDate,

            RequiredDate,

            ShippedDate

FROM Orders

WHERE CustomerID = @CustomerID

ORDER BY OrderID

5.1.4 Employee Sales by Country

CREATE PROCEDURE [dbo].[Employee Sales by Country]

@Beginning_Date DateTime, @Ending_Date DateTime AS

SELECT Employees.Country, Employees.LastName, Employees.FirstName, Orders.ShippedDate, Orders.OrderID, "Order Subtotals".Subtotal AS SaleAmount

FROM Employees INNER JOIN

            (Orders INNER JOIN "Order Subtotals" ON Orders.OrderID = "Order Subtotals".OrderID)

            ON Employees.EmployeeID = Orders.EmployeeID

WHERE Orders.ShippedDate Between @Beginning_Date And @Ending_Date

5.1.5 Sales by Year

CREATE PROCEDURE [dbo].[Sales by Year]

            @Beginning_Date DateTime, @Ending_Date DateTime AS

SELECT Orders.ShippedDate, Orders.OrderID, "Order Subtotals".Subtotal, DATENAME(yy,ShippedDate) AS Year

FROM Orders INNER JOIN "Order Subtotals" ON Orders.OrderID = "Order Subtotals".OrderID

WHERE Orders.ShippedDate Between @Beginning_Date And @Ending_Date

5.1.6 Sales by Category

CREATE PROCEDURE [dbo].[SalesByCategory]

    @CategoryName nvarchar(15), @OrdYear nvarchar(4) = '1998'

AS

IF @OrdYear != '1996' AND @OrdYear != '1997' AND @OrdYear != '1998'

BEGIN

            SELECT @OrdYear = '1998'

END

SELECT ProductName,

            TotalPurchase=ROUND(SUM(CONVERT(decimal(14,2), OD.Quantity * (1-OD.Discount) * OD.UnitPrice)), 0)

FROM [Order Details] OD, Orders O, Products P, Categories C

WHERE OD.OrderID = O.OrderID

            AND OD.ProductID = P.ProductID

            AND P.CategoryID = C.CategoryID

            AND C.CategoryName = @CategoryName

            AND SUBSTRING(CONVERT(nvarchar(22), O.OrderDate, 111), 1, 4) = @OrdYear

GROUP BY ProductName

ORDER BY ProductName

5.1.7 Ten Most Expensive Product

CREATE PROCEDURE [dbo].[Ten Most Expensive Products] AS

SET ROWCOUNT 10

SELECT Products.ProductName AS TenMostExpensiveProducts, Products.UnitPrice

FROM Products

ORDER BY Products.UnitPrice DESC

5.2 Functions

5.3 Data Triggers

Trigger là một dạng đặc biệt của thủ tục thường trú, được thực thi một cách tự động khi có sự thay đổi dữ liệu (do tác động của lệnh INSERT, UPDATE, DELETE) trên một bảng nào đó

5.4 Assemblies

5.5 Types

5.6 Rules

5.7 Default

6.Security

6.1 Users

·   dbo

·   guest

·   INFORMATION_SCHEMA

·   sys

6.2 Roles

·   db_accessadmin

·   db_backupoperator

·   db_datareader

·   db_datawriter

·   db_ddladmin

·   db_denydatareader

·   db_denydatawriter

·   db_owner

·   db_securityadmin

·   public

6.3 Schema

Bạn đang đọc truyện trên: Truyen2U.Pro