Đang tải... (xem toàn văn)
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 có 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 ToolsOption 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: