baitapthuchanhcsdl xuanhiens weblog

43 59 1
baitapthuchanhcsdl xuanhiens weblog

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

 Các khách hàng có City là LonDon từ bảng Customers trong NorthWind ra thành tập tin KH.TXT.  Danh sách các sản phẩm ở Products trong NorthWind thành tập tin SanPham.TXT[r]

(1)

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP TP.HCM KHOA CÔNG NGHỆ THÔNG TIN



       

 

Bài tập thiết kế theo TUẦN TUẦN tiết có hướng dẫn GV 

Cuối buổi thực hành, sinh viên nộp lại phần tập thực cho GV hướng dẫn 

Những câu hỏi mở rộng/khó giúp sinh viên trau dồi thêm kiến thức mơn học Sinh viên phải có trách nhiệm nghiên cứu, tìm câu trả lời chưa thực xong thực hành 

(2)

BÀI TẬP TUẦN

Số tiết: Mục tiêu:

 Thao tác với giao diện SQL Server 2008

 Tạo Database - sở liệu (CSDL) thực thao tác CSDL lệnh công cụ design

 Tạo Table (Bảng liệu) nhập liệu công cụ design  Tạo lược đồ quan hệ (Relationship Diagram)

 Biết kiểu liệu (DataType) SQL Server 2008

 Biết tạo, sửa, xóa áp dụng kiểu liệu SQL Server 2008  Biết sử dụng số thủ tục trợ giúp database Datatype

PHẦN 1: TÌM HIỂU SQL SERVER MANAGEMENT STUDIO 1. Giới thiệu SQL Server Management Studio:

 SQL Server Management Studio mơi trường tích hợp cho phép truy cập, cấu hình, quản lý, quản trị phát triển tất công cụ SQL Server Nó kết hợp nhóm cơng cụ đồ họa cho phép soạn thảo lượng lớn mã lệnh tương tác với SQL SERVER đến người quản trị người lập trình

 SQL Server Management Studio kết hợp đặc trưng Enterprise Manager, Query Analyzer, and Analysis Manager vào môi trường thống Bên cạnh đó, SQL Server Management Studio làm việc với tất công cụ SQL Server Reporting Services and Integration Services Người lập trình người quản trị dễ dàng thao tác môi trường đồng thân thiện

2. Khởi động SQL Server Management Studio:

(3)

Hình 1.1 Kết nối vào SQL Server Chú ý thành phần hộp thoại sau:

Server Type: subsystems SQL Server mà người dùng đăng nhập vào, gồm:

o Database engine

o Analysis Services

o Report Server o Integration Services

Server Name: tên Server mà người dùng muốn đăng nhập:

o “.”: đăng nhập vào thể mặc định SQL Server

máy tính đăng nhập

o “.” (local): định danh tự động cách đăng nhập đến server o Nếu bạn mở hộp Server name bạn tìm kiếm nhiều server local

hoặc network connection cách chọn <Browse for more >  Authentication: xác định loại hình kết nối bạn muốn sử dụng Có

cách đăng nhập:

o Windows Authentication: thông tin đăng nhập Windows chuyển thành tài khoản đăng nhập SQL Server

o SQL Server Authentication: Người dùng cung cấp usename

(4)

 Sau nhấn nút Connect xuất hình sau:

3 Chọn Connect: Kết nối

Cancel: Hủy bỏ thao tác Option: Các lựa chọn khác

4 Bạn cho khởi động dịch vụ SQL Server, SQL Server Agent Vào menu View, Chọn Object Explorer Details

 Lần lượt mở nhánh MicroSoft SQL Servers

 Tìm hiểu sơ lược cửa sổ, thực đơn, công cụ SQL Server Management Studio

6 Tại cửa sổ Object Explorer, thực hiện:

Quan sát thành phần đối tượng cửa sổ cho biết:

Có SQL Server Group, Server tên gì? Đang connect hay disconnect?

Liêt kê thành phần Server hành, cho biết chức mỗi thành phần

Trong server hành, có Database nào?

(5)

Trong mỗi Database những đối tượng nào? (Các database khác đối tượng có khác không?)

Mở database Master, khảo sát đối tượng:

 Vào đối tượng Table, tìm hiểu cấu trúc liệu bảng (lưu ý: chọn xem khơng nên xố hay sửa liệu): Sysdatabases, SysObjects, systypes, syslogins, sysusers, sysmessages, syspermissions…

 Vào đối tượng Stored Procedures, tìm hiểu nội dung thủ tục sau (lưu ý: chọn xem không nên xoá hay sửa): sp_help, sp_helpdb, sp_helpcontraint, sp_rename, sp_renamedb, sp_table, sp_addlogin, sp_addmessage, sp_addrole …

 Lần lượt vào đối tượng cịn lại User, Role, …

7 Tìm hiểu mục menu Help Lần lượt tìm hiểu lệnh Create DataBase, Create Table, Alter Table, Select Statement, Select into, Update Statement, Insert Statement, DataType, Triggers… (Hướng dẫn: Gõ tên lệnh/từ khóa cần tìm nhấn Enter)

8. Khởi động hình Query Editor:

Nhập dịng lệnh sau cửa sổ Query Editor: USE master

SELECT * from dbo.MSreplication_options

Nhấn F5 để thực thi quan sát kết hiển thị Tìm hiểu mục menu ToolsOption PHẦN 2: TẠO VÀ QUẢN LÝ CƠ SỞ DỮ LIỆU PHẦN LÝ THUYẾT

I. Giới thiệu Database

1 Databases: chứa tất sở liệu hệ thống sở liệu người dùng

trong SQL Server Cơ sở liệu SQL server sở liệu quan hệ, bao gồm tập quan hệ, quan hệ bảng liệu bao gồm dòng cột

2 Trong CSDL có tối thiểu tập tin:

(6)

o Các file thứ cấp (Secondary data files) (.ndf) (tuỳ chọn): CSDL có

thể có hay khơng có nhiều file thứ cấp, dùng để lưu đối tượng CSDL

o File nhật ký giao dịch (Transaction log file) (.ldf): CSDL có từ hay nhiều file nhật ký, dùng để chứa thông cần thiết cho việc phục hồi tất giao tác (transaction) CSDL

o Về mặt vật lý: Database bao gồm hai hay nhiều hai tập tin hay nhiều đĩa Chỉ thấy nhà quản trị suốt người sử dụng

o Về mặt Logic: database xây dựng thành thành phần mà

được hiển thị với người dùng Table, View, Procedure, …

o Khi tạo CSDL, file liệu log tạo vị trí ta xác định

o Các file có nằm đĩa vật lý khác để cải thiện việc thực thi hệ thống

3 Filegroup chứa hay nhiều file Một CSDL chứa

hay số filegroup Có loại: Primary filegroup, user-define filegroups default filegroup

o Primary FileGroup: chứa file liệu (.mdf) file thứ cấp (.ndf) Tất bảng hệ thống phải nằm primary filegroup

o User-defined filegroup: người dùng xác định lệnh CREATE/ALTER DATABASE

o Default filegroup: filegroup DB Thường primary filegroup default filegroup owner có quyền thay đổi Tất bảng index mặc định tạo default filegroup

II. Các lệnh định nghĩa liệu (DDL - Data Definition Language) 1. Tạo sở liệu:

Cú pháp:

CREATE DATABASE database_name [ ON

[ < filespec > [ , n ] ] [ , < filegroup > [ , n ] ] ]

[ LOG ON { < filespec > [ , n ] } ] Cú pháp Filespec:

(NAME = logical_name,

FILENAME = 'path\filename', SIZE = size_in_MB,

(7)

FILEGROWTH = %_or_MB) Ví dụ : Tạo CSDL Sample

CREATE DATABASE Sample ON

PRIMARY ( NAME=SampleData, FILENAME='T:\BTSQL\Sample.mdf', SIZE=10MB,

MAXSIZE=15MB, FILEGROWTH=20%) LOG ON

( NAME=SampleLog,

FILENAME= ‘T:\BTSQL \Sample.ldf', SIZE=3MB,

MAXSIZE=5MB, FILEGROWTH=1MB) Ví dụ 2: Tạo CSDL Sales

CREATE DATABASE Sales ON PRIMARY

( NAME = Sales1_dat, FILENAME = ‘D:\BTSQL\Sales_dat.mdf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 15% ),

( NAME = Sales2_dat, FILENAME = ‘D:\BTSQL\Sales2_dat.ndf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 15% ),

FILEGROUP SalesGroup1

( NAME = Sales3_dat, FILENAME = ‘D:\BTSQL\Sales3_dat.ndf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = )

( NAME = Sales4_dat,

FILENAME = ‘D:\BTSQL\Sales4_dat.ndf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = ) LOG ON

( NAME = 'Sales_log',

FILENAME = ‘D:\BTSQL\salelog.ldf', SIZE = 5MB,

(8)

2. Mở CSDL

Cú pháp: USE TenCSDL Ví dụ: use Sales

3. Xem thơng tất CSDL Server hành Cú pháp: sp_helpdb

4. Xem thông tin CSDL Cú pháp: sp_helpdb TenCSDL

5. Kiểm tra không gian sử dụng CSDL Cú pháp: sp_spaceused

6 Thay đổi cấu trúc CSDL Cú pháp:

ALTER DATABASE database_name

ADD FILE filespec [TO FILEGROUP filegroup_name] ADD LOG FILE filespec

| REMOVE FILE logical_filename | ADD FILEGROUP filegroup_name | REMOVE FILEGROUP filegroup_name | MODIFY FILE filespec

| MODIFY FILEGROUP filegroup_name filegroup_property

|SET optionspec [WITH termination] Ví dụ:

a) Thêm file group GroupOrder vào CSDL Sales

Ví dụ: ALTER DATABASE Sales ADD FILEGROUP GroupOrder b) Chỉnh sửa Size tập tin

ALTER DATABASE Sales

MODIFY FILE (NAME = ‘Sales_log’, size =10MB) c) Bổ sung thêm tập tin liệu thứ cấp Sales_data2

ALTER DATABASE Sales

ADD File (Name =Sales_data2, Filename

(9)

d) Xóa file thứ cấp Sales_data2

ALTER DATABASE Sales REMOVE FILE Sales_data2

e) Xóa file group GroupOrder: ý file group muốn xóa phải trống ALTER DATABASE Sales REMOVE FILE GroupOrder

f) Thay đổi thuộc tính CSDL Cú pháp:

ALTER DATABASE database_name SET option [, status]

Option

AUTO_SHRINK

CURSOR_CLOSE_ON_COMMIT

RECOVERY FULL | BULK_LOGGED | SIMPLE

SINGLE_USER | RESTRICTED_USER | MULTI_USER READ_ONLY | READ_WRITE

Ví dụ:

ALTER DATABASE Sales SET Read_Only

g) Đổi tên sở liệu:

Cú pháp: sp_renamedb [ @dbname = ] 'old_name', [ @newname = ] 'new_name‘

VD: Sp_ReNamedb ‘Sales’, ‘Banhang’

h) Xóa sở liệu: Khi CSDL bị xóa tất file vật lý bị xóa

Cú pháp:

DROP DATABASE database_name Ví dụ:

Drop database Banhang 7. Kiểu liệu (System Data Type) Có nhóm:

System-Supplied datatype: Các kiểu liệu hỗ trợ SQL Server

(10)

a) Tạo User-Defined Data Type

 Dùng thủ tục hệ thống sp_addtype để tạo user-defined data type

Cú pháp: sp_addtype type, system_data_type [,'NULL' | 'NOT NULL'] Ví dụ: Tạo kiểu liệu tên isbn với kiểu liệu smallint không chấp nhận giá trị Null

EXEC sp_addtype isbn, ‘smallint’, ‘NOT NULL’ b) Xem user-defined data types CSDL hành:

Dùng thủ tục sp_help truy vấn information_schema.domains Ví dụ: Use SalesDB

Sp_help

SELECT domain_name, data_type, character_maximum_length FROM information_schema.domains

ORDER BY domain_name

c) Xoá User-Defined Data Type: dùng thủ tục hệ thống sp_droptype để xóa user-defined data type từ bảng systypes Một user-defined data type khơng thể xóa tham chiếu bảng đối tượng khác

Cú pháp: Sp_droptype type Ví dụ:

EXEC sp_droptype isbn PHẦN THỰC HÀNH

1. Tạo CSDL QLSach cơng cụ design có tham số sau:

Tham số Giá trị

Database name QLSach

Tên logic data file QLSach_data Tên tập tin đường dẫn data file

chính

T:\QLTV\QLSach_Data.mdf Kích cở khởi tạo CSDL 20 MB

Kích cở tối đa CSDL 40 MB Gia số gia tăng tập tin CSDL MB

Tên logic transaction log QLSach_Log

(11)

transaction log

Kích cở khởi tạo transaction log MB Kích cở tối đa transaction log MB Gia số gia tăng tập tin transaction log MB

a Xem lại thuộc tính (properties) CSDL QLSach (HD: Nhắp phải chuột tên CSDL, chọn properties) Quan sát cho biết trang thể thơng tin gì?

b Tại cửa sổ properties CSDL, khai báo thêm  Một Group File có tên DuLieuSach

 Một tập tin liệu (data file) thứ hai nằm Group file vừa tạo có thơng số sau Tên login data file QlSach_Data2; Tên tập tin đường dẫn vật lý data file T:\QLTV\QlSach_Data2.ndf

 Chọn thuộc tính ReadOnly, sau đóng cửa sổ properies Quan sát màu sắc CSDL Bỏ thuộc tính ReadOnly

 Thay đổi Owner: tên server kết nối

2 Ở Query Analyzer (lưu ý: sau lần có thay đổi phải dùng lệnh để kiểm tra thay đổi đó)

a Dùng lệnh Create DataBase, tạo CSDL với tham số liệt kê bảng Lưu ý CSDL gồm data file nằm primary filegroup

THAM SỐ GIÁ TRỊ

Database name QLBH

Tên logic data file QLBH_data1 Tên tập tin đường dẫn data file

chính

T:\QLBH_data1.mdf Kích cở khởi tạo CSDL 10 MB

Kích cở tối đa CSDL 40 MB Gia số gia tăng tập tin CSDL MB Tên logic transaction log QLBH_Log Tên tập tin đường dẫn

transaction log

(12)

Kích cỡ tối đa transaction log MB Gia số gia tăng tập tin transaction log MB

b Xem lại thuộc tính CSDL QLBH cách Click phải vào tên CSDL chọn Property thủ tục hệ thống sp_helpDb, sp_spaceused, sp_helpfile c Thêm filegroup có tên DuLieuQLBH (HD: dùng lệnh Alter DataBase

<Tên Database> ADD FILEGROUP <Tên filegroup>)

d Khai báo secondary file có tên logic QLBH_data2, tên vật lý QLBH_data2.ndf nằm T:\, thông số khác tuỳ bạn chọn, data file nằm file group DuLieuQLBH (HD: Dùng lệnh Alter Database … ADD FILE … TO FILEGROUP …)

e Cho biết thủ tục hệ thống sp_helpfilegroup dùng để làm gì?

f Dùng lệnh Alter Database … Set … để cấu hình cho CSDL QLBH có thuộc tính Read_Only Dùng sp_helpDB để xem lại thuộc tính CSDL Hủy bỏ thuộc tính Read_Only

g Dùng lệnh Alter DataBase … MODIFY FILE … để tăng SIZE QLBH_data1 thành 50 MB Tương tự tăng SIZE tập tin QLBH_log thành 10 MB Để thay đổi SIZE tập tin công cụ Design bạn làm nào? Bạn thực thay đổi kích thước tập tin QLBH_log với kích thước 15MB Nếu thay đổi kích cỡ nhỏ ban đầu có khơng? Nếu thay đổi kích cỡ MAXSIZE nhỏ kích cỡ SIZE có khơng? Giải thích Tạo CSDL QLSV, thông số tùy chọn Dùng công cụ design tạo cấu trúc

của bảng sau CSDL QLSV:

LOP (MaLop char(5) , TenLop NVarchar(20), SiSoDuKien Int, NgayKhaiGiang DateTime)

SINHVIEN (MaSV char(5), TenHo NVarchar(40), NgaySinh DateTime, MALOP char(5))

MONHOC(MaMh char(5), Tenmh Nvarchar(30), SoTC int) KETQUA(MaSV char(5), MAMH char(5), Diem real)

Lưu ý: cột in đậm gạch chân khóa khơng chấp nhận giá trị Null, cột in đậm không chấp nhận giá trị Null

a Tạo Diagram hai bảng vừa tạo

(13)

Giả sử bạn nhập liệu cho bảng KETQUA trước, sau nhập liệu cho bảng cịn lại bạn có nhập khơng? Vì sao? Theo bạn nên nhập liệu theo thứ tự nào?

c Dùng tác vụ General Script, để tạo đoạn Script cho CSDL tất đối tượng CSDL thành tập tin Script có tên QLSV.SQL

d Vào Query Analyzer, mở tập tin Script vừa tạo khảo sát công dụng cú pháp lệnh có tập tin script

e Đổi tên CSDL QLSV thành QLHS

f Dùng thao tác xóa để xố tồn CSDL QLHS PHẦN 3: KIỂU DỮ LIỆU (DATA TYPE)

1. Tìm hiểu kiểu liệu (datatype): a Tìm hiểu trả lời câu hỏi sau:

- Có loại datatype, liệt kê

- Các system datatype SQL Server lưu trữ Table CSDL

- Các User-defined datatype SQL Server lưu trữ Table nào, CSDL nào?

b Vào Query Analyzer, chọn QLBH CSDL hành, định nghĩa datatype:

Kiểu liệu (Data type)

Mô tả liệu (Description of data)

Mavung 10 ký tự

STT STT không vượt 30,000 SoDienThoai 13 ký tự , chấp nhận NULL Shortstring Số ký tự thay đổi đến 15 ký tự HD: Dùng thủ tục sp_addtype để định nghĩa

Ví dụ: EXEC sp_addtype SODienThoai, 'char(13)', NULL

c Các User-defined datatype vừa định nghĩa lưu trữ đâu phạm vi sử dụng đâu (trong toàn instance hay CSDL hành)

d Có cách liệt kê danh sách User-Defined datatype vừa định nghĩa

(14)

ORDER BY domain_name Hoặc SELECT * From Systype

e Tạo bảng có tên ThongTinKH(MaKH (khóa chính) kiểu liệu STT , Vung kiểu Mavung, Diachi kiểu Shortstring, DienThoai kiểu SoDienThoai) CSDL QLBH sử dụng User-defined data type vừa định nghĩa Bạn có tạo khơng? Nếu bạn nhập thử liệu record design

f Muốn User-Defined datatype dùng tất CSDL bạn định nghĩa đâu?

g Xóa kiểu liệu SoDienThoai

(15)

BÀI TẬP TUẦN & Số tiết:

Mục tiêu:

 Tạo CSDL bảng CSDL T-SQL

 Tạo ràng buộc (constraint) cho bảng T-SQL  Phát sinh tập tin script

 Thực chức attack detack CSDL  Thực chức import/export

PHẦN LÝ THUYẾT 1) Bảng liệu – Table

Bảng đối tượng CSDL dùng để lưu trữ liệu Dữ liệu bảng tổ chức thành hàng (rows) cột (columns) Mỗi hàng bảng biểu diễn ghi (record) Mỗi cột biểu diễn thuộc tính (attribute) Tên cột bảng không trùng cho phép tên cột trùng bảng khác CSDL

SQL Server cho phép:

Tối đa triệu bảng CSDL Tối đa 1024 cột bảng Tối đa 8060 bytes hàng 2) Tạo Table

Cú pháp:

CREATE TABLE

[ database_name.[ owner ] |owner.] table_name ({ < column_definition >

|column_name AS computed_column_expression | < table_constraint > ::= [ CONSTRAINT

constraint_name ] }

[ { PRIMARY KEY | UNIQUE } [ , n ] )

[ ON { filegroup | DEFAULT } ]

[ TEXTIMAGE_ON { filegroup | DEFAULT } ] Ví dụ:

a) Tạo bảng có khóa CREATE TABLE Sanpham

(16)

b) Tạo bảng có giá trị phát sinh tự động CREATE TABLE NhaCungCap

(MaNCC int Identity NOT NULL Primary key, TenNCC VarChar(25)) c) Tạo bảng có cột tính tốn

CREATE TABLE cthoadon ( sohd int NOT NULL,

MaHang char(5) NOT NULL, SoLuong int NOT NULL, DonGia money,

ThanhTien AS SoLuong*DonGia )

d) Khai báo Filegroup chứa Table CREATE TABLE KH

(MaKh int Identity(1000,1) NOT NULL, TenKH Varchar(40)) ON FGROUP1 3) Sửa cấu trúc bảng

Cú pháp:

ALTER TABLE <table_name>

{ALTER COLUMN <column_name> <new_data_type>} | {ADD [<column_name> <data_type>]}

| {DROP COLUMN <column_name>} Ví dụ:

a) Thêm cột

ALTER TABLE SanPham ADD NgayNhap SmallDateTime b) Sửa kiểu liệu cho cột

ALTER TABLE SanPham ALTER COLUMN NgayNhap DateTime NOT NULL c) Xóa cột

ALTER TABLE Sanpham DROP COLUMN NgayNhap 4) Xóa bảng

Cú pháp: DROP TABLE <Table_Name> Ví dụ: DROP TABLE SanPham

5) Xem thông tin Table

Cú pháp: sp_help <table_name> Ví dụ: Sp_help cthoadon

6) Qui tắc nghiệp vụ (Toàn vẹn liệu )

(17)

• Các loại ràng buộc tồn vẹn: Not Null, Default, Identity, Constraints, Rule, Triggers, Indexs

7) Các loại ràng buộc toàn vẹn Cú pháp:

Cú pháp: < column_constraint > ::=[ CONSTRAINT constraint_name ] { [ NULL | NOT NULL ]

| [ { PRIMARY KEY | UNIQUE } ] | [ [ FOREIGN KEY ]

REFERENCES ref_table [ ( ref_column ) ] [ ON DELETE { CASCADE | NO ACTION } ] [ ON UPDATE { CASCADE | NO ACTION }] ]

| CHECK ( logical_expression ) }

a) Định nghĩa NULL/NOT NULL

• Giá trị NULL dùng để giá trị chưa biết, hay bổ sung sau Nó khác với giá trị rỗng (empty) hay zero Hai giá trị null không xem Khi so sánh hai giá trị null, hay giá trị null với giá trị khác kết trả unknown

Ví dụ:

USE SalesDb

CREATE TABLE SanPham

( Masp smallint NOT NULL, Tensp char(20) NOT NULL, Mota char(30) NULL,

Gia smallmoney NOT NULL )

b) Ràng buộc Default: dùng để xác định giá trị “có sẵn” gán cho cột thêm ghi vào bảng DEFAULT áp dụng cho cột bảng ngoại trừ cột có kiểu timestamp hay có thuộc tính IDENTITY

Cách tạo ràng buộc Default:

Cách 1: Tạo với lúc tạo Table Cú pháp: CREATE TABLE <TableName>

(<Column_Name> <DataType> DEFAULT (<expresion>)) Ví dụ: CREATE TABLE HoaDon (MaHD int, LoaiHD Char(1) DEFAULT ‘X’, NgayLap DateTime NOT NULL)

(18)

ADD [ CONSTRAINT constraintname ] DEFAULT expression FOR columnname Ví dụ: ALTER TABLE HoaDon

ADD CONSTRAINT Ngay_DF DEFAULT Getdate() FOR NgayLap Cách 3:

Cú pháp: CREATE DEFAULT fieldname AS 'value'

Sau tạo DEFAULT, cần gắn kết vào cột hay kiểu liệu người dùng

sp_bindefault default_name, object_name [, FUTUREONLY]

Xóa gắn kết default làm cho khơng cịn áp dụng vào cột bảng hay kiểu liệu người dùng

sp_unbindefault object_name [, FUTUREONLY]

Ví dụ:

CREATE DEFAULT dienthoai AS 'unknown' GO

sp_bindefault dienthoai, ‘KH.DT' GO

sp_unbindefault ‘KH.DT'

c) Xoá ràng buộc Default - mặc định

Cú pháp: DROP DEFAULT { default } [ , n ] Hay

ALTER TABLE <TenTable>

DROP CONSTRAINT <TenDefault> Lệnh drop xóa lúc nhiều default Ví dụ:

DROP DEFAULT phonedflt DROP DEFAULT Ngay_DF Hay

ALTER TABLE Hoadon

DROP CONSTRAINT Ngay_DF

d) Ràng buộc Check: Qui định nhập liệu phải thỏa mãn điều kiện biểu thức check_logic

Cách tạo:

Cách 1: Tạo với tạo Table

(19)

(<Column_Name> <Data_Type>[,…] CONSTRAINT ConstraintName] CHECK (NOT FOR REPLICATION] <Logical expresion>),….)

Ví dụ: CREATE TABLE NhanVien

(MaNV char(4) CHECK (Manv LIKE '[0-9][0-9][0- 9][0-9]‘, Hoten Varchar(40), LCB int CHECK (LCB BETWEEN AND 50000, HSPC real, Thanhpho varchar(10) CONSTRAINT chkCity CHECK(Thanhpho IN ('Berkeley', 'Boston', 'Chicago', ' Dallas‘))

Cách 2: Tạo sau tạo bảng

Cú pháp: ALTER TABLE <Table_Name>

[WITH CHECK | WITH NOCHECK] ADD [CONSTRAINT ConstraintName]

CHECK (NOT FOR REPLICATION] <Logical expresion>),….) Ví dụ: ALTER TABLE Nhanvien

ADD CONSTRAINT NV_HSPC

CHECK (HSPC>=0.1 AND HSPC<0.5)

e) Rule: Định nghĩa qui tắc hợp lệ mà kết buộc vào cột bảng hay kiểu liệu người dùng định nghĩa Rule tạo nên trước kết buộc vào đối tượng khác

Định nghĩa Rule:

CREATE RULE rulename AS condition_expression Kết buộc rule vào cột

sp_bindrule rulename, tablename.columnname Kết buộc Rule vào user-defined datatype

sp_binrule rulename, datatypename[, futureonly] Ví dụ:

CREATE RULE ActiveDate AS

@Date Between ’01/01/70’ AND Getdate() sp_bindrule ActiveDate, ‘Orders.OrderDate’

f) Xoá ràng buộc CHECK ALTER TABLE <TenTable>

DROP CONSTRAINT <TenCheck> Ví dụ:

ALTER TABLE NhanVien

DROP CONSTRAINT NV_HSPC

8) Các ràng buộc khóa chính, khóa ngoại, unique– Constraints

Cú pháp: < column_constraint > ::=[ CONSTRAINT constraint_name ] { [ NULL | NOT NULL ]

(20)

| [ [ FOREIGN KEY ]

REFERENCES ref_table [ ( ref_column ) ] [ ON DELETE { CASCADE | NO ACTION } ] [ ON UPDATE { CASCADE | NO ACTION }] ]

| CHECK ( logical_expression ) }

a) Ràng buộc Primary Key: Ràng buộc Primary key gồm hay nhiều cột dùng để nhận diện record, giá trị primary key không phép trùng không chứa giá trị Null Chỉ mục tự động tạo có khai báo ràng buộc primary key Mỗi bảng có khóa chính, mục primary key tạo thường mặc định clustered

Cú pháp:

Cách 1: Tạo với lệnh tạo bảng CREATE TABLE TableName

(columname datatype [,…],[CONSTRAINT constraint_name] PRIMARY KEY [CLUSTERED|NONCLUSTERED]

{(column [ASC |DESC][,…,n])} [WITH FILLFACTOR = fillfactor] [ON {filegroup|DEFAULT}] Ví dụ: CREATE TABLE DEAN (

MADA smallint PRIMARY KEY CLUSTERED NOT NULL,

TENDA varchar(50) NOT NULL DEFAULT 'Chua '

)

Cách 2: Tạo sau có Table Cú pháp: ALTER TABLE TableName

ADD [CONSTRAINT constraint_name]

PRIMARY KEY {(column [ASC |DESC][,…,n])} [ON {filegroup|DEFAULT}]

Ví dụ: ALTER TABLE Sanpham ADD CONSTRAINT Masp_PK PRIMARY KEY (Cmasp)

(21)

b) Ràng buộc Unique: Dùng để đảm bảo khơng có giá trị trùng cột Một cột hay kết hợp cột vốn khơng phải khóa Chấp nhận hàng chứa giá trị Null Một bảng có nhiều Unique constraint Cách tạo:

Cách 1: Tạo với lệnh tạo bảng Cú pháp: CREATE TABLE TableName

(columname datatype [,…],[CONSTRAINT constraint_name] UNIQUE [CLUSTERED|NONCLUSTERED]

{(column [ASC |DESC][,…,n])} [WITH FILLFACTOR = fillfactor] [ON {filegroup|DEFAULT}] Ví dụ: CREATE TABLE jobs

( job_id smallint UNIQUE CLUSTERED NOT NULL,

job_desc varchar(50) NOT NULL DEFAULT 'New Position - title not formalized yet' )

Cách 2: Tạo sau có bảng Cú pháp: ALTER TABLE TableName

ADD [CONSTRAINT constraint_name] UNIQUE {(column [ASC |DESC][,…,n])} [ON {filegroup|DEFAULT}]

Ví dụ: ALTER TABLE Table3Unique

ADD col3 char(5) CONSTRAINT Table3_Unique UNIQUE EXEC Sp_helpconstraint Table3

c) Ràng buộc Foreign key: Khố ngoại tham chiếu đến cột sau bảng chính:

a Là cột hay phần khố b Là cột có ràng buộc unique

c Là cột có mục unique

Một bảng có tối đa 253 khố ngoại tham chiếu đến 253 bảng khác

Định nghĩa FOREIGN KEY CONSTRAIT tạo bảng CREATE TABLE TableName

(columnName datatype [,…], [CONSTRAINT constraintName] FOREIGN KEY[(column[, n])]

(22)

[ ON DELETE { CASCADE | NO ACTION } ] [ ON UPDATE { CASCADE | NO ACTION } ] [ NOT FOR REPLICATION]

ON UPDATE|DELETE {CASCADE | NO ACTION}

 Xác định hành động cần phải thực cho hàng bảng tạo hàng có quan hệ tham chiếu hàng tham chiếu bị xố khỏi bảng Mặc định NO ACTION

 CASCADE: dùng để xác định hàng bị cập nhật/xoá khỏi bảng tham chiếu hàng bị cập nhật/xóa khỏi bảng

 NO ACTION: SQL Server đưa thông báo lỗi việc xố hàng bảng bị từ chối

Ví dụ

CREATE TABLE VITRI

(MaVt int Primary key, DiaChi varchar(40)) CREATE TABLE PhongBan

( Mapb int primary key, TenPb varchar(30),

MaVT int REFERENCES VITRI(MaVt) )

Định nghĩa FOREIGN KEY CONSTRAIT bảng tồn ALTER TABLE TableName

[WITH CHECH | WITH NOCHECK] ADD [CONSTRAINT constraintName]

FOREIGN KEY[(column[, n])]

REFERENCES ref_table [ ( ref_column [, n])]) ] [ ON DELETE { CASCADE | NO ACTION } ] [ ON UPDATE { CASCADE | NO ACTION } ] [ NOT FOR REPLICATION]

 WITH CHECK: trước tạo ràng buộc, SQL Server kiểm tra liệu có vi phạm ràng buộc hay khơng, có khơng tạo constraint

 WITH NOCHECK: tạo constraint mà không cần kiểm tra liệu có có vi phạm ràng buộc hay khơng

Ví dụ:

CREATE TABLE ChucVu

(Macv int primary key, tench varchar(30)) ALTER TABLE NhanVien1

ADD CV int

(23)

ADD CONSTRAINT Cv_FK Foreign key (Macv) REFERENCES Chucvu(Macv))

d) Xem trợ giúp ràng buộc

Cú pháp: Sp_helpConstraint ConstraintName Ví dụ: Sp_helpConstraint Events

e) Xóa ràng buộc constraint Cú pháp:

ALTER TABLE <TenTable> DROP CONSTRAINT <ConstraintName> Ví dụ: ALTER TABLE NhanVien1 DROP CONSTRAINT Cv_FK

PHẦN THỰC HÀNH BÀI TẬP 1:

Cho mô tả nghiệp vụ hệ thống quản lý bán hàng siêu thị sau:

• Siêu thị bán nhiều sản phẩm khác Các sản phẩm phân loại theo nhóm sản phẩm, nhóm sản phẩm có mã nhóm (MANHOM) nhất, mã nhóm hàng xác định tên nhóm hàng (TENNHOM), tất nhiên nhóm hàng có nhiều sản phẩm Mỗi sản phẩm đánh mã số (MASP) nhất, mã số sản phẩm xác định thơng tin sản phẩm : tên sản phẩm (TENSP), mô tả sản phẩm (MoTa), đơn vị tính (Đơn vị tính), đơn giá mua (ĐONGIA), số lượng tồn (SLTON)

• Siêu thị lấy hàng từ nhiều nhà cung cấp khác Mỗi sản phẩm lấy từ nhà cung cấp Hệ thống phải lưu trữ thông tin nhà cung cấp hàng cho siêu thị Mỗi nhà cung cấp có mã số (MaNCC) nhất, mã nhà cung cấp xác định tên nhà cung cấp (TenNCC), địa (Diachi), số điện thoại (Phone), số fax (Sofax) địa mail (DCMail)

• Siêu thị bán hàng cho nhiều loại khách hàng khác Mỗi khách hàng có mã khách hàng (MAKH) nhất, MAKH xác định thông tin khách hàng : họ tên khách hàng (HOTEN), địa (ĐIACHI), số điện thoại (ĐIENTHOAI), Ngày đăng ký thẻ thành viên (NgayDKThe), địa mail (DCMail), điểm tích lũy (DiemTL) Siêu thị chia khách hàng thành loại khách hàng: VIP, TV, VL Khách hàng VIP khách hàng thành viên năm có tổng số hóa đơn mua hàng 100, khách hàng TV(thành viên khách hàng làm thẻ thành viên không đủ điều kiện khách hàng VIP) Khách hàng vãng lai (VL) khách hàng chưa có thẻ thành viên Đối với khách hàng vãng lai MaKH hệ thống tự cấp phát MaKH cho lần mua hàng hệ thống khơng cần lưu thơng tin cịn lại khách hàng vãng lai

(24)

vào cuối năm cho khách hàng Mỗi đơn hàng mua nhiều sản phẩm, Với sản phẩm hóa đơn cho biết số lượng bán (SLBAN) mặt hàng

1 Dựa vào nghiệp vụ trên, vẽ mơ hình thực thể kết hợp ERD, sau chuyển qua lược đồ sở liệu cho hệ thống xác định ràng buộc khóa khóa ngoại cho lược đồ CSDL

2 Xác định qui tắc nghiệp vụ hệ thống Tại cửa sổ Query analyzer, thực hiện:

a Dùng lệnh Create Table … để tạo cấu trúc bảng sau CSDL QLBH:

Lưu ý: Các bảng KHACHHANG, HOADON, CT_HOADON khai báo cột có Null Not Null, khơng cần khai báo khóa chính, khóa ngoại Bảng NhomSanPham, SanPham, NhaCungCap u cầu tạo khóa khóa ngoại lệnh Create Table ln, bảng cịn lại dùng lệnh Alter Table để tạo khóa khóa ngoại

NhomSanPham

MaNhom Int Not null

TenNhom Nvachar(15) SanPham

MaSp int Not null

TenSp nvarchar(40) Not null

MaNCC Int

MoTa nvarchar(50)

MaNhom int

Đonvitinh nvarchar(20)

GiaGoc Money >0

SLTON Int >0

HoaDon

MaHD Int Not null

NgayLapHD DateTime >=Ngày hành Giá trị mặc định ngày hành NgayGiao DateTime

Noichuyen NVarchar(60) Not Null

MaKh Nchar(5)

CT_HoaDon

MaHD Int Not null

(25)

Soluong SmallInt >0

Dongia Money

ChietKhau Money >=0

NhaCungCap

MaNCC Int Not null

TenNcc Nvarchar(40) Not Null Diachi Nvarchar(60)

Phone NVarchar(24) SoFax NVarchar(24) DCMail NVarchar(50) KhachHang

MaKh NChar(5) Not null

TenKh Nvarchar(40) Not null

LoaiKh Nvarchar(3) Chỉ nhập VIP, TV, VL DiaChi Nvarchar(60)

Phone NVarchar(24) SoFax NVarchar(24) DCMail NVarchar(50)

DiemTL Int >=0

b Dùng lệnh Alter Table … khai báo ràng khóa (Primary Key Constraint) bảng lại KHACHHANG, HOADON, CT_HOADON c Dùng lệnh Alter Table … khai báo ràng khóa ngoại (Foreign Key

Constraint) bảng cịn lại KHACHHANG, HOADON, CT_HOADON d Dùng lệnh Alter Table … khai báo ràng buộc miền giá trị (Check

Constraint) ràng buộc giá trị mặc định cho bảng

e Thêm cột LoaiHD vào bảng HOADON, LoaiHD có kiểu liệu char(1), Chỉ nhập N(Nhập), X(Xuất), C(Chuyển từ cửa hàng sang cửa hàng khác), T (Trả), giá trị mặc định ‘N’

f Tạo ràng buộc cho bảng HoaDon với yêu cầu NgayGiao>=NgayLapHD Thực phát sinh tập tin script cho CSDL QLBH với lựa chọn sau, lưu

với tên TableQLBH.sql:

 All Tables, All user-defined data types

(26)

BÀI TẬP (làm thêm nhà nộp lại cho GV): Dùng T-SQL tạo CSDL Movies với tham số sau:

 Tập tin Datafile có: Name: Movies_data; pathname: C:\Movies\Movies_data.mdf; Size: 25 MB; Maxsize: 40 MB; FileGrowth: MB

 Tập tin Log file có: Name: Movies_log; pathname: C:\Movies\Movies_log.ldf; Size: MB; Maxsize: MB; FileGrowth: MB Thực hiện, kiểm tra kết sau lần thực hiện:

 Thêm Datafile thứ có Name: Movies_data2; pathname: C:\Movies\Movies_data2.ndf; Size: 10 MB; thông số khác không cần định

 Lần lược cấu hình CSDL Movies với chế độ single_user, restricted user, multi user Sau cài đặt lại multi_user Nhớ dùng lệnh để kiểm tra lại

 Tăng kích cỡ data file thứ từ 10 MB lên 15 MB Kiểm tra lại  Cấu hình CSDL chế độ tự động SHRINK

 Phát sinh tập tin Script từ CSDL Movies, tạo script cho tất đối tượng kể database Lưu vào đĩa với tên Movies.SQL

 Xoá CSDL Movies

8 Mở tập tin Movies.SQL Thực hiện:

 Bổ sung thêm câu lệnh tạo filegroup tên Data

 Hiệu chỉnh maxsize tập tin transaction log thành 10 MB  Size tập tin datafile thứ thành 10 MB

 Cho datafile thứ nằm filegroup có tên Data  Lưu tập tin scrip

 Cho thực thi toàn tập tin script

 Dùng sp_helpDB để kiểm tra tồn Movies thơng số

9 Các bảng có CSDL Movies

Tên bảng Nội dung lưu chứa

Movie Danh sách phim có cửa hàng Customer Thơng tin khách hàng

Category Danh sách loại phim Rental Thông tin thuê phim Rental_detail Chi tiết thuê phim

(27)

10 Thực định nghĩa user-defined datatype sau vào CSDL Movies Kiểm tra sau tạo

Kiểu liệu (Data

type) Mô tả liệu (Description of data) Movie_num Int, không chấp nhận Null

Category_num Int, không chấp nhận Null Cust_num Int, không chấp nhận Null Invoice_num Int, không chấp nhận Null

11 Thực tạo bảng vào CSDL Movies, nhớ kiểm tra lại cấu trúc sp_help

Customer

Tên cột kiểu liệu cho phép Null Cust_num cust_num IDENTITY(300,1) No

Lname varchar(20) No

Fname varchar(20) No

Address1 varchar(30) Yes Address2 varchar(20) Yes

City varchar(20) Yes

State Char(2) Yes

Zip Char(10) Yes

Phone Varchar(10) No

Join_date Smalldatetime No Category

Tên cột kiểu liệu cho phép Null Category_num category_num

IDENTITY(1,1) No Description Varchar(20) No Movie

Tên cột kiểu liệu cho phép Null Movie_num Movie_num No

Title Cust_num No

Category_Num category_num No Date_purch Smalldatetime Yes

Rental_price Int Yes

Rating Char(5) Yes

Rental:

(28)

Invoice_num Invoice_num No

Cust_num Cust_num No

Rental_date Smalldatetime No Due_date Smalldatetime No Rental:_Detail

Tên cột Kiểu liệu cho phép Null Invoice_num Invoice_num No

Line_num Int No

Movie_num Movie_num No Rental_price Smallmoney No

12 Thực phát sinh tập tin script cho CSDL Movies với lựa chọn sau, lưu với tên Table.sql:

 All Tables, All user-defined data types

 Generate the CREATE <object> command for each object  Generate the DROP <object> command for each object

13 Thực tạo Diagram cho bảng Movies Bạn có tạo không? Tại sao? Tạm thời lưu diagram với tên Movies

14 Thực định nghĩa khố (Primary Key Constraint) cho bảng sau, nhớ kiểm tra Constraint lệnh sp_helpconstraint Tên bảng cột làm khóa Tên Primary Constraint Movie Movie_num PK_movie

Customer Cust_num PK_customer Category Category_num PK_category Rental Invoice_num PK_rental

15 Thực định nghĩa khoá ngoại (Foreign Key Constraint) cho bảng sau, nhớ kiểm tra Constraint lệnh sp_helpconstraint Tên bảng cột làm khóa Tên

bảng được tham chiếu đến

Cột được

tham chiếu tên Primary Constraint Cascade

Movie Category_num Category Category_num FK_movie Rental Cust_num Customer Cust_num FK_rental

Rental_detail Invoice_num Rental Invoice_num FK_detail_invoice delete Rental_detail Movie_num Movie Movie_num PK_detail_movie

(29)

17 Thực định nghĩa giá trị mặc định (Default Constraint) cho cột bảng sau, nhớ kiểm tra Constraint lệnh sp_helpconstraint

Tên bảng Cột có giá

trị Default Giá trị Default tên Constraint Primary Movie Date_purch Ngày hành DK_movie_date_purch Customer join_date Ngày hành DK_customer_join_date Rental Rental_date Ngày hành DK_rental_rental_date Rental Due_date Ngày hành +

2 DK_rental_due_date

18 Thực định nghĩa miền giá trị (Check Constraint) cho cột bảng sau, nhớ kiểm tra Constraint lệnh sp_helpconstraint Tên bảng cột có giá

trị Default Miền giá trị tên Constraint Primary Movie Rating ‘G’, ‘PG’, ‘R’, ‘NC17’, ‘NR’ CK_movie

Rental Due_date >= Rental_date CK_Due_date

19 Thực phát sinh tập tin script cho đối tượng CSDL Movie Tên tập tin Constraint.sql Với lựa chọn Script Primary Keys, Foreign Keys, Default, and Check Constraints

BÀI TẬP 3:

1 Dùng chức Import/Export (kiểm tra kết sau lần thực hiện):  Tất thơng tin nhân viên có bảng Employees

NorthWind thành tập tin NhanVien.txt

 Dữ liệu bảng Products, Orders, Order Details bảng NorthWind vào tập tin QLHH.MDB Lưu ý: Tập tin QLHH.MDB phải tồn đĩa trước thực Export

 Dữ liệu bảng Products, Suppliers NorthWind thành tập tin SP_NCC.XLS

 Các khách hàng có City LonDon từ bảng Customers NorthWind thành tập tin KH.TXT

 Danh sách sản phẩm Products NorthWind thành tập tin SanPham.TXT, thông tin cần lấy bao gồm ProductID, ProductName, QuantityPerUnit, Unitprice

 Các sản phẩm có SupplierID 1 hoặc bảng Products NorthWind vào bảng SanPham QLBH Lưu ý chọn cột mà bảng sản phẩm cần

 Các nhà cung cấp có Country USA bảng Suppliers NorthWin vào bảng NhaCungCap QLBH Lưu ý: chọn cột mà Nhacungcap cần

(30)

BÀI TẬP TUẦN 4, 5, 6, 7, Số tiết: 15

Mục tiêu:

 Thực thêm, xóa, sửa đơn giản lệnh INSERT, UPDATE, DELETE

 Biết cách truy vấn liệu lệnh SELECT TUẦN (3 tiết)

PHẦN I: Lệnh INSERT – UPDATE – DELETE đơn giản PHẦN LÝ THUYẾT

1) Cập nhật nội dung Table a) Thêm liệu vào table

Cú pháp: INSERT [INTO] <table_name> VALUES <values> Ví dụ: Insert into cthoadon values(2, ‘b’, 10,100)

b) Sửa liệu cho table

Cú pháp: UPDATE <table_name> SET <column_name = value> WHERE <condition>

Ví dụ: Update cthoadon set dongia = dongia+10/100*dongia c) Xóa liệu cho table

Cú pháp: DELETE FROM <table_name> WHERE <condition> Ví dụ: Delete from cthoadon where sohd =2

d) Câu lệnh TRUNCATE TABLE Dùng để xóa dịng table Nhanh lệnh DELETE

Không dùng với Trigger

Cú pháp: TRUNCATE TABLE table_name VD

TRUNCATE TABLE NewProducts 2) Truy vấn liệu

Cú pháp:

SELECT [ALL | DISTINCT] [TOP n [WITH TIES]] select_list [ INTO new_table ]

FROM table_source

[ WHERE search_condition ]

[ GROUP BY group_by_expression ] [ HAVING search_condition ]

(31)

• ORDER BY : Sắp xếp

WHERE: Điều kiện

• GROUP BY: Nhóm

• HAVING: Điều kiện nhóm a) Truy vấn đơn giản

Hiển thị tất cột có Table Cú pháp: SELECT * FROM < tablename> Ví dụ: SELECT * FROM Customers

Chọn vài cột Table

SELECT OrderID, OrderDate, CustomerID FROM Orders Truy vấn loại bỏ dòng bị trùng:

Cú pháp: Select Distinct Ví dụ:

SELECT DISTINCT Order_Date as “Date of Order” FROM Orders Truy vấn dùng toán tử chuẩn biểu thức điều kiện:

Ví dụ 1:

SELECT ProductID, UnitPrice FROM Product_T

WHERE UnitPrice < 275; Ví dụ 2:

SELECT ProductID, ProductName,UnitPrice FROM Products

WHERE ProductName like ‘N%’ AND UnitPrice > 300

b) Truy vấn nhiều bảng Ví dụ:

SELECT c.CustomerID, CompanyName, OrderID, OrderDate FROM Customers C INNER JOIN Orders O

ON C.CustomerID = O.CustomerID

c) Truy vấn seft join: Truy vấn bảng liên kết với Ví dụ:

SELECT e.Firstname+' '+e.Lastname AS 'Employee' , m.Firstname+' '+m.Lastname AS 'Manager'

FROM Employees e JOIN Employees m ON e.ManagerID = m.EmployeeID

(32)

SELECT Firstname+' '+Lastname AS name, Homephone FROM Employees

UNION

SELECT Companyname, Phone FROM Customers

e) Truy vấn kết nhóm:

Các hàm tổng hợp - Aggregate Functions: tổng hợp thông tin từ nhiều thành

Chức grouping sử dụng để tạo nhóm trước thực tổng hợp liệu

Các hàm tổng hợp: COUNT, SUM, MAX, MIN, AVG Ví dụ:

SELECT SUM(quantity)

AS ‘Sum of Quantity‘ FROM [Order Details]

Mệnh đề GROUP BY: định thuộc tính kết nhóm xuất mệnh đề select, kết hàm thống kê áp dụng cho nhóm

Ví dụ: Tổng tiền hóa đơn

SELECT orderid, SUM(quantity+unitprice) AS ‘Total‘ FROM [Order Details]

GROUP BY orderid

Mệnh đề Having: xác định điều kiện lọc sau nhóm liệu Ví dụ: Danh sách hóa đơn có tổng tiền lớn 10000000 SELECT orderid, SUM(quantity+unitprice)

AS ‘Total‘ FROM [Order Details] GROUP BY ordered

HAVING SUM(quantity+unitprice)>10000000 f) Lệnh select into

Có thể tạo bảng dựa vào kết câu lệnh select Ví dụ:

SELECT C.CustomerID AS NameId, OrderID, OrderDate INTO Customer_Order

FROM Customers C INNER JOIN Orders O ON C.CustomerID = O.CustomerID

(33)

Nested query query chứa query khác, query chứa bên gọi subquery Subquery thường xuất mệnh đề WHERE query Ngồi Subquery xuất mệnh đề FROM HAVING Các phép toán dùng nested query

 IN: so sánh giá trị v với tập giá trị V, kết TRUE v tồn V

Ví dụ:

SELECT Orderid, orderdate FROM [Orders] WHERE Orderid IN (SELECT Orderid FROM [Customers] WHERE city = ‘Lon don’)

NOT IN: so sánh giá trị v với tập giá trị V, kết TRUE v không tồn V

Ví dụ:

SELECT Orderid, orderdate FROM [Orders] WHERE Orderid NOT IN (SELECT Orderid FROM [Customers] WHERE city = ‘Lon don’)

ANY: kết hợp với phép toán op (>, >=, <, <=, and <>), kết TRUE giá trị tập v thỏa mãn phép toán op với giá trị V

Ví dụ 1:

Select Productid, Productname, Unitprice from [Products]

Where Unitprice>ANY (Select Unitprice from [Products] where ProductName like ‘B%’)

Ví dụ 2:

Select Productid, Productname, Unitprice from [Products]

Where Unitprice=ANY (Select Unitprice from [Products] where ProductName like ‘B%’)

ALL: kết hợp với phép toán op (>, >=, <, <=, and <>), kết TRUE giá trị tập v thỏa mãn phép toán op với tất giá trị V

Ví dụ:

Select Productid, Productname, Unitprice from [Products]

Where Unitprice>ALL (Select Unitprice from [Products] where ProductName like ‘B%’)

EXISTS: kiểm tra kết subquery có rỗng hay khơng, exists trả giá trị TRUE kết subquery chứa giá trị

Ví dụ: Danh sách sản phẩm bán Select * from [Products] s

where EXISTS ( SELECT * from [Order Details] c where s.Productid=c.Productid)

(34)

Ví dụ: Danh sách sản phẩm chưa bán Select * from [Products] s

where NOT EXISTS ( SELECT * from [Order Details] c where s.Productid=c.Productid)

PHẦN THỰC HÀNH

Mở CSDL QLBH, thực lệnh sau:

1 Thêm vào Table dịng liệu thơng qua cửa sổ Design Dữ liệu sinh viên tự nghĩ

Chú ý: Các ràng buộc Table

2 Dùng lệnh Insert thêm liệu vào bảng sau:

Chú ý: Nếu bảng có liệu bạn xóa hết liệu trước nhập vào

Table NhomHang

Table NhaCungCap

Table SanPham

(35)

Table HoaDon

Table CT_HoaDon

3 Dùng lệnh Update sửa chữa liệu theo yêu cầu sau

a) Tăng đơn giá bán lên 5% cho sản phẩm có mã

b) Tăng số lượng tồn lên 100 cho sản phẩm có nhóm mặt hàng nhà cung cấp có mã

c) Tăng điểm lũy lên 50 cho khách hàng khách hàng vãng lai

d) Cập nhật cột mơ tả cho sản phẩm có tên Lị vi sóng (dữ liệu cột mơ tả sinh viên tự thêm)

e) Tăng đơn giá gốc lên 2% cho sản phẩm mà phần tên có chứa chữ u

(36)

b) Xóa hóa đơn khách hàng vãng lai

c) Xóa khách hàng thuộc loại VIP mà có điểm tích lũy TUẦN (3 TIẾT)

PHẦN 2: Lệnh SELECT

BÀI TẬP 1: LỆNH SELECT – TRUY VẤN ĐƠN GIẢN

Chọn CSDL hành NorthWind, tìm hiểu cấu trúc liệu bảng Xây dựng sơ đồ quan hệ cho bảng Sau dùng câu lệnh Select … From … Where … để truy vấn liệu sau, với cấu trúc bảng sau:

Products(ProductID,ProductName, SupplierID, UnitPrice, UnitInStock, … ) Customers(CustomerID, CompanyName, Address, City, Region, Country, …) Employees(EmployeeID, LastName, FirstName, BirthDate, City, …)

Orders(OderID, CustomerID, EmployeeID, OrderDate,…)

Order Details(OrderID, ProductID, UnitPrice, Quantity, Discount) Suppliers(SupplierID, SupplierName,…)

Chú ý: Nếu câu mà bạn đánh lệnh mà kết khơng có, bạn cho biết sao?

1 Liệt kê thông tin tất sản phẩm (Products)

2 Liệt kê danh sách customers Thông tin bao gồm CustomerID, CompanyName, City, Phone

3 Liệt kê danh sách products Thông tin bao gồm ProductId, ProductName, UnitPrice

4 Liệt kê danh sách employees Thông tin bao gồm EmployeeId, EmployeeName, Phone, Age Trong EmployeeName ghép từ LastName FirstName; Age tuổi tính từ năm hành (GetDate()) năm Birthdate

5 Liệt kê danh sách Customers có ContactTitle bắt đầu chữ O Danh sách customers thành phố Paris

7 Liệt kê danh sách Customers thành phố LonDon, Boise Paris

8 Liệt kê danh sách Customers có tên bắt đầu chữ V mà thành phố Lyon

9 Liệt kê danh sách Customers khơng có số fax 10 Liệt kê danh sách Customers có số Fax

11 Liệt kê danh sách employees có năm sinh <=1960

12 Liệt kê danh sách products có từ ‘Boxes’ cột QuantityPerUnit 13 Liệt kê danh sách products có Unitprice lớn hớn 10 nhỏ 15 14 Liệt kê danh sách orders có OrderDate lập tháng năm

(37)

15 Liệt kê danh sách products ứng với tiền tồn vốn Thông tin bao gồm ProductId, ProductName, Unitprice, UnitsInStock, TotalAccount Trong TotalAccount= UnitsInStock * Unitprice

16 Liệt kê danh sách customers có city bắt đầu ‘M’

17 Liệt kê danh sách employees có tuổi lớn Thơng tin bao gồm EmployeeID, EmployeeName, Age Trong đó, EmployeeName ghép từ LastName FirstName; Age năm hành trừ năm sinh

18 Liệt kê danh sách Products có số lượng tồn nhỏ

19 Liệt kê danh sách Orders gồm OrderId, Productid, Quantity, Unitprice, Discount, ToTal = Quantity * unitPrice – 20%*Discount

20 Liệt kê danh sách Employees không thành phố London Redmond TUẦN (3 tiết)

BÀI TẬP 2: LỆNH SELECT – TRUY VẤN CÓ KẾT NỐI

1 Liệt kê customer khơng có lập hóa đơn tháng 7/1997

2 Liệt kê customer có lập hóa đơn 15 ngày 7/1997 Liệt kê danh sách sản phẩm giao vào ngày 16/7/1996

4 Liệt kê danh sách hóa đơn Customers mua hàng tháng 4, năm 1997 Thông tin gồm Orderid, CompanyName, OrderDate, RequiredDate, xếp theo CompanyName, Companyname theo OrderDate giảm dần

5 Liệt kê danh sách hóa đơn nhân viên có Lastname Fuller lập Liệt kê danh sách Products nhà cung cấp (supplier) có mã 1,3,6 bán

được tháng 6,7 năm 1997, xếp theo mã nhà cung cấp (SupplierID), mã nhà cung cấp xếp theo ProductID

7 Liệt kê danh sách Products bán có Discount

8 Liệt kê danh sách Products có đơn giá bán đơn giá mua

9 Liệt kê danh sách Products mà hóa đơn có OrderID 10248 mua 10 Liệt kê danh sách Employers lập hóa đơn tháng năm

1996

11 Liệt kê danh sách sản phẩm Producrs chưa bán tháng năm 1996

12 Liệt kê danh sách Employes khơng lập hóa đơn vào ngày hôm 13 Liệt kê danh sách Customers chưa mua hàng năm 1997

14 Liệt kê danh sách nhà cung cấp Suppliers không cung cấp Products có mã 59

(38)

TUẦN (3 TIẾT)

BÀI TẬP 3: LỆNH SELECT – TRUY VẤN GOM NHÓM

1 Danh sách orders ứng với tổng tiền hóa đơn Thơng tin bao gồm OrdersId, OrderDate, TotalAccount Trong TotalAccount Sum Quantity * Unitprice, kết nhóm theo OrderId

2 Danh sách orders ứng với tổng tiền hóa đơn có Shipcity ‘Madrid’ Thơng tin bao gồm OrdersId, OrderDate, TotalAccount Trong TotalAccount Sum Quantity * Unitprice, kết nhóm theo OrderId Danh sách products có tổng số lượng lập hóa đơn lớn

4 Cho biết customers lập hóa đơn Thơng tin gồm CustomerID, CompanyName, CountOfOrder Trong CountOfOrder (tổng số hóa đơn) đếm (Count) theo Customers

5 Cho biết Employee lập hóa đơn, ứng với tổng tiền Danh sách customer ứng với tổng tiền hoá đơn lập từ

31/12/1996 đến 1/1/1998

7 Danh sách customer ứng với tổng tiền hố đơn, mà hóa đơn lập từ 31/12/1996 đến 1/1/1998 tổng tiền hóa đơn >20000 Danh sách customer ứng với tổng số hoá đơn, tổng tiền hố đơn,

mà hóa đơn lập từ 31/12/1996 đến 1/1/1998 tổng tiền hóa đơn >20000 Thơng tin xếp theo CustomerID, mã xếp theo tổng tiền giảm dần

9 Danh sách Category có tổng số lượng tồn (UnitsInStock) lớn 300, đơn giá trung bình nhỏ 25 Thông tin kết bao gồm CategoryID, CategoryName, Total_UnitsInStock, Average_Unitprice

10 Danh sách Category có tổng số product lớn hớn 10 Thông tin kết bao gồm CategoryID, CategoryName, Total_UnitsInStock

11 Danh sách product theo CategoryName, thông tin bao gồm: Productname, CategoryName, Unitprice, UnitsinStock Có dùng mệnh đề COMPUTE để liệt kê đơn giá trung bình, tổng số lượng tồn (sum of UnitsinStock) theo CategoryName

12 Danh sách Customer ứng với tổng tiền hóa đơn tháng Thông tin bao gồm CustomerID, CompanyName, Month_Year, Total Trong Month_year tháng năm lập hóa đơn, Total tổng Unitprice* Quantity, có thống kế tổng total theo Customer Month_Year (có dùng COMPUTE)

13 Cho biết Employees bán nhiều tiền năm 1997 14 Danh sách khách có nhiều đơn hàng năm 1996

(39)

TUẦN (3 TIẾT)

BÀI TẬP 4: LỆNH SELECT – TRUY VẤN CON SUBQUERY

1 Các product có đơn giá lớn đơn giá trung bình product

2 Các product có đơn giá lớn đơn giá trung bình product có ProductName bắt đầu ‘N’

3 Cho biết sản phẩm có tên bắt đầu chữ N đơn giá > đơn giá sản phẩm khác

4 Danh sách products có khách hàng đặt hàng (tức ProductId có Order Details) Thông tin bao gồm ProductId, ProductName, Unitprice

5 Danh sách products có đơn giá nhập lớn đơn giá bán nhỏ tất Products

6 Danh sách hóa đơn Customers mà Customers thành phố LonDon Madrid

7 Danh sách products có đơn vị tính có chữ Box có đơn giá mua nhỏ đơn giá trung bình tất Products

8 Danh sách Products có số lượng (Quantity) bán lớn

9 Danh sách Customer chưa lập hóa đơn (viết ba cách: dùng NOT EXISTS, dùng LEFT JOIN, dùng NOT IN )

10 Cho biết sản phẩm có đơn giá bán cao

11 Cho biết sản phẩm có đơn vị tính có chứa chữ box có đơn giá bán cao

12 Danh sách products có đơn giá bán lớn đơn giá bán trung bình Products có ProductId<=5

13 Danh sách Customers Employees không thành phố

14 Cho biết sản phẩm có tổng số lượng bán lớn số lượng trung bình bán

15 Liệt kê danh sách khách hàng mua hóa đơn mà hóa đơn mua sản phẩm có mã >=3

16 Liệt kê danh sách khách hàng mà khách hàng mua hóa đơn nhân viên lập hóa đơn thành phố với khách hàng

17 Danh sách Customers mà Customers mua hàng tháng 7, năm 1997

18 Danh sách City có nhiều customer 19 Tìm tất Customers mua đơn hàng 20 Bạn đưa câu hỏi cho câu truy vấn sau:

Select ProductId, ProductName, UnitPrice from [Products]

(40)

Select ProductId, ProductName, UnitPrice from [Products]

Where Unitprice>ANY (Select Unitprice from [Products] where ProductName like ‘B%’)

Select ProductId, ProductName, UnitPrice from [Products]

Where Unitprice=ANY (Select Unitprice from [Products] where ProductName like ‘B%’)

BÀI TẬP 5: LỆNH SELECT – CÁC LOẠI TRUY VẤN KHÁC

1 Liệt kê danh sách City có Customers Employee (dùng Union) Liệt kê danh sách Country có Customers Employee (dùng Union) Kết danh sách Customer Employee lại với Thông tin gồm

CodeID, Name, Address, Phone Trong CodeID CustomerID/EmployeeID, Name Companyname/LastName + FirstName, Phone Homephone

(41)

BÀI TẬP TUẦN Số tiết:

Mục tiêu:

Thêm, sửa, xóa liệu nâng cao lệnh Insert, Update, Delete

Phần tập dùng CSDL QLBH làm Tuần BÀI TẬP 1: LỆNH INSERT

1 Xóa hết liệu có Table sở liệu QLBH lệnh Delete

Trong trường hợp khơng xóa liệu bảng SanPham chưa xóa liệu bảng SanPham?

Nếu bạn muốn xóa Bảng cha xóa ln bảng quan hệ bạn phải làm gì? Bạn thực ví dụ minh họa

2 Dùng lệnh Insert thêm vào bảng CSDL QLBH record với nội dung sinh viên tự nghĩ

3 Dùng câu lệnh INSERT … SELECT để thêm liệu vào từ câu truy vấn (Chú ý chọn cột tương thích với cột thêm vào kiểm tra kết sau lần thực hiện):

 Các khách hàng có bảng Customers NorthWind vào bảng KhachHang QLBH

 Các sản phẩm có SupplierID từ đến 29 bảng Products CSDL NorthWind vào bảng Sanpham QLBH

 Danh sách tất hố đơn có OrderID nằm khoảng 10248 đến 10350 bảng Orders Northwind vào bảng HoaDon, hoá đơn xem hoá đơn xuất - tức LoaiHD ‘X’

 Danh sách tất hố đơn có OrderID nằm khoảng 10351 đến 10446 bảng Orders Northwind vào bảng HoaDon, hoá đơn xem hoá đơn nhập - tức LoaiHD ‘N’

 Danh sách tất chi tiết hố đơn có OderID nằm khoảng 10248 đến 10270 bảng Order Detail NorthWind vào bảng CT_HoaDon

Chú ý: ràng buộc khóa chính, khóa ngoại ràng buộc khác Chỉ lấy cột tương ứng với bảng CSDL QLBH

BÀI TẬP 2: LỆNH UPDATE

1 Cập nhật đơn giá bán 100000 cho mã sản phẩm có tên bắt đầu chữ T Cập nhật số lượng tồn = 50% số lượng tồn có cho sản phẩm có

(42)

3 Cập nhật mã nhà cung cấp bảng NHACUNGCAP thành 100? Bạn có cập nhật hay khơng? Vì sao?

4 Tăng điểm tích lũy lên 100 cho khách hàng mua hàng tháng năm 1997

5 Giảm 10% đơn giá bán cho sản phẩm có số lượng tồn <10

6 Cập nhật giá bán bảng CT_HoaDon với đơn giá mua bảng SanPham sản phẩm nhà cung cấp có mã hay

BÀI TẬP 3: LỆNH DELETE

Lưu ý, việc xóa liệu cơng việc cần thận trọng, nên thao tác CSDL với lệnh DELETE, trừ loại bỏ liệu tạm Nên phần yêu cầu chúng ta phải chép liệu trước thực công việc sau:

1 Xóa hóa đơn lập tháng năm 1996 Bạn có thực khơng? Vì sao?

2 Xóa hóa đơn khách hàng có loại VL mua hàng năm 1996

3 Xóa sản phẩm chưa bán năm 1996

4 Xóa khách hàng vãng lai Lưu ý xóa xong phải xóa ln hóa đơn chi tiết hóa đơn bảng HoaDon bảng CTHoaDon

(43)

BÀI TẬP TUẦN 10 Số tiết:

Mục tiêu:

Ôn tập lại tất kiến thức học qua số tập Làm tập File sau:

Ngày đăng: 27/04/2021, 17:08

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan