TRƯỜNG ĐẠI HỌC MỎ - ĐỊA CHẤT       ĐẶNG HỮU NGHỊ       HOÀNG KIM BẢNG       BÙI THỊ VÂN ANH     BÀI GIẢNG HỆ QUẢN TRỊCƠ SỞ...
MỤC LỤCMỤC LỤC...............................................................................................................
4. Hàm ROUND ................................................................................................58     5. Hàm...
2. Hàm Inline Table-Valued ..............................................................................70     3. Hàm Mul...
Chương I : Những khái niệm cơ bản về cơ sở dữ liệuI. Cơ sở dữ liệu là gì?        Cơ sở dữ liệu là một kho chứa thông tin. ...
Sau đó, ta thiết kế cơ sở dữ liệu, tạo bảng chứa các trường định nghĩa kiểu dữ liệusẽ có. Sau khi tạo ra cấu trúc cơ sở dữ...
1. Các mối quan hệ       Mối quan hệ là một cách đinh nghĩa chính thức hai bảng liên hệ với nhaunhư thế nào . Khi ta định ...
mỗi khi ta thi hành một hành động nào đó làm cho dữ liệu rơi vào trạng thái khôngnhất quán. Ví dụ, trong cơ sở dữ liệu có ...
a. Quan hệ Một - Một      Là loại quan hệ dễ hiểu và dễ thực hiện nhất, bởi vì trong những mối quan hệnhư vậy, một bảng sẽ...
Bài Tập     1. Nêu các đặc trưng chính của Khóa chính (primary key)     2. Khóa ngoại (foreign key) là gì     3. Mục đích ...
Chương 2 : Giới thiệu về SQL Server 2005I. SQL Server 2005       SQL Server 2005 là một hệ thống quản l. cơ sở dữ liệu (Re...
SQL Server. Một số lợi thế khác của SQL Server Express bao gồm dễ dàng cài đặt,dễ dàng quản lí      Trong giáo trình này c...
• Password: Mật khẩu của tên đăng nhập      • Remember password: Tùy chọn được chọn để là đăng nhập sau không        phải ...
Bên cạnh các đối tượng hệ thống là một phần của hệ thống SQL Server bạncó thể tạo các đối tượng của người sử dụng. Các đối...
ví dụ một bảng chứa thông tin về khách hàng, một bảng khác chứa thông tin về đơnđặt hàng. Mỗi bảng trong CSDL phải có tên ...
Thủ tục lưu trữ (Stored Procedure)        Thủ tục lưu trữ là một đối tượng trong CSDL, bao gồm nhiều câu lệnh T-SQL được t...
Hàm do người dùng định nghĩa (Function):         Hàm do người dùng tự định nghĩa (ở đây ta gọi tắt là hàm) là một thủ tục ...
Chương 3: Một số thao tác cơ bản trên SQL Server 2005 Express                                     Edition       Microsoft ...
2. Tạo bảng mới.        Bảng được tạo thành từ các hàng và các cột. Mỗi cột hay còn gọi là trường(field) gồm tên cột (Colu...
• Nhập tên cột, kiểu dữ liệu và độ dài của mỗi trường trong trong bảng         • Chỉ định cột có cho phép chứa giá trị NUL...
smallint           Số nguyên từ -215 đến 215 -1                     2 bytessmallmoney         Dữ liệu kiểu tiền tệ từ - 21...
Cột được tính toán (Computed Column)       Với cột được tính toán, bạn có thể tạo ra một cột mà dữ liệu của nó được tínhto...
Các ràng buộc(Constraints)       Constraints là những thuộc tính (properties) mà ta áp đặt lên một table haymột cột để trá...
Bạn tạo một Unique Constraint bằng cách tạo một unique index.      Foreign Key Constraint       Foreign Key (Khóa ngoại) l...
Ví dụ các giá trị ngầm định như:Biểu thức                      Kết quảgetdate( )                     Thiết lập giá trị ngầ...
Nhập tên và biểu thức ràng buộc.         Kích vào nút Close để thêm ràng buộc và đóng hộp thoại.       Sau khi thiết kế xo...
4. Lược đồ CSDL      a) Thiết lập mối quan hệ giữa các bảng      Sau khi thêm các bảng vào CSDL bạn thiết lập mối quan hệ ...
Xuất hiện hộp thoại sau:      Chọn Yes, xuất hiện hộp thoại Add Table cho phép ta chọn các bảng để đưavào lược đồ       Ch...
Ta thực hiện thiết kế mối quan hệ giữa các bảng trong cơ sở dữ liệu bằngviệc kéo và giữ trường khóa chính của bảng này thả...
bảng cha bị thay đổi thì những bản ghi trong bản ghi có khóa ngoại bằng khóa chínhcủa bản ghi đang thay đổi cũng thay đổi ...
Xuất hiện hộp thoại Save, tại đây ta kích Yes.      b) Chỉnh sửa lược đồ       Kích đúp lên lược đồ muốn chỉnh sửa để mở c...
5. Nhập dữ liệu cho bảng      Để nhập dữ liệu cho bảng trong SQL Server Management Studio ta kíchchuột phải vào tên bảng c...
Xuất hiện hộp thoại sau:           CSDL QLDH đã được mở                                         Soạn thỏa các truy vấn tại...
Để lưu trữ truy vấn bạn vào File và chọn Save SQLQuery1.sql hoặc kích vàobiểu tượng Save trên thanh công cụ. Xuất hiện hộp...
Bài Tập      Bài 1: Tạo bảng Custemer để lưu trữ thông tin về khách hàng bao gồm cáctrường sau:          Trường CustomerID...
Chương 4: Các câu lệnh SQL cơ bảnI. Giới thiệu sơ lược về Transact SQL (T-SQL).       Transact SQL hay còn gọi là T-SQL th...
FROM <danh sách bảng/khung nhìn>      [WHERE <Biểu thức điều kiện>]      [GROUP BY <danh sách cột>]      [HAVING <điều kiệ...
Ví dụ lệnh sau hiển thị họ đệm, tên và địa chỉ của các khách hàng được lưutrữ trong bảng KhachHang      select HoDem, Ten,...
Tên cho tiêu đề cột Ten và Địa chỉ thay cho tiêu đề cột DiaChi khi kết quả đươchiển thị:         select Họ đệm= HoDem,Tên=...
select * from khachhang k      where k.MaKhachHang = 2      Cấu trúc CASE        Trong câu lệnh SELECT, ta có thể sử dụng ...
MaNhomHang             -----------             1             3             4             4             2             2    ...
Toán tử                       Ý nghĩa                    =        So sánh bằng                    >        So sánh lớn hơn...
where MaKhachHang IN (2,4,5,7,8)      Toán tử LIKE và NOT LIKE      Dùng để so khớp các giá trị chuỗi theo mẫu, mẫu ở đây ...
xếp có thể theo chiều tăng (ASC) hoặc giảm (DESC), mặc định là sắp xếp theochiều tăng. Nếu sau ORDER BY có nhiều cột thì v...
e. Mệnh để HAVING       Mệnh đề HAVING dùng để đặt điều kiện lọc cho các phân nhóm con.Having đi sau Group By để đặt điều ...
Nếu bạn muốn biết kết quả có tổng con theo một cột nào đó, ví dụ như cộtmadonhang, thì bạn dùng COMPUTE BY như sau:      s...
Bạn có thể truy vấn dữ liệu từ 2 bảng này thông qua khóa MaKhachHang,hoạt động liên kết được thực hiện trong mệnh đề Where...
Mục đích của Inner Join là so khớp các dòng trong một bảng với các dòngtương ứng trong bảng khác mà ở đó các cột liên kết ...
Nếu bạn muốn chỉ trả về những khách hàng nào không có đơn hàng thì bạnthêm điều kiện trong mệnh đề WHERE như sau:      sel...
Để bổ sung một dòng dữ liệu mới vào bảng, ta sử dụng câu lệnh INSERT vớicú pháp như sau:       INSERT INTO tên_bảng[(danh_...
select * into KhachHang_Backup      from KhachHang     Nếu bạn muốn giới hạn dữ liệu thêm vào bảng mới bạn có thể dùng mện...
Để xóa toàn bộ dữ liệu trong một bảng bạn chỉ cần chỉ ra tên bảng sau lệnhDELETE. Ví dụ muón xóa hết dữ liệu trong bảng Kh...
Trong đó:      table_name: Là tên của bảng mới      column_name: Tên cột trong bảng      data_type: Kiểu dữ liệu của cột  ...
thêm vào, giá trị cột này được tăng lên 1. Cột này cũng được chỉ định làm khóachính của bảng thông qua thuộc tính primary ...
[ ON DELETE { CASCADE | NO ACTION | SET DEFAULT |SET NULL }]       [ ON UPDATE { CASCADE | NO ACTION | SET DEFAULT |SET NU...
Dấu tên cột đối với người sử dụng            Giới hạn số lương cột và hàng mà người sử dụng sẽ làm việc            Dễ dàng...
Nếu trong câu lệnh CREATE VIEW, ta không chỉ định danh sách các tên cộtcho khung nhìn, tên các cột trong khung nhìn sẽ chí...
Bài TậpBài 1: Tạo CSDL LUONG để lưu trữ lương, trong đó có bảng tblLuong có cấu trúcnhư sau:         Tên trường           ...
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
Upcoming SlideShare
Loading in...5
×

Bai giang hệ quản trị cơ sở dữ liệu

1,829

Published on

thietkelogoart.com

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,829
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
149
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Transcript of "Bai giang hệ quản trị cơ sở dữ liệu"

  1. 1. TRƯỜNG ĐẠI HỌC MỎ - ĐỊA CHẤT ĐẶNG HỮU NGHỊ HOÀNG KIM BẢNG BÙI THỊ VÂN ANH BÀI GIẢNG HỆ QUẢN TRỊCƠ SỞ DỮ LIỆU HÀ NỘI - 2011 0
  2. 2. MỤC LỤCMỤC LỤC...................................................................................................................0Chương I : Những khái niệm cơ bản về cơ sở dữ liệu ................................................4 I. Cơ sở dữ liệu là gì? ..............................................................................................4 1. Hệ quản trị cơ sở dữ liệu..................................................................................4 2. Bản ghi và trường ............................................................................................4 II. Thiết kế cơ sở dữ liệu. ........................................................................................4 1. Các mối quan hệ ..............................................................................................6 2. Sử dụng tính toàn vẹn tham chiếu để duy trì tính nhất quán ...........................6 3. Chuẩn hoá ........................................................................................................7Chương 2 : Giới thiệu về SQL Server 2005..............................................................10 I. SQL Server 2005................................................................................................10 II. Bắt đầu với SQL Server Management Studio Express.....................................11Chương 3: Một số thao tác cơ bản trên SQL Server 2005 Express Edition .............17 1. Tạo một CSDL mới. ..........................................................................................17 2. Tạo bảng mới.....................................................................................................18 3. Thay đổi cấu trúc của bảng................................................................................25 4. Lược đồ CSDL ..................................................................................................26 5. Nhập dữ liệu cho bảng.......................................................................................31 6. Xóa bảng, xóa CSDL.........................................................................................31 7. Mở một query editor để viết câu lệnh SQL.......................................................31Chương 4: Các câu lệnh SQL cơ bản........................................................................35 I. Giới thiệu sơ lược về Transact SQL (T-SQL). ..................................................35 II. Ngôn ngữ thao tác dữ liệu.................................................................................35 1. Câu lệnh Select ..............................................................................................35 2. Truy vấn dữ liệu từ nhiều bảng......................................................................45 3. Thêm dữ liệu vào bảng ..................................................................................48 4. Cập nhật dữ liệu.............................................................................................50 5. Xóa dữ liệu.....................................................................................................50 III. Ngôn ngữ định nghĩa dữ liệu..........................................................................51 1. Tạo bảng ........................................................................................................51 2. Sửa đổi định nghĩa bảng ................................................................................53 3. Xóa bảng ........................................................................................................54 4. Khung nhìn - VIEW.......................................................................................54Chương 5: Một số hàm trong SQL Server ................................................................58 I. Các hàm trên dữ liệu kiểu số..............................................................................58 1. Hàm ABS.......................................................................................................58 2. Hàm CEILING...............................................................................................58 3. Hàm FLOOR..................................................................................................58 1
  3. 3. 4. Hàm ROUND ................................................................................................58 5. Hàm SQUARE...............................................................................................58 6. Hàm SQRT ....................................................................................................58 7. Hàm isNumeric:.............................................................................................58 II. Nhóm hàm thống kê..........................................................................................58 1. Hàm COUNT:................................................................................................58 2. Hàm MAX: ....................................................................................................58 3. Hàm MIN:......................................................................................................58 4. Hàm SUM:.....................................................................................................58 5. Hàm AVG:.....................................................................................................58 II. Nhóm hàm xử lý chuỗi kí tự............................................................................59 1. Hàm LEFT .....................................................................................................59 2. Hàm RIGHT ..................................................................................................59 3. Hàm LEN.......................................................................................................59 4. Hàm LTRIM ..................................................................................................59 5. Hàm RTRIM ..................................................................................................59 6. Hàm LOWER ................................................................................................59 7. Hàm UPPER ..................................................................................................59 8. Hàm SUBSTRING ........................................................................................59 9. Hàm Replace..................................................................................................59 10. Hàm STR .....................................................................................................59 III. Nhóm hàm ngày tháng. ...................................................................................60 1. Hàm GETDATE: ...........................................................................................60 2. Hàm DATEPART..........................................................................................60 3. Hàm DAY( ): .................................................................................................60 4. Hàm MONTH( ): ...........................................................................................60 5. Hàm YEAR( ): ...............................................................................................60 6. DATEADD ....................................................................................................61 7. DATEDIFF ....................................................................................................61 IV. Hàm CAST và CONVERT .............................................................................61Chương 6: Thủ tục lưu trữ, hàm và trigger ...............................................................63 I. Thủ tục lưu trữ (Stored Procedure) ....................................................................63 1. Tạo thủ tục lưu trữ bằng Lệnh CREATE.......................................................63 2. Biến trong thủ tục lưu trữ ..............................................................................64 3. Giá trị trả về trong thủ tục lưu trữ..................................................................65 4. Các lệnh điều khiển .......................................................................................66 5. Thay đổi thủ tục lưu trữ .................................................................................69 6. Xóa thủ tục lưu trữ.........................................................................................69 II. Hàm do người dùng định nghĩa (User Defined Function-UDF) ......................69 1. Hàm Scalar.....................................................................................................69 2
  4. 4. 2. Hàm Inline Table-Valued ..............................................................................70 3. Hàm Multi-Statement Table-Valued .............................................................70 III. Trigger .............................................................................................................71 1. Tạo các Trigger..............................................................................................73 2. Trigger cho hành động thêm bản ghi.............................................................74 3. Trigger cho hành động cập nhật bản ghi .......................................................76 4. Trigger cho hành động xóa bản ghi ...............................................................76Chương 7: SQL Server và lập trình ứng dụng ..........................................................78 I. Mô hình kết nối ứng dụng đến SQL server........................................................78 1. Mô hình ADO ................................................................................................78 2. Mô hình ADO.NET .......................................................................................79 3. Khác biệt giữa ADO và ADO.NET...............................................................80 II. Truy cập dữ liệu với VB 6 và ADO..................................................................81 1. ADO...............................................................................................................81 2. VÍ DỤ ............................................................................................................86 III. Truy cập dữ liệu với VB.NET và ADO.NET.................................................92 1. ADO.NET ......................................................................................................92PHỤ LỤC................................................................................................................106 3
  5. 5. Chương I : Những khái niệm cơ bản về cơ sở dữ liệuI. Cơ sở dữ liệu là gì? Cơ sở dữ liệu là một kho chứa thông tin. Có nhiều loại cơ sở dữ liệu, nhưngta chỉ đề cập đến cơ sở dữ liệu quan hệ, là kiểu cơ sở dữ liệu phổ biến nhất hiện nay.Một cơ sở dữ liệu quan hệ: Chứa dữ liệu trong các bảng, được cấu tạo bởi các dòng còn gọi là các bảnghi, và cột gọi là các trường. Cho phép lấy về (hay truy vấn) các tập hợp dữ liệu con từ các bảng. Cho phép liên kết các bảng với nhau cho mục đích truy cập các bản ghi liên quan với nhau chứa trong các bảng khác nhau. 1. Hệ quản trị cơ sở dữ liệu. Hệ quản trị cơ sở dữ liệu (Database Management System - DBMS): Là mộthệ thống phần mềm cho phép tạo lập cơ sở dữ liệu và điều khiển mọi truy nhập đốivới cơ sở dữ liệu đó. Trên thị trường phần mềm hiện nay ở Việt Nam đã xuất hiện khá nhiều phầnmềm hệ quản trị cơ sở dữ liệu như: Microsoft Access, Foxpro, DB2, SQL Server,Oracle,.v.v… - Hệ quản trị cơ sở dữ liệu quan hệ (Relation Database Management System- RDBMS) là một hệ quản trị cơ sở dữ liệu theo mô hình quan hệ. 2. Bản ghi và trường Các cơ sở dữ liệu được cấu tạo từ các bảng dùng thể hiện các phân nhóm dữliệu. Ví dụ, nếu ta tạo một cơ sở dữ liệu để quản lý tài khoản trong công việc kinhdoanh ta phải tạo một bảng cho khách hàng, một bảng cho Hoá đơn và một bảngcho nhân viên. Bảng có cấu trúc định nghĩa sẵn và chứa dữ liệu phù hợp với cấutrúc này. Bảng: Chứa các bản ghi tin là các mẩu riêng rẽ bên trong phân nhóm dữ liệu. Bản ghi: Chứa các trường. Mỗi trường thể hiện một bộ phận dữ liệu trongmột bản ghi. Ví dụ như mỗi bản ghi thể hiện một mục trong danh bạ địa chỉ chứatrong trường Họ và tên, địa chỉ, và số điện thoại.II. Thiết kế cơ sở dữ liệu. Để tạo một cơ sở dữ liệu, trước hết ta phải xác định thông tin gì cần theo dõi. 4
  6. 6. Sau đó, ta thiết kế cơ sở dữ liệu, tạo bảng chứa các trường định nghĩa kiểu dữ liệusẽ có. Sau khi tạo ra cấu trúc cơ sở dữ liệu, tạo bảng chứa các trường định nghĩakiểu dữ liệu sẽ có. Sau khi tạo ra cấu trúc cơ sở dữ liệu, cơ sở dữ liệu có thể chứa dữliệu dưới dạng bản ghi. Ta không thể đưa dữ liệu vào mà không có bảng hay địnhnghĩa trường vì dữ liệu sẽ không có chỗ để chứa.Do đó, thiết kế cơ sở dữ liệu cựckỳ quan trọng, nhất là rất khó thay đổi thiết kế một khi ta đã tạo xong nó. Ví dụ ta tạo một bảng sau: Bảng khách hàng Bảng tblRegion tblCustomer TblRegion CustomerID State FirstName RegionName LastName Company Address City State Zip Phone Fax Email Có quan hệ giữa 2 bảng thông qua trường State . Đây là mối quan hệ một -nhiều, đối với một bản ghi trong tblRegion, có thể không có, hoặc có nhiều bản ghitương ứng trong bảng tblCustomer. Cụm từ “tbl” thể hiện tên bảng, tên trường hiển thị đầy đủ, không chứakhoảng trắng hay những ký tự đặc biệt khác như dấu gạch dưới. Bảng hoá đơn: TblOrder ID CustomerID OrderDate ItemID Amount Khóa chính: là kiểu chỉ mục đặc biệt. Một trường được chỉ ra như là khóachính của một bảng phục vụ cho việc xác định duy nhất bản ghi. Vì vậy không nhưcác kiểu chỉ mục khác, sẽ không có hai bản ghi trong cùng một bảng mà có cùng giátrị cho trường khóa chính. Khi thiết kế một trường làm khóa chính, không có bảnghi nào chứa giá trị rỗng (giá trị NULL) ở trường này. Khi chỉ ra một trường làkhóa chính của bảng ta có thể tạo mối quan hệ giữa bảng này với một bảng kháctrong CSDL. 5
  7. 7. 1. Các mối quan hệ Mối quan hệ là một cách đinh nghĩa chính thức hai bảng liên hệ với nhaunhư thế nào . Khi ta định nghĩa một mối quan hệ, ta đã thông báo với bộ máy cơ sởdữ liệu rằng hai trường trong hai bảng liên quan được nối với nhau. Hai trường liên quan với nhau trong một mối quan hệ là khoá chính và khoángoại. Khoá ngoại là khoá trong bảng liên quan chứa bản sao của khoá chính củabảng chính. Sau đó mối quan hệ báo cho bộ máy cơ sở dữ liệu hai bảng liên quan vớinhau trong mối quan hệ và khoá ngoại nào liên quan với khoá chính nào. Ngoài việc ghép các bản ghi liên quan trong các bảng riêng biết, ta còn địnhnghĩa mối quan hệ để tận dụng thế mạnh của tính toàn vẹn tham chiếu, một thuộctính của bộ máy cơ sở dữ liệu duy trì các dữ liệu trong một cơ sở dữ liệu nhiều bảngluôn luôn nhất quán. Khi tính toàn vẹn tham chiếu tồn tại trong một cơ sở dữ liệu,bộ máy cơ sở dữ liệu sẽ ngăn cản ta xoá một bản ghi khi có các bản ghi khác thamchiếu đến nó trong cơ sở dữ liệu. Sau khi đã định nghĩa một mối quan hệ trong cơ sở dữ liệu, việc định nghĩamối quan hệ này sẽ được lưu trữ cho đến khi ta xóa nó. 2. Sử dụng tính toàn vẹn tham chiếu để duy trì tính nhất quán Khi các bảng nối kết với nhau thông qua mối quan hệ, dữ liệu trong mỗibảng phải duy trì sự nhất quán trong các bảng liên kết. Tính toàn vẹn tham chiếuquản lý công việc này bằng cách theo dõi mối liên hệ giữa các bảng và ngăn cấmcác kiểu thao tác nào đó trên các bản ghi. Ví dụ, giả định rằng ta có một bảng gọi là tblCustomer và một bảng khác làtblOrder. Hai bảng này quan hệ với nhau qua trường chung là CustomerID. Giả thiết ở đây là ta tạo các khách hàng chứa trong tblCustomer rồi tạo cáchoá đơn trong tblOrder. Nhưng điều gì sẽ xảy ra nếu ta tiến hành xoá một kháchhàng có hoá đơn chưa xử lý chứa trong bàng hoá đơn? Hoặc là nếu ta tạo một hoáđơn mà không có một CustomerID hợp lệ gắn liền với nó? Mục hoá đơn không cóCustomerID thì không thể gửi đi, bởi vì địa chỉ gửi là một trường của mẩu tin trongtblCustomer. Khi dữ liệu trong các bảng quan hệ gặp phải rắc rối này, ta nói nó ởtrọng thái không nhất quán. Một điểu rất quan trọng là cơ sở dữ liệu không được trở nên không nhấtquán, bộ máy cơ sở dữ liệu cung cấp một cách để ta định nghĩa mối quan hệ trongcác bảng. Khi ta định nghĩa một mối quan hệ chính thức giữa hai bảng bộ máy cơ sởdữ liệu sẽ giám sát mối quan hệ này và ngăn cấm bất kỳ thao tác nào vi phạm tínhtoàn vẹn tham chiếu. Hoạt động của cơ chế toàn vẹn tham chiếu là phát sinh ra lỗi 6
  8. 8. mỗi khi ta thi hành một hành động nào đó làm cho dữ liệu rơi vào trạng thái khôngnhất quán. Ví dụ, trong cơ sở dữ liệu có tính toàn vẹn tham chiếu đang hoạt động,nếu ta cố tạo một hoá đơn chứa một CustomerID của khách hàng đối với một kháchhàng không tồn tại, ta sẽ nhận một thông báo lỗi và hoá đơn sẽ không thể tạo ra. 3. Chuẩn hoá Chuẩn hoá là một khái niệm liên quan đến mối quan hệ. Về cơ bản, nguyêntắc của chuẩn hoá phát biểu rằng các bảng cơ sở dữ liệu sẽ loại trừ tính không nhấtquán và giảm thiểu sự kém hiệu quả. Các cơ sở dữ liệu được mô tả là không nhất quán khi dữ liệu trong một bảngkhông tương ứng với dữ liệu nhập vào trong bảng khác. Ví dụ, Nếu phân nửa sốngười nghĩ rằng Arkansr ở miền Trung Tây và một nửa nghĩ rằng nó nằm ở phíaNam và nếu cả hai nhóm nhân viên nhập liệu theo ý kiến riêng của họ, khi ấy báocáo cơ sở dữ liệu trình bày những việc xảy ra ở miền Trung Tây là vô nghĩa. Một cơ sở dữ liệu kém hiệu quả không cho phép ta trích ra các dữ liệu chínhxác mà ta muốn. Một cơ sở dữ liệu chứa toàn bộ dữ liệu trong một bảng có thể buộcta phải vất vả duyệt qua một lượng lớn tên các khách hàng, địa chỉ và lịch sử liên hệchỉ để lấy về 1 số điện thoại của một khách hàng nào đó. Mặt khác, một cơ sở dữliệu được chuẩn hoá đầy đủ chứa từng mẩu thông tin của cơ sở dữ liệu trong bảngriêng và xa hơn, các định từng mẩu thông tin duy nhất thông qua khoá chính của nó. Các cơ sở dữ liệu chuẩn hoá cho phép ta tham chiếu đến một mẩu thông tintrong một bảng bất kỳ chỉ bằng khoá chính của thông tin đó. Ta quyết định cách thức chuẩn hoá của một cơ sở dữ liệu khi ta thết kế vàkhởi tạo một cơ sở dữ liệu. Thông thường, mọi thứ về ứng dụng cơ sở dữ liệu - từthiết kế bảng cho đến thiết kế truy vấn, từ giao diện người sử dụng đến cách hoạtđộng của báo cáo - đều xuất phát từ cách chuẩn hoá cơ sở dữ liệu. Là một lập trình viên cơ sở dữ liệu, thỉnh thoảng bạn sẽ chợt nảy ra ý nghĩvề cơ sở dữ liệu vẫn chưa được chuẩn hoá vì lý do này hay lý do khác. Sự thiếuchuẩn hoá có thể do chủ ý, hoặc có thể là do kết quả của sự thiếu kinh nghiệm hoặcsự khộng thận trọng trong việc thiết kế cơ sở dữ liệu ban đầu. Dù ở mức độ nào, nếuđã chọn chuẩn hoá một cơ sở dữ liệu đã tồn tại, ta nên thực hiện sớm (bởi vì mọithứ khác thực hiện trong cơ sở dữ liệu đều phụ thuộc vào cấu trúc bảng của cơ sởdữ liệu). Hơn nữa, ta sẽ thấy những câu truy vấn hành động là công cụ rất hữu íchtrong việc sắp xếp lại một cơ sở dữ liệu thiết kế thiếu sót. Truy vẫn là hành độngcho phép ta đi chuyển các trường từ bảng này sang bảng khác như là thêm, cập nhậtvà xoá bản ghi từ các bảng dựa trên các tiêu chỉ nêu ra. 7
  9. 9. a. Quan hệ Một - Một Là loại quan hệ dễ hiểu và dễ thực hiện nhất, bởi vì trong những mối quan hệnhư vậy, một bảng sẽ lấy vị trí của một trường trong một bảng khác, trường liênquan cũng dễ nhận dạng. Tuy nhiên, quan hệ một - một không phải là mối quan hệthông dụng nhất trong ứng dụng cơ sở dữ liệu. Do 2 nguyên nhân: 1. Hầu như ta không cần biểu diễn mối quan hệ một một với hai bảng. Ta có thể dùng nó để cải tiến khả năng hoạt động, ví dụ ta mất tính linh hoạt khi chứa các dữ liệu liên hệ trong một bảng tách biệt. Trong ví dụ trước, thay vì có các bảng nhân viên và công việc chứa trong bảng nhân viên. 2. Thể hiện quan hệ một - nhiều thì cũng khá dễ (nhưng linh hoạt hơn nhiều) quan hệ một - một. b. Quan hệ một - nhiều Phổ biến hơn quan hệ một - một, trong đó, mối bản ghi trong một bàng nàykhông có, hoặc có một, hoặc nhiều bản ghi trong một bảng liên hệ. Ví dụ, ta gán từng khách hàng cho một người bán hàng. Để thực hiện điềunày, ta cần một bảng cho người bán hàng : Bởi vì một người bán hàng có trách nhiệm với nhiều khách hàng, ta có thểnói đã có mối quan hệ một - nhiều giữa người bán hàng và khách hàng. Để thực hiện mối quan hệ này trong thiết kế cơ sở dữ liệu, ta phải copy khoáchính của phía một đến bảng chứa phía nhiều trong quan hệ. c. Quan hệ nhiều nhiều Quan hệ nhiều - nhiều là bước phát triển của quan hệ một - nhiều ví dụ cổđiển của quan hệ nhiều nhiều là học sinh và lớp. Mỗi học sinh có nhiều lớp, mỗi lớpcó nhiều học sinh. Để thiết lập quan hệ nhiều nhiều, ta có thể sửa lại ví dụ trước sao cho cơ sởdữ liệu có thể chứa nhiều người bán cho một người mua. Mỗi người bán có nhiềukhách hàng, và mỗi khách hàng có nhiều người bán. 8
  10. 10. Bài Tập 1. Nêu các đặc trưng chính của Khóa chính (primary key) 2. Khóa ngoại (foreign key) là gì 3. Mục đích của việc thiết kế CSDL quan hệ là gì? . 9
  11. 11. Chương 2 : Giới thiệu về SQL Server 2005I. SQL Server 2005 SQL Server 2005 là một hệ thống quản l. cơ sở dữ liệu (Relational DatabaseManagement System (RDBMS)) sử dụng Transact-SQL để trao đổi dữ liệu giữaClient computer và SQL Server computer. Một RDBMS bao gồm databases,database engine và các ứng dụng dùng để quản trị dữ liệu và các bộ phận khác nhautrong RDBMS. SQL Server 2005 được tối ưu để có thể chạy trên môi trường cơ sở dữ liệurất lớn (Very Large Database Environment) lên đến Tera-Byte và có thể phục vụcùng lúc cho hàng ngàn user. SQL Server 2005 có thể kết hợp "ăn ." với các serverkhác như Microsoft Internet Information Server (IIS), E-Commerce Server, ProxyServer.... Các phiên bản của SQL Server 2005: • SQL Server 2005 Express Edition • SQL Server 2005 Enterprise Edition • SQL Server 2005 Standard Edition • SQL Server 2005 Workgroup Edition • SQL Server 2005 Developer Edition • SQL Server 2005 Mobile Edition Enterprise: Hỗ trợ không giới hạn số lượng CPU và kích thước Database. Hỗtrợ không giới hạn RAM (nhưng tùy thuộc vào kích thước RAM tối đa mà HĐH hỗ trợ)và các hệ thống 64bit. Standard: Tương tự như bản Enterprise nhưng chỉ hỗ trợ 4 CPU. Ngoài raphiên bản này cũng không được trang bị một số tính năng cao cấp khác. Workgroup: Tương tự bản Standard nhưng chỉ hỗ trợ 2 CPU và tối đa 3GBRAM Express: Bản miễn phí, hỗ trợ tối đa 1CPU, 1GB RAM và kích thướcDatabase giới hạn trong 4GB. SQL Server 2005 Express Edition SQL Server 2005 Express cung cấp một phương tiện tuyệt vời cho nhữngngười bắt đầu làm việc với SQL Server. Nó cung cấp một môi trường mạnh mẽ,đáng tin cậy ổn định và đó là môi trường miễn phí và dễ sử dụng. Nó cung cấp cácchức năng bảo mật và quản lý thông tin tương tự như các phiên bản tinh vi hơn của 10
  12. 12. SQL Server. Một số lợi thế khác của SQL Server Express bao gồm dễ dàng cài đặt,dễ dàng quản lí Trong giáo trình này chúng ta sẽ tập trung nghiên cứu về SQL Server 2005ExpressII. Bắt đầu với SQL Server Management Studio Express SQL Server Management Studio Express là công cụ mà bạn sử dụng để quảnlý SQL Server và các đối tượng của nó. Sử dụng công cụ này, bạn có thể tạo và làmviệc với cơ sở dữ liệu, bảng biểu, các thủ tục lưu trữ, các chỉ mục, và nhiều hơnnữa. Để khởi động SQL Server Management Studio Express bạn thực hiện theocác bước sau: Vào Start/Programs/Microsoft SQL Server 2005/ SQL Server ManagementStudio Express, xuất hiện hộp thoại Connect to Server. Trong đó: • Server type: Chọn Database Engine để kết nối đến cỗ máy cơ sở dữ liệu. • Server name: Chọn hoặc nhập tên server, bạn nhập tên server ở dạng TenmayTenTheHien. Ví dụ để kết nối tới thể hiện có tên SQLEXPRESS trên máy MDC-FCE bạn nhập: MDC-FCE SQLEXPRESS • Authentication: Chọn chế độ xác thực là Windows Authentication hoặc SQL Server Authentication, nếu chọn SQL Server Authentication thì ta phải cung cấp thông tin cho các mục User name và Password. • User name: Nhập tên đăng nhập 11
  13. 13. • Password: Mật khẩu của tên đăng nhập • Remember password: Tùy chọn được chọn để là đăng nhập sau không phải đánh mật khẩu. Sau khi nhập xong các thông tin ta nhấn nút Connect, giao diện sau khi đăngnhập thành công như sau:Các đối tượng trong một CSDL Các đối tượng hệ thống và đối tượng của người sử dụng CSDL hệ thống (System databases) bao gồm Master, Model, MSDB,Resource, TempDB, và Distribution. SQL tạo ra các CSDL này trong quá trình càiđặt. Như tên gọi của chúng, chúng là một phần của hệ thống, và hầu hết trong sốchúng được sử dụng để cho phép máy chủ hoạt động. 12
  14. 14. Bên cạnh các đối tượng hệ thống là một phần của hệ thống SQL Server bạncó thể tạo các đối tượng của người sử dụng. Các đối tượng của người sử dụng baogồm các CSDL, các thủ tục lưu trữ, các hàm, và các dối tượng CSDL khác. Bạn cóthể thêm hoặc xóa các đối tượng này khi cần thiết. Bảng (Table) Bảng nói chung là đối tượng đầu tiên mà bạn đưa vào CSDL SQL Server,bảng chứa các dữ liệu trong CSDL của bạn. Mỗi bảng chứa thông tin về một chủ đề, 13
  15. 15. ví dụ một bảng chứa thông tin về khách hàng, một bảng khác chứa thông tin về đơnđặt hàng. Mỗi bảng trong CSDL phải có tên duy nhất. Lược đồ CSDL (Database Diagram) Lược đồ CSDL thể hiện cấu trúc của CSDL dưới dạng đồ họa, nó biểu diễnmối quan hệ giữa các bảng trong CSDL. Sử dụng lược đồ CSDL bạn có thể chỉnhsửa bảng, các cột, mối quan hệ, khóa, và các chỉ mục v.v.... Khung nhìn (View): Khung nhìn là một bảng tạm thời, có cấu trúc như một bảng. Nội dung củakhung nhìn dựa trên một truy vấn (query), nó chỉ tồn tại trong bộ nhớ. Dữ liệutrong một khung nhìn có thể đến từ một hoặc nhiều bảng trong CSDL. Nó cũng cóthể đến từ các khung nhìn khác thậm chí đến từ dữ liệu trong các CSDL khác. 14
  16. 16. Thủ tục lưu trữ (Stored Procedure) Thủ tục lưu trữ là một đối tượng trong CSDL, bao gồm nhiều câu lệnh T-SQL được tập hợp lại với nhau thành một nhóm, và tất cả các lệnh này sẽ được thựcthi khi thủ tục lưu trữ được thực thi. 15
  17. 17. Hàm do người dùng định nghĩa (Function): Hàm do người dùng tự định nghĩa (ở đây ta gọi tắt là hàm) là một thủ tục chophép chấp nhận các tham số đầu vào, thực hiện một số các thao tác và trả về kết quảcủa các thao tác như một giá trị. Kết quả trả về có thể là một giá trị hoặc một tập cácgiá trị. Hàm có rất nhiều lọi ích, cũng giống như các thủ tục lưu trữ chúng cho phépta modul hóa chương trình nghĩa là ta có thể gọi nó ở bất cứ điểm nào trong chươngtrình. Trigger Trigger là một dạng đặc biệt của thủ tục lưu trữ, nó được thực hiện khi mộtsự kiện ngôn ngữ thực thi. Có 2 loại trigger: DML triggers and DDL triggers. DDLtrigger được Microsoft giới thiệu trong SQL server 2005. Chúng được thực hiện khicó sự thay đổi cấu trúc của CSDL. Ví dụ khi ai đó cố gắng xóa một trường của mộtbảng, bạn có thể viết một DDL trigger để ngăn chặn việc xóa một trường nếutrường đó có chứa dữ liệu. Bạn cũng có thể sử dụng DDL trigger để thống kê cácthay đổi về cấu trúc của CSDL. DML trigger được gọi khi một sự kiện DML (Data Manipulation Language)diễn ra trong CSDL. Các sự kiện DML bao gồm các lệnh INSERT, UPDATE, andDELETE v.v...xảy ra khi dữ liệu trong một bảng hoặc một khung nhìn bị thay đổi.DDM trigger có một số tác dụng như chúng có thể bảo vệ dữ liệu của bạn từ cáclệnh INSERT, UPDATE, and DELETE không hợp lệ. 16
  18. 18. Chương 3: Một số thao tác cơ bản trên SQL Server 2005 Express Edition Microsoft SQL Server Management Studio Express cung cấp một giao diệnthân thiện giúp cho người dùng thực hiện các thao tác một cách dễ dàng. Một số cácthao tác cơ bản bao gồm: tạo CSDL mới, xóa CSDL, tạo bảng, xóa bảng…Cũng cầnlưu ý rằng các thao tác thực hiện thông qua giao diện thì đều có thể được thực hiệnđược bằng các câu lệnh SQL.1. Tạo một CSDL mới. Để tạo CSDL mới ta kích chuột phải vào mục Database trong cửa sổ ObjectExplorer và chọn New Database... Gõ tên của CSDL vào mục Database name (ví dụ ở đây ta tạo CSDL QLDH)sau đó kích OK 17
  19. 19. 2. Tạo bảng mới. Bảng được tạo thành từ các hàng và các cột. Mỗi cột hay còn gọi là trường(field) gồm tên cột (Column Name), kiểu dữ liệu (Data Type) và một giá trị cho biếtcột đó có thể chứa giá trị NULL hay không. Để tạo bảng ta thực hiện theo các bước sau: • Kích chuột phải vào mục Table trong CSDL mà bạn muốn thêm bảng mới sau đó chọn New Table • Cửa sổ thiết kế bảng xuất hiện. 18
  20. 20. • Nhập tên cột, kiểu dữ liệu và độ dài của mỗi trường trong trong bảng • Chỉ định cột có cho phép chứa giá trị NULL hay không • Thiết lập các thuộc tính cho cột trong phần Column Properties Một trong những thuộc tính quan trọng nhất của cột là kiểu dữ liệu của cột.Có các kiểu dữ liệu sau: Kiểu dữ liệu Phạm vi lưu trữ Kích thướcbigint Các số nguyên từ -263 đến 263-1 8 bytesbinary(n) Dữ liệu nhị phân với độ dài cố định n byte (1 n+ 4 bytes ≤ n ≤ 8000)bit Kiểu bit (có giá trị 0 hoặc 1) 1 bytechar(n) Kiểu chuỗi có chiều dài n kí tự cố định (1 ≤ n n bytes ≤ 8000). Không hỗ trợ Unicodedatetime Dữ liệu ngày giờ, nhận giá trị từ 1/1/1753 đến 4 bytes 31/12/9999decimal(p,s) Dữ liệu số thập phân. p là tổng số ký tự số có Phụ thuộc vào độ thể được lưu, s là số chữ số thập phân chính xácfloat Dữ liệu số số thực dấu phẩy động có phạm vi 8 bytes từ -1.79E+308 đến 1.79E+308image Dữ liệu nhị phân. Có thể lưu trữ tối đa Phụ thuộc dữ liệu 2,147,483,647 bytes dữ liệu nhị phânint Số nguyên có giá trị từ -231 đến 231 - 1 4 bytesmoney Dữ liệu kiểu tiền tệ từ -263 đến 263 8 bytesnchar(n) Dữ liệu chuỗi, có chiều dài cố định n (1 ≤ n ≤ 2n bytes 4000) ký tự Unicodentext Dữ liệu kiếu chuỗi, có thể lưu trữ tối đa Mỗi kí tự chiếm 1,073,741,823 kí tự Unicode 2 bytesnumeric(p,s) Tương tự kiểu decimalnvarchar(n) Dữ liệu kiếu chuỗi, có thể lưu trữ n (1 ≤ n ≤ 2n bytesnvarchar(MAX) 4000) kí tự Unicodereal Dữ liệu số thực dấu phẩy động, phạm vi từ - 4 bytes 3.4E+38 đến 3.4E+38.smalldatetime Dữ liệu ngày giờ có thể lưu trữ từ 1/1/1900 4 bytes đến 6/6/2079 19
  21. 21. smallint Số nguyên từ -215 đến 215 -1 2 bytessmallmoney Dữ liệu kiểu tiền tệ từ - 214,748.3648 đến 4 bytes 214,748.3647sql_variant Cho phép giữ các giá trị của các kiểu dữ liệu khác nhau (tất cả các kiểu dữ liệu hệ thống khác).text Dữ liệu kiểu chuỗi, có thể lưu trữ tối đa Mỗi kí tự chiếm 2,147,483,647 kí tự. Không hỗ trợ Unicode 1 bytestimestamp Cột timestamp được cập nhật tự động mỗi khi 8 bytes dòng đượcthêm hoặc được cập nhật. Mỗi bảng chỉ có thể có 1 cột timestamptinyint Số nguyên có giá trị từ 0 đến 255 1 byteunique-dentifier Là số định danh duy nhất toàn cục (GUID). 16 bytes Nó được tự động sinh ra mỗi khi hàm NEWID( ) được sử dụngvarbinary(n) Dữ liệu nhị phân có chiều dài thay đổi (1 ≤ n n bytes ≤ 8000)varchar(n) Dữ liệu ký tự có chiều dài thay đổi với n (1 ≤ n bytes n ≤ 8000) ký tự. Không hỗ trợ Unicode Sự khác biệt giữa char(10), nchar(10) varchar(10), nvarchar(10): Loại dữ liệuChar là một loại chuỗi kí tự có kích thước cố định, nghĩa là trong ví dụ trên nếu dữliệu đưa vào "This is a really long character string" (lớn hơn 10 ký tự) thì SQLServer sẽ tự động cắt phần đuôi và ta chỉ còn "This is a". Tương tự nếu chuỗi kí tựđưa vào nhỏ hơn 10 thì SQL sẽ thêm khoảng trống vào phía sau cho đủ 10 ký tự.Ngược lại loại varchar sẽ không thêm các khoảng trống phía sau khi chuỗi kí tự đưavào ít hơn 10. Còn kiểu dữ liệu bắt đầu bằng chữ n chứa dữ liệu dạng Unicode. Cột nhận dạng (Identity Columns) Cột nhận dạng trong một bảng là cột mà SQL tự động cung cấp dữ liệu. Cộtnhận dạng có dữ liệu kiểu số, giá trị của nó được tăng tự động khi một hàng mớiđược thêm vào. Mặc định giá trị đầu tiên là 1, mỗi giá trị tiếp theo tăng lên 1. Ngườithiết kế CSDL có thể chỉ ra giá trị bắt đầu và giá trị bước tăng. Cột nhận dạngthường có kiểu dữ liệu int. Ta có thiết lập cột này là khóa chính. Để thiết lập một làcột nhận dạng và giá trị bước tăng ta thay đổi các giá trị trong phần IndentySpecification của cửa sổ Column Properties. 20
  22. 22. Cột được tính toán (Computed Column) Với cột được tính toán, bạn có thể tạo ra một cột mà dữ liệu của nó được tínhtoán từ các cột khác. SQL tự động cập nhật giá trị của cột được tính toán khi giá trịcủa các cột phụ thuộc thay đổi.Ví dụ giá trị của cột ThanhTien được trả về bởi tíchcủa cột DonGia và cột SoLuong. Để tạo cột bạn nhập công thức vào thuộc tính(Formula) trong của cột. 21
  23. 23. Các ràng buộc(Constraints) Constraints là những thuộc tính (properties) mà ta áp đặt lên một table haymột cột để tránh việc lưu dữ liệu không chính xác vào database (invalid data). Cácràng buộc có tác dụng hạn chế hoặc điều khiển kiểu dữ liệu mà người sử dụng cóthể nhập vào trong bảng. Có một số ràng buộc chính như sau: Primary Key Constraint: Một table thường có một hay nhiều cột có giá trị mang tính duy nhất để xácđịnh một hàng bất kỳ trong table. Ta thường gọi là Primary Key (Khóa chính) vàđược tạo ra khi ta tạo hay thay đổi một bảng với Primary Key Constraint. Một bảng chỉ có thể có một Primary Key constraint. Có thể có nhiều cộttham gia vào việc tạo nên một Primary Key, các cột này không thể chứa giá trị Nullvà giá trị trong các cột thành viên có thể trùng nhau nhưng giá trị của tất cả các cộttạo nên Primary Key phải mang tính duy nhất. Mỗi bảng trong CSDL nên có mộtkhóa chính, để xác định các cột trong bảng làm khóa chính ta thực hiện như sau: Chọn cột hoặc các cột làm khóa chính Kích chuột vào nút Set Primary Key trên thanh công cụ. Cột làm khóa chính sẽ có biểu tượng chìa khóa trước tên cột. Unique Constraint Bạn có thể tạo Unique Constraint để đảm bảo giá trị của một cột nào đókhông bị trùng lập. Tuy Unique Constraint và Primary Key Constraint đều đảm bảotính duy nhất nhưng bạn nên dùng Unique Constraint trong những trường hợp sau: Nếu một cột (hay một sự kết hợp giữa nhiều cột) không phải là Primary key. Nên nhớ chỉ có một Primary Key Constraint trong một table trong khi ta có thể có nhiều Unique Constraint trên một bảng. Nếu một cột cho phép chứa giá trị Null. Unique constraint có thể ápđặt lên một cột chứa giá trị Null trong khi Primary key constraint thì không. 22
  24. 24. Bạn tạo một Unique Constraint bằng cách tạo một unique index. Foreign Key Constraint Foreign Key (Khóa ngoại) là một cột hay một sự kết hợp của nhiều cột đượcsử dụng để áp đặt mối liên kết dữ liệu giữa hai bảng. Foreign key của một bảng sẽgiữ giá trị của Primary key của một bảng khác và chúng ta có thể tạo ra nhiềuForeign key trong một bảng. Foreign key có thể reference (tham chiếu) vào PrimaryKey hay cột có Unique Constraints. Foreign key có thể chứa giá trị Null. Mặc dùmục đích chính của Foreign Key Constraint là để kiểm soát dữ liệu chứa trong bảngcó Foreign key (tức bảng con) nhưng thực chất nó cũng kiểm soát luôn cả dữ liệutrong bảng chứa Primarykey (tức bảng cha). Ví dụ nếu ta xóa dữ liệu trong bảng chathì dữ liệu trong bảng con trở nên "mồ côi" (orphan) vì không thể reference ngượcvề bảng cha. Do đó Foreign Key constraint sẽ đảm bảo điều đó không xảy ra. Nếubạn muốn xóa dữ liệu trong bảng cha thì trước hết bạn phải xóa Foreign key trongbảng con trước. Default Constraints Default Constraints (Giá trị ngầm định) là giá trị mà SQL server tự động gáncho một cột nào đó trong bảng. Giá trị ngầm định có thể là một hằng, NULL hoặcmột hàm, trong trường hợp người sử dụng không nhập dữ liệu cho cột thì cột sẽnhận giá trị ngầm định Bạn có thể nhập nhập giá trị ngầm định cho một cột tại thuộctính Default Value or Binding trong cửa sổ Column Properties. 23
  25. 25. Ví dụ các giá trị ngầm định như:Biểu thức Kết quảgetdate( ) Thiết lập giá trị ngầm định là ngày tháng hiện hànhNULL Thiết lập giá trị ngầm định là NULL7 Thiết lập giá trị ngầm định là 7‘Hello’ Thiết lập giá trị ngầm định là chuỗi “Hello” Check Constraint Check Constraint dùng để giới hạn hay kiểm soát giá trị được phép nhập vàomột cột. Check Constraint giống Foreign Key Constraint ở chỗ nó kiểm soát giá trịđưa vào một cột nhưng khác ở chỗ Foreign Key Constraint dựa trên giá trị ở bảngcha để cho phép một giá trị được chấp nhận hay không trong khi Check Constraintdựa trên một biểu thức logic để kiểm tra xem một giá trị có hợp lệ không. Ví dụ tacó thể áp đặt một Check Constraint lên cột NgayDatHang chỉ chứa các giá trị làngày trước ngày hiện hành. Để nhập một Check Constraint ta thực hiện như sau: Kích chuột vào nút Manage Check Constraints trên thanh công cụ. Hộp thoại Check Constraints xuất hiện, tại đây ta kích nút Add để tạo contraint mới. 24
  26. 26. Nhập tên và biểu thức ràng buộc. Kích vào nút Close để thêm ràng buộc và đóng hộp thoại. Sau khi thiết kế xong bảng ta vào kích vào biểu tượng Save trên thanh côngcụ sẽ xuất hiện hộp thoại Choose Name cho phép ta nhập vào tên bảng sau đó kíchOK.3. Thay đổi cấu trúc của bảng Để thay đổi cấu trúc bảng trong SQL Server Management Studio ta thực hiệncác bước sau: • Mở rộng các đối tượng trên thể hiện của SQL trong cửa sổ Object Explorer muốn thay đổi cấu trúc bảng. • Mở rộng mục Database và chọn cơ sở dữ liệu và bảng cần thay đổi cấu trúc. Kích chuột phải lên bảng đó và chọn Modify xuất hiện cửa sổ thiết kế table và ta thực hiện các thay đổi đối với cấu trúc bảng như cách tạo bảng. 25
  27. 27. 4. Lược đồ CSDL a) Thiết lập mối quan hệ giữa các bảng Sau khi thêm các bảng vào CSDL bạn thiết lập mối quan hệ giữa các bảng.Để thiết lập mối quan hệ giữa các bảng bạn tạo một lược đồ CSDL (DatabaseDiagram). Để tạo một lược đồ CSDL ta thực hiện các bước sau: Mở rộng CSDL mà bạn muốn tạo lược đồ CSDL, ví dụ ở đây ta tạo lược đồCSDL cho CSDL QLDH Kích chuột phải vào Database Diagrams và chọn New Database Diagram. 26
  28. 28. Xuất hiện hộp thoại sau: Chọn Yes, xuất hiện hộp thoại Add Table cho phép ta chọn các bảng để đưavào lược đồ Chọn các bảng sau đó kích nút Add Kích nút Close để đóng hộp thoại, xuấthiện cửa sổ Diagram như sau: 27
  29. 29. Ta thực hiện thiết kế mối quan hệ giữa các bảng trong cơ sở dữ liệu bằngviệc kéo và giữ trường khóa chính của bảng này thả sang trường khóa ngoại tươngứng của bảng khác xuất hiện cửa sổ Table and Columns. Ta thực hiện điều chỉnh các tham số cho mối quan hệ đó sau đó kích OK,xuất hiện hộp thoại Foreign Key Relationship Hộp thoại này cho phép ta thay đổi các thuộc tính của mối quan hệ sau đókích OK để quay trở lại cửa sổ Diagram Để kiểm soát sự thay đổi dữ liệu trong các bảng dữ liệu có quan hệ ràng buộctrong CSDL, bạn có thể sử dụng khái niệm cascade giữa hai bảng. Để mỗi khi bản ghi trong bảng cha bị xóa thì những bản ghi trong bảng concó mã khóa ngoại bằng với khóa chính của bản ghi đang xóa sẽ bị xóa bạn cần khaibáo Cascade cho trường hợp Delete. Tương tự như vậy, mỗi khi giá trị trong cột khóa chính của bản ghi trong 28
  30. 30. bảng cha bị thay đổi thì những bản ghi trong bản ghi có khóa ngoại bằng khóa chínhcủa bản ghi đang thay đổi cũng thay đổi theo, bạn cần khai báo Cascaden chotrường hợp Update. Để làm điều này tachọn hai thuộc tính Delete Rule và Update Rule ứng vớitrường hợp Delete và Update. Khi bạn đóng cửa sổ Diagram, xuất hiện hộp thoại thông báo bạn có muốnlưu lược đồ hay không Ta chọn Yes, xuất hiện hộp thoại cho phép ta nhập tên của lược đồ sau đókích OK. 29
  31. 31. Xuất hiện hộp thoại Save, tại đây ta kích Yes. b) Chỉnh sửa lược đồ Kích đúp lên lược đồ muốn chỉnh sửa để mở cửa sổ Diagram. Ta thực hiệncác thao tác chỉnh sửa lược đồ trên cửa sổ này: Thêm bảng mới: Trong cửa sổ Diagram ta kích chuột phải và chọn Add table Xóa bảng khỏi lược đồ: Kích chuột phải lên bảng cần xóa và chọn Removefrom Diagram. Xóa quan hệ: Kích chuột phải lên quan hệ muốn xóa và chọn DeleteRelationship from Database. Chỉnh sửa lại quan hệ: Kích chuột phải lên một bảng bất kì trong lược đồ sauđó chọn Relationship, xuất hiện hộp thoại Foreign Key Relationships. Lựa chọn mốiquan hệ mà bạn muốn chỉnh sửa, thực hiện các chỉnh sửa sau đó kích Close. 30
  32. 32. 5. Nhập dữ liệu cho bảng Để nhập dữ liệu cho bảng trong SQL Server Management Studio ta kíchchuột phải vào tên bảng cần nhập dữ liệu và chọn Open Table sẽ xuất hiện cửa sổnhập dữ liệu cho bảng.6. Xóa bảng, xóa CSDL Click chuột phải lên bảng hay CSDL muốn xóa -> Delete - >OK. Trongtrường hợp xóa một CSDL, nên chọn dấu tích vào Close existing connections. Khiđó SQL Server 2005 sẽ ngắt tất cả các kết nối vào CSDL này và việc xóa sẽ khônggây báo lỗi.7. Mở một query editor để viết câu lệnh SQL Một trong những công việc quan trọng nhất đối với các hệ quản trị CSDL làtruy vấn (query) CSDL. Để soạn thảo các truy vấn ta có thể mở bộ soạn thảo theomột số cách sau (Ví dụ ta thực hiện truy vấn trên CSDL QLDH): Kích chuột phải vào CSDL mà bạn muốn thực hiện các truy vấn sau đó chọnNew Query. 31
  33. 33. Xuất hiện hộp thoại sau: CSDL QLDH đã được mở Soạn thỏa các truy vấn tại đây Bạn cũng có thể mở bộ soạn thảo truy vấn bằng cách kích vào nút New Query trên thanh công cụ sau đó chọn CSDL mà ta muốn thực hiện các truyvấn. Chọn CSDL tại đây Để mở và kích hoạt CSDL bạn sử dụng lệnh USE, ví dụ trong cửa sổ soạnthảo bạn gõ: Use QLDH Sau đó kích nút Execute trên thanh công cụ, đoạn thông báo sau sẽ xuất hiệntrong phần Messages. 32
  34. 34. Để lưu trữ truy vấn bạn vào File và chọn Save SQLQuery1.sql hoặc kích vàobiểu tượng Save trên thanh công cụ. Xuất hiện hộp thoại cho phép bạn nhập tên củaquery và thư mục để lưu trữ query. 33
  35. 35. Bài Tập Bài 1: Tạo bảng Custemer để lưu trữ thông tin về khách hàng bao gồm cáctrường sau: Trường CustomerID: Đây là trường khóa chính, thiết lập trường này là trường nhận dạng (Identity Columns) Trường CompanyName: Kiểu dữ liệu là VarChar(40).và không chứa giá trị NULL Trường Address: Kiểu dữ liệu là VarChar(200) Trường State: Kiểu dữ liệu Char(2). Tạo ràng buộc để đảm bảo dữ liệu trong cột là CA, UT, AZ, WY, OR, hoặc WA. Ngầm định là CA Trường IntroDate: Kiểu dữ liệu là DateTime, giá trị ngầm định là ngày hiện hành. Thêm ràng buộc để đảm bảo rằng ngày nhập vào là sau trước hiện hành Trường CreditLimit: Kiểu dữ liệu tiền tệ, giá trị ngầm định là 500.000. Tạo ràng buộc để đảm bảo rằng dữ liệu nhập vào luôn nằm trong khoảng giữa 0 và 10.000.000 Lưu trữ và nhập dữ liệu để kiểm tra các ràng buộc và giá trị ngầm định 34
  36. 36. Chương 4: Các câu lệnh SQL cơ bảnI. Giới thiệu sơ lược về Transact SQL (T-SQL). Transact SQL hay còn gọi là T-SQL thực hiện ngôn ngữ truy vấn có cấu trúc(Structured Query Language -SQL) của Microsft. T-SQL được thiết kế để nhận,tương tác và thêm dữ liệu vào CSDL SQL Server. T-SQL có thể được phân loại như sau : • Ngôn ngữ định nghĩa dữ liệu (Data Definition Language - DDL): Các lệnh dùng để tạo, sửa, xóa các đối tượng trong CSDL như database, table, index, view, stored procedures và các đối tượng khác. • Ngôn ngữ thao tác dữ liệu (Data Manipulation Language - DML): Chứa các lệnh thao tác với dữ liệu như truy xuất, thêm, sửa, xoá dữ liệu. • Ngôn ngữ điều khiển dữ liệu (Data Control Language - DCL): Chứa các lệnh điều khiển, phân quyền truy xuất dữ liệuII. Ngôn ngữ thao tác dữ liệu SQL được xem như là công cụ hữu hiệu để thực hiện các yêu cầu truy vấn vàthao tác trên dữ liệu. Nhóm các câu lệnh này được gọi chung là ngôn ngữ thao tácdữ liệu (DML Data Manipulation Language) bao gồm các câu lệnh sau: SELECT: Sử dụng để truy xuất dữ liệu từ môt hoặc nhiều bảng. INSERT: Thêm dữ liệu. UPDATE: Cập nhật dữ liệu. DELETE: Xoá dữ liệu. 1. Câu lệnh Select Câu lệnh SELECT được sử dụng để truy xuất dữ liệu từ các dòng và các cộtcủa một hay nhiều bảng, khung nhìn. Câu lệnh này có thể dùng để thực hiện phépchọn (tức là truy xuất một tập con các dòng trong một hay nhiều bảng), phép chiếu(tức là truy xuất một tập con các cột trong một hay nhiều bảng) và phép nối (tức làliên kết các dòng trong hai hay nhiều bảng để truy xuất dữ liệu). Ngoài ra, câu lệnhnày còn cung cấp khả năng thực hiện các thao tác truy vấn và thống kê dữ liệu phứctạp khác. Cú pháp chung của câu lệnh SELECT có dạng: SELECT [*|DISTINCT][TOP n] <Danh sách các cột [AS <Bí danh>]> 35
  37. 37. FROM <danh sách bảng/khung nhìn> [WHERE <Biểu thức điều kiện>] [GROUP BY <danh sách cột>] [HAVING <điều kiện>] [ORDER BY <Tên cột/ Số thứ tự cột/Biểu thức> [ASC/DESC]] [COMPUTE <danh sách hàm gộp [BY <danh sách cột>]>] Các thành phần nằm trong cặp dấu [ ] là tùy chọn tức là có thể có hoặckhông. Các thành phần trong câu lệnh SELECT nếu được sử dụng phải tuân theođúng thứ tự như trong cú pháp. Nếu không, câu lệnh sẽ được xem là không hợp lệ. Câu lệnh SELECT được sử dụng để tác động lên các bảng dữ liệu và kết quảcủa câu lệnh cũng được hiển thị dưới dạng bảng, tức là một tập hợp các dòng và cáccột (ngoại trừ trường hợp sử dụng câu lệnh SELECT với mệnh đề COMPUTE). Trong phần này chúng tôi sử dụng cơ sở dữ liệu về quản lí đơn hàng(QLDH) để làm ví dụ. a. Mệnh đề From Mệnh đề FROM trong câu lệnh SELECT được sử dung nhằm chỉ định cácbảng và khung nhìn cần truy xuất dữ liệu. Sau FROM là danh sách tên của các bảngvà khung nhìn tham gia vào truy vấn, tên của các bảng và khung nhìn được phâncách nhau bởi dấu phẩy. 36
  38. 38. Ví dụ lệnh sau hiển thị họ đệm, tên và địa chỉ của các khách hàng được lưutrữ trong bảng KhachHang select HoDem, Ten,DiaChi from KhachHang Ta cũng có thể hiển thị tất cả các cột của bảng bằng cách sử dụng lệnh sau: select * from KhachHang Nếu tên bảng chứa khoảng trắng ta phải đặt tên bảng trong cặp [ ] hoặc “ “như sau: select * from [Khach Hang] Hoặc select * from “Khach Hang“ Đổi tên các cột trong kết quả hiển thị Khi kết quả được hiển thị, tiêu đề của các cột mặc định sẽ là tên của các cộtkhi bạn tạo bảng. Tuy nhiên, để các tiêu đề trở nên thân thiện hơn, ta có thể đổi têncác tiêu đề của các cột khi hiển thị. Để làm được việc này, ta có thể sử dụng mộttrong hai cách viết sau: <tiêu đề cột> = <tên cột> hoặc: <tên cột> <tiêu đề cột> Ví dụ: Hai câu lệnh sau sẽ đặt tiêu đề Họ đệm thay cho tiêu đề cột Hodem, 37
  39. 39. Tên cho tiêu đề cột Ten và Địa chỉ thay cho tiêu đề cột DiaChi khi kết quả đươchiển thị: select Họ đệm= HoDem,Tên=Ten,Địa chỉ= DiaChi from KhachHang Hoặc: select HoDem Họ đệm’,Ten Tên,DiaChi Địa chỉ from KhachHang Kết quả hiển thị như sau: Sử dụng tên giản đồ Trong SQL Server 2005 các tên bảng có thể có phần tiền tố là tên giản đồ,phân cách giữa tên giản đồ và tên bảng là dấu chấm. Mục đích của giản đồ là đểnhóm các đối tượng theo loại và làm cho CSDL phức tạp và lớn trở lên dễ quản líhơn. Nếu bạn là người quản trị thì dbo (database owner) là giản đồ ngầm định. Ví dụ: select * from dbo.KhachHang Đặt bí danh cho cột Trong mệnh đề FROM có thể sử dụng bí danh (alias) nhằm làm cho câu truyvấn dễ nhìn hơn. Ta có hai cách để đặt bí danh cho cột như sau: <Tên cột> AS <Bí danh> hoặc <Tên cột> <Bí danh>Ví dụ: 38
  40. 40. select * from khachhang k where k.MaKhachHang = 2 Cấu trúc CASE Trong câu lệnh SELECT, ta có thể sử dụng cấu trúc CASE để thay đổi cáchhiển thị kết quả ra màn hình. Ví dụ các câu lệnh sau cho biết họ đệm, tên, địa chỉ vàgiới tính của khách hàng nhưng với giới tính thay vì hiển thị giá trị là 1 hoặc 0 sẽhiển thị là “Nam” hoặc “Nữ”. select Họ đệm = HoDem,Tên=Ten,Địa chỉ= DiaChi, Giới tính = case when GioiTinh = 1 then NNam when GioiTinh = 0 then NNữ else NKhông có dữ liệu end from KhachHang Kí tự N trước một chuỗi chỉ ra chuỗi này có định dạng Unicode Danh sách chọn trong câu lệnh SELECT có thể có các biểu thức số học. Khiđó kết quả của biểu thức sẽ là một cột trong kết quả truy vấn. Ví dụ: select Họ và tên = HoDem + + Ten,Địa chỉ = DiaChi from KhachHang Từ khóa Top Từ khoá TOP được sử dụng trong câu lệnh SELECT để chỉ định tập hợp cácdòng đầu tiên được trả về trong truy vấn. Tập hợp các dòng đó có thể là một con sốhoặc theo tỷ lên phần trăm các dòng dữ liệu. Ví dụ bạn muốn nhận được 10 dòng đầu tiên từ bảng KhachHang bạn thựchiện câu lệnh truy vấn sau: select Top 10 * from KhachHang Nếu bạn muốn số dòng kết quả nhận được bằng 5% tổng số dòng của bảngbạn thực hiện như sau: select Top 5 percent * from KhachHangTừ khoá DISTINCT Từ khoá DISTINCT được sử dụng trong câu lệnh SELECT nhằm loại bỏ rakhỏi kết quả truy vấn những dòng dữ liệu có giá trị giống nhau. Ví dụ nếu bạn sử dụng câu lệnh: select MaNhomHang from DanhMucHang Ta sẽ có kết quả như sau: 39
  41. 41. MaNhomHang ----------- 1 3 4 4 2 2 7 7 7 1 1 3 2 5 5 6 6 5 6 (19 row(s) affected) Nhưng nếu bạn sử dụng câu lệnh: select distinct MaNhomHang from DanhMucHang Kết quả như sau: MaNhomHang ----------- 1 2 3 4 5 6 7 (7 row(s) affected) b. Mệnh đề WHERE Mệnh đề Where cho phép ta lọc dữ liệu được trả về bởi lệnh Select. Saumệnh đề Where là một biểu thức logic và chỉ những dòng dữ liệu nào thoả mãn điềukiện được chỉ định mới được hiển thị trong kết quả truy vấn. Ví dụ câu lệnh sau lọc ra các khách hàng là nữ select * from khachhang where gioitinh = 0 Mệnh đề Where cho phép ta sử dụng rất nhiều các toán tử so sánh, các toántử logic và các từ khóa khác để lọc dữ liệu trong một phạm vi nào đó. Sử dụng các toán tử so sánh 40
  42. 42. Toán tử Ý nghĩa = So sánh bằng > So sánh lớn hơn >= So sánh lớn hơn hoặc bằng !> So sánh không lớn hơn < So sánh nhỏ hơn <= So sánh nhỏ hơn hoặc bằng !< So sánh không nhỏ hơn <> So sánh khác Ví dụ sau hiển thị họ tên và địa chỉ của những khách hàng có mã khách hànglớn hơn 4 select Họ và tên = HoDem + + Ten,Địa chỉ = DiaChi from KhachHang where MaKhachHang > 4 Các toán tử logic And, Or và Not Ta có thể kết hợp các toán tử so sánh với các toán tử logic. Ví dụ các lệnhsau lọc ra những mặt hàng có giá lớn hơn 10000 và nhỏ hơn 50000 select * from DanhMucHang where DonGia > 10000 and DonGia < 50000 Kiểm tra giới hạn của dữ liệu Từ khoá BETWEEN và NOT BETWEEN kiểm tra dữ liệu trong một cột cónằm trong hoặc không nằm trong khoảng giá trị nào đó hay không. Câu lệnh sau lọcra những mặt hàng có giá nằm trong khoảng từ 10000 đến 50000 select * from DanhMucHang where DonGia between 10000 and 50000 Ví dụ để lọc ra các đơn đặt hàng trong khoảng ngày 25/1/2010 và 31/1/2010ta thực hiện như sau: select * from donhang where ngaydathang between 1/25/2010 and 1/31/2010 Từ khóa IN và NOT IN Toán tử này dùng để xác định giá trị của một cột với một giá trị trong danhsách. Ví dụ để hiển thị thông tin của các khách hàng có mã khách hàng là 2, 4, 5, 7hoặc 8 ta thực hiện câu lệnh sau: select * from KhachHang 41
  43. 43. where MaKhachHang IN (2,4,5,7,8) Toán tử LIKE và NOT LIKE Dùng để so khớp các giá trị chuỗi theo mẫu, mẫu ở đây là các kí tự đại diện. Kí tự đại diện Ý nghĩa % Chuỗi ký tự bất kỳ gồm không hoặc nhiều ký tự - Một kí tự bất kì [] Một ý tự bất kỳ nằm trong giới hạn được chỉ định [^] Một ý tự bất kỳ không nằm trong giới hạn được chỉ định Ví dụ để hiển thị thông tin của những khách hàng có tên bắt đầu bởi kí tự“H” ta thực hiện như sau: select * from KhachHang where Ten Like H% Để hiển thị thông tin của những khách hàng có tên bắt đầu bởi kí tự “H” hoặc“L” ta thực hiện như sau: select * from KhachHang where Ten Like [HL]% Để hiển thị thông tin của những khách hàng có tên không bắt đầu bởi kí tự“H” hoặc “L” ta thực hiện như sau: select * from KhachHang where Ten Like [^HL]% Giá trị NULL Để tìm giá trị NULL trong bảng ta sử dụng từ khóa Is Null hoặc Is Not Null.Ví dụ để hiển thị thông tin của những khách hàng không có số điện thoại bạn thựchiện như sau: select * from KhachHang where SoDienThoai is NULL Ngược lại để hiển thị thông tin của những khách hàng có số điện thoại bạnthực hiện như sau: select * from KhachHang where SoDienThoai is NOT NULL c. Mệnh để ORDER BY Nếu không chỉ ra yêu cầu sắp xếp dữ liệu thì các dòng kết quả trả về sẽ tuântheo thứ tự của chúng trong bảng dữ liệu. Để sắp xếp thứ tự các dòng kết quả ta sửdụng mệnh đề ORDER BY theo sau là tên các cột muốn sắp xếp. Dữ liệu được sắp 42
  44. 44. xếp có thể theo chiều tăng (ASC) hoặc giảm (DESC), mặc định là sắp xếp theochiều tăng. Nếu sau ORDER BY có nhiều cột thì việc sắp xếp dữ liệu sẽ được ưutiên theo thứ tự từ trái qua phải. Ví dụ đưới đây sắp xếp thông tin các khách hàng theo tên select * from KhachHang order by Ten Ta có thể chỉ định số thứ tự của cột cấn được sắp xếp. Câu lệnh ở ví dụ trêncó thể được viết lại như sau: select * from KhachHang order by 3 Câu lệnh sau sẽ sắp xếp các khách hàng theo thứ tự tăng dần của tên nếutrùng tên thì sắp xếp theo thứ tự giảm dần của ngày sinh select * from KhachHang order by Ten, NgaySinh Desc d. Mệnh để GROUP BY Mệnh đề Group By được sử dụng để phân hoạch các dòng dữ liệu trong bảngthành các nhóm dữ liệu, và trên mỗi nhóm dữ liệu thực hiện tính toán các giá trịthống kê như tính tổng, tính giá trị trung bình,... Ví dụ sau cho biết tổng số tiền của từng đơn hàng select madonhang, SUM(thanhtien) as [Tong so tien] from chitietdonhang group by madonhang Bạn có thể thêm cột đếm số dòng chi tiết cho mỗi đơn hàng bằng cách sửdụng thêm hàm Count() như sau: select madonhang, SUM(thanhtien) as [Tong so tien],count(madonhang) as [So mat hang] from chitietdonhang group by madonhang 43
  45. 45. e. Mệnh để HAVING Mệnh đề HAVING dùng để đặt điều kiện lọc cho các phân nhóm con.Having đi sau Group By để đặt điều kiện chọn lọc ra những phân nhóm thoả mãnđiều kiện sau Having. Ví dụ bạn chỉ muốn lấy ra những dòng kết quả có tổng số tiền>= 1,000,000 select madonhang, SUM(thanhtien) as [Tong so tien], count(madonhang)as [So mat hang] from chitietdonhang group by madonhang having SUM(thanhtien) >= 1000000 f. Mệnh để COMPUTE Mệnh đề COMPUTE dùng để xem dữ liệu với tổng hoặc tổng con Ví dụ sau cho biết tổng số tiền của tất cả các đơn hàng select madonhang, dongia,soluong,thanhtien from chitietdonhang order by madonhang compute sum(thanhtien) Hình : Xem tổng thành tiền bằng COMPUTE 44
  46. 46. Nếu bạn muốn biết kết quả có tổng con theo một cột nào đó, ví dụ như cộtmadonhang, thì bạn dùng COMPUTE BY như sau: select madonhang, dongia,soluong,thanhtien from chitietdonhang order by madonhang compute sum(thanhtien) by madonhang Tổng con của madonhang =2 Tổng con của madonhang =3 Hình : Xem tổng con bằng COMPUTE BY 2. Truy vấn dữ liệu từ nhiều bảng Khi thiết kế CSDL ta phải chuẩn hóa các bảng lưu dữ liệu. Như vậy thông tinthường được chia nhỏ và lưu vào nhiều bảng. Các bảng này có mối quan hệ vớinhau. Khi dữ liệu được truy vấn, các hoạt động liên kết được dùng để sử dụngnhững quan hệ này và lắp ghép lại thông tin gốc. Có 3 cách chính để liên kết cácdòng dữ liệu từ hai bảng khác nhau. a. Liên kết bảng trong mệnh đề Where Giả sử bạn có 2 bảng là bảng KhachHang có cột khóa là MaKhachHang vàbảng DonHang có cột MaKhachHang là khóa ngoại. 45
  47. 47. Bạn có thể truy vấn dữ liệu từ 2 bảng này thông qua khóa MaKhachHang,hoạt động liên kết được thực hiện trong mệnh đề Where như sau: select donhang.madonhang, donhang.ngaydathang,khachhang.hodem + + khachhang.ten as [ho va ten] from donhang,khachhang where donhang.makhachhang = khachhang.makhachhang Câu lệnh trên lấy dữ liệu trên cột Madonhang, Ngaydathang từ bảngDonHang và trên cột Hodem, Ten từ bảng KhachHang. Dấu bằng (=) trong mệnh đềWhere cho biết chỉ lấy những dòng mà giá trị Makhachhang trong bảng DonHangbằng với Makhachhang trong bảng KhachHang. b. Liên kết bảng trong mệnh đề From Trong mệnh đề From hai bảng được liên kết thông qua phát biểu JOIN theosau là từ khóa ON cùng cột tham chiếu. Thực hiện truy vấn sau bạn sẽ nhận đượccùng kết quả như ví dụ trước. select donhang.madonhang, donhang.ngaydathang,khachhang.hodem + + khachhang.ten as [ho va ten] from donhang inner join khachhang on donhang.makhachhang = khachhang.makhachhang 46
  48. 48. Mục đích của Inner Join là so khớp các dòng trong một bảng với các dòngtương ứng trong bảng khác mà ở đó các cột liên kết chứa cùng giá trị. Nếu mộttrong các cột của những bảng này có giá trị khác hoặc không có giá trị thì nhữngdòng này không được trả về trong kết quả truy vấn. c. Cách dùng OUTER JOIN Công việc của Outer Join là trả về tất cả các dòng từ một bảng, sau đó sokhớp những dòng này với các dòng trong những bảng tương ứng mà các cột liên kếtcó cùng giá trị. Các cột còn lại của bảng kia trong cột kết quả trả về sẽ có giá trịNULL. Sự khác nhau giữa Outer Join và Inner Join là các dòng khác nhau trongbảng đầu tiên vẫn được trả về bởi truy vấn. Giả sử bạn được yêu cầu như sau: hãy cho xem tất cả các danh sách kháchhàng và với những khách hàng đang có đơn hàng thì cho xem thông tin về đơn hàngđó. Bạn hãy cho xem tên của mỗi khách hàng và nếu khách hàng có đơn hàng thìcho xem ngày đặt hàng. Nghĩa là, nếu khách hàng không có đơn hàng nào thì choxem tên của khách hàng mà thôi. Để thực hiện yêu cầu trên bạn thực hiện OUTER JOIN như sau: select khachhang.hodem + + khachhang.ten as [ho va ten], donhang.ngaydathang from khachhang left outer join donhang on khachhang.makhachhang = donhang.makhachhang Giá trị NULL của cột ngaydathang cho biết đó là những dòng tồn tại trong bảng KhachHang nhưng không tìm thấy makhachhang trong bảng donhang. Outer join luôn chiếu lên một bảng, đó là bảng mà bạn chọn nên tất cả cácdòng. Trong trường hợp này bảng đó nằm bên trái phát biểu JOIN chính là bảngKhachHang. 47
  49. 49. Nếu bạn muốn chỉ trả về những khách hàng nào không có đơn hàng thì bạnthêm điều kiện trong mệnh đề WHERE như sau: select khachhang.hodem + + khachhang.ten as [ho va ten], donhang.ngaydathang from khachhang left outer join donhang on khachhang.makhachhang = donhang.makhachhang where donhang.ngaydathang is null Thế còn Right Outer Join dùng cho mục đích gì? Dùng RIGHT ở vị trí củaLEFT trong biểu thức này sẽ có cùng tác dụng nhưng ngược lại thứ tự của bảng vàcột. Nghĩa là, bảng bên phải phát biểu JOIN sẽ là bảng mà bạn chọn tất cả các dòng.Nó sẽ so khớp các dòng này với dòng dữ liệu trong bảng bên trái, nếu không tìmthấy thì trả về giá trị NULL. Như vậy hai phát biểu sau sẽ cho cùng kết quả. select khachhang.hodem + + khachhang.ten as [ho va ten], donhang.ngaydathang from khachhang left outer join donhang on khachhang.makhachhang = donhang.makhachhang Truy vấn này sẽ cho cùng kết quả với truy vấn sau dùng Right Outer Join: select khachhang.hodem + + khachhang.ten as [ho va ten], donhang.ngaydathang from donhang right outer join khachhang on khachhang.makhachhang = donhang.makhachhang 3. Thêm dữ liệu vào bảng Dữ liệu trong các bảng được thể hiện dưới dạng các dòng (bản ghi). Để bổsung thêm các dòng dữ liệu vào một bảng, ta sử dụng câu lệnh INSERT. Trước khithêm dữ liệu vào bảng, điều quan trong bạn cần biết là: Cột nào đòi hỏi phải có giá trị Cột nào có ràng buộc toàn vẹn dữ liệu Cột nào được quản lý bởi CSDL thông qua hàm Cột nào có giá trị mặc định và chấp nhận giá trị NULL Kiểu dữ liệu của cột Câu lệnh INSERT INTO ....VALUES 48
  50. 50. Để bổ sung một dòng dữ liệu mới vào bảng, ta sử dụng câu lệnh INSERT vớicú pháp như sau: INSERT INTO tên_bảng[(danh_sách_cột)] VALUES(danh_sách_trị) Các cột không được phép NULL phải được cung cấp giá trị, các cột đượcphép NULL có thể không cần liệt kê ra. Giả sử bạn thêm dữ liệu vào bảng. insert into khachhang(hodem,ten,sodienthoai) values (NĐặng Minh,NHằng,091987546) Vì các cột Diachi, Email, GioiTinh, Ngaysinh cho phép NULL cho nên dùbạn không cung cấp giá trị cho chúng thì câu lệnh trên vẫn thực thi thành công. Lưu ý: Trường Makhachhang được thiết lập identity là “YES” nên ta khôngcần thêm giá trị trường này mà SQL sẽ tự động tạo ra một giá trị cho trường này. Nếu bạn cung cấp đầy đủ giá trị cho tất cả các cột trong bảng thì bạn khôngcần liệt kê tên cột của bảng, khi đó các giá trị liệt kê sau Values phải được đặt theothứ tự cột của bảng. Ví dụ bạn thêm dòng dữ liệu vào bảng KhachHang mà khôngliệt kê tên cột. insert into khachhang values (NĐặng Minh,NHằng,NBa Đình, 091987546, Hangdm@gmail.com, 0, 13/3/1989) Câu lệnh INSERT INTO .... SELECT Một cách sử dụng khác của câu lệnh INSERT được sử dụng để bổ sungnhiều dòng dữ liệu vào một bảng, các dòng dữ liệu này được lấy từ một bảng khácthông qua câu lệnh SELECT. Với cách này, các giá trị dữ liệu được bổ sung vàobảng không được chỉ định tường minh mà thay vào đó là một câu lệnh SELECTtruy vấn dữ liệu từ bảng khác. Cú pháp câu lệnh INSERT có dạng như sau: INSERT INTO tên_bảng[(danh_sách_cột)] câu_lệnh_SELECT Ví dụ sau lấy dữ liệu từ bảng KhachHang và thêm vào bảngKhachHang_Backup insert into khachhang_backup select * from khachhang where makhachhang between 1 and 10 Câu lệnh SELECT INTO Bạn có thể tạo một bảng mới có cấu trúc giống với một bảng đang tồn tại vàdữ liệu được lấy từ bảng đó sang bằng câu lệnh SELECT INTO. Ví dụ bạn có thểtạo bảng KhachHang_Backup có cấu trúc và dữ liệu y hệt như bảng KhachHangbằng cách sử dụng câu lệnh sau: 49
  51. 51. select * into KhachHang_Backup from KhachHang Nếu bạn muốn giới hạn dữ liệu thêm vào bảng mới bạn có thể dùng mệnh đềWhere như sau: select * into KhachHang_Backup from KhachHang where Email like %gmail.com 4. Cập nhật dữ liệu Để cập nhật dữ liệu ta sử dụng câu lệnh UPDATE, câu lệnh UPDATE có thểảnh hưởng một hoặc nhiều dòng dữ liệu trong bảng tùy điều kiện lọc. Câu lệnh nàycó cú pháp như sau: UPDATE <Tên bảng> SET <tên cột> = <giá trị> [, <tên cột 2> = <giá trị 2>......] [FROM <danh sách bảng>] [WHERE <điều kiện>] Giả sử bạn muốn cập nhật lại giá trị trong cột đơn giá lên 10% cho tất cả cácmặt hàng có manhomhang = 1 trong bảng DanhMucHang, bạn thực hiện câu lệnhsau: update DanhMucHang set DonGia = DonGia *1.1 where MaNhomHang =1 Nếu muốn cập nhật cùng lúc nhiều cột thì bạn liệt kê các cột cập nhật sau từkhóa SET, các cột này phân cách nhau bằng dấu phẩy. Ví dụ bạn muốn cập nhật giá trị cho cột TenHang và DonGia cho mặt hàngcó MaHang = 2 bạn thực hiện như sau: update DanhMucHang set TenHang = NBia lon Hà Nội, DonGia = 5500 where MaHang = 2 5. Xóa dữ liệu Để xoá dữ liệu trong một bảng, ta sử dụng câu lệnh DELETE. Cú pháp củacâu lệnh này như sau: DELETE FROM <tên bảng> [WHERE <điều kiện>] 50
  52. 52. Để xóa toàn bộ dữ liệu trong một bảng bạn chỉ cần chỉ ra tên bảng sau lệnhDELETE. Ví dụ muón xóa hết dữ liệu trong bảng KhachHang_Backup bạn thựchiện câu lệnh sau: delete from KhachHang_Backup Nếu muốn xóa dòng xác định thì bạn thêm mệnh đề WHERE. Ví dụ bạnmuón xóa khách hàng có MaKhachHang = 18 trong bảng KhachHang bạn thực hiệnnhư sau: delete from KhachHang where MaKhachHang = 18III. Ngôn ngữ định nghĩa dữ liệu 1. Tạo bảng Câu lệnh CREATE TABLE được sử dụng để định nghĩa một bảng dữ liệumới trong CSDL. Câu lệnh CREATE TABLE có cú pháp như sau:CREATE TABLE table_name ( { < column_definition > | < table_constraint > } [ ,...n ] )< column_definition > ::= { column_name data_type } [ { DEFAULT constant_expression | [ IDENTITY [ ( seed , increment ) ] ] } ] [ < column_constraint > [ ...n ] ]< column_constraint > ::= [ CONSTRAINT constraint_name ] { [ NULL | NOT NULL ] | [ PRIMARY KEY | UNIQUE ] | REFERENCES ref_table [ ( ref_column ) ] [ ON DELETE { CASCADE | NO ACTION } ] [ ON UPDATE { CASCADE | NO ACTION } ] }< table_constraint > ::= [ CONSTRAINT constraint_name ] { [ { PRIMARY KEY | UNIQUE } { ( column [ ,...n ] ) } ] | FOREIGN KEY ( column [ ,...n ] ) REFERENCES ref_table [ ( ref_column [ ,...n ] ) ] [ ON DELETE { CASCADE | NO ACTION } ] [ ON UPDATE { CASCADE | NO ACTION } ] } 51
  53. 53. Trong đó: table_name: Là tên của bảng mới column_name: Tên cột trong bảng data_type: Kiểu dữ liệu của cột DEFAULT: Xác định giá trị ngầm định cho cột IDENTITY: Xác định cột là cột nhận dạng, cột nhận dạng trong một bảng làcột mà SQL tự động cung cấp dữ liệu. Cột nhận dạng có dữ liệu kiểu số, giá trị củanó được tăng tự động khi một hàng mới được thêm vào. Mặc định giá trị đầu tiên là1, mỗi giá trị tiếp theo tăng lên 1. seed: giá trị đầu tiên increment: Bước nhảy CONSTRAINT: Một từ khóa tùy chọn chỉ ra sự khởi đầu của một định nghĩaràng buộc dữ liệu PRIMARY KEY, UNIQUE, hoặc FOREIGN KEY constraint_name: Tên của ràng buộc NULL | NOT NULL: Cho phép cột có chứa giá trị NULL hay không PRIMARY KEY: Xác định một hoặc nhiều cột làm khóa chính. UNIQUE: Unique Constraint để đảm bảo giá trị của một cột nào đó không bịtrùng lặp. FOREIGN KEY...REFERENCES: Ràng buộc cung cấp toàn vẹn tham chiếucho các dữ liệu trong cột. ref_table: Tên của bảng tham chiếu bởi ràng buộc Foreign Key. ( ref_column [ ,...n ] ): Cột hoặc danh sách các cột trong bảng tham chiếu bởiràng buộc Foreign Key Ví dụ 1: Ví dụ dưới đây tạo một bảng có tên KhachHang. create table KhachHang ( Makhachhang int identity (1,1) primary key, Tenkhachhang nvarchar(50) not null, Diachi nvarchar(100 ) null , Ngaysinh datetime null, Gioitinh bit default(true) not null ) Cột Makhachhang có kiểu dữ liệu int, được chỉ định thuộc tính identity(1,1)nghĩa là dữ liệu cột này được thêm tự động bắt đầu từ 1 và mỗi lần có dòng mới 52
  54. 54. thêm vào, giá trị cột này được tăng lên 1. Cột này cũng được chỉ định làm khóachính của bảng thông qua thuộc tính primary key. Ví dụ 2: Ví dụ sau tạo bảng sự kiện Events, các cột EventYear, EventMontháp dụng ràng buộc CHECK CREATE TABLE Events( EventID int IDENTITY PRIMARY KEY, EventTitle varchar(50), EventYear int CONSTRAINT ck_Year CHECK (EventYear BETWEEN 2000 AND 2050), EventMonth int CONSTRAINT ck_Month CHECK (EventMonth BETWEEN 1 AND 12), EventDay int ) 2. Sửa đổi định nghĩa bảng Một bảng sau khi đã được định nghĩa bằng câu lệnh CREATE TABLE có thểđược sửa đổi thông qua câu lệnh ALTER TABLE, cú pháp câu lệnh sau:ALTER TABLE table_name{ [ ALTER COLUMN column_name {DROP DEFAULT | SET DEFAULT constant_expression | IDENTITY [ ( seed , increment ) ] }| ADD { < column_definition > | < table_constraint > } [ ,...n ]| DROP { [ CONSTRAINT ] constraint_name | COLUMN column }] }< column_definition > ::= { column_name data_type } [ [ DEFAULT constant_expression ] | IDENTITY [ ( seed , increment ) ] ] [ROWGUIDCOL] [ < column_constraint > ] [ ...n ] ]< column_constraint > ::= [ NULL | NOT NULL ] [ CONSTRAINT constraint_name ] { | { PRIMARY KEY | UNIQUE } | REFERENCES ref_table [ (ref_column) ] 53
  55. 55. [ ON DELETE { CASCADE | NO ACTION | SET DEFAULT |SET NULL }] [ ON UPDATE { CASCADE | NO ACTION | SET DEFAULT |SET NULL }] }< table_constraint > ::= [ CONSTRAINT constraint_name ] { [ { PRIMARY KEY | UNIQUE } { ( column [ ,...n ] ) } | FOREIGN KEY ( column [ ,...n ] ) REFERENCES ref_table [ (ref_column [ ,...n ] ) ] [ ON DELETE { CASCADE | NO ACTION | SET DEFAULT |SET NULL }] [ ON UPDATE { CASCADE | NO ACTION | SET DEFAULT |SET NULL }] } Ví dụ 1: Thêm một cột mới Mota vào bảng DonDatHang alter table DonDatHang add Mota nvarchar(100) not null Ví dụ 2: Thay đổi định nghĩa cột Mota alter table DonDatHang alter column Mota nvarchar(200) null 3. Xóa bảng Ta có thể xoá một bảng ra khỏi cơ sở dữ liệu bằng câu lệnh DROP TABLE.Câu lệnh có cú pháp như sau: DROP TABLE tên_bảng Ví dụ: Để xóa bảng DonDatHang ta thực hiện như sau: DROP TABLE DonDatHang 4. Khung nhìn - VIEW Khung nhìn (View) là một bảng tạm thời, có cấu trúc như một bảng. Nộidung của khung nhìn dựa trên một truy vấn (query), nó chỉ tồn tại trong bộ nhớ. Dữliệu trong một khung nhìn có thể đến từ một hoặc nhiều bảng trong CSDL. Nócũng có thể đến từ các khung nhìn khác thậm chí đến từ dữ liệu trong các CSDLkhác. Sử dụng khung nhìn có những thuận lợi nhất định, nó cho phép ta: Liên kết dữ liệu để người sử dụng có thể làm việc dễ dàng. Gộp dữ liệu để người sử dụng có thể làm việc dễ dàng. Tùy chỉnh sử liệu theo nhu cầu của người sử dụng. 54
  56. 56. Dấu tên cột đối với người sử dụng Giới hạn số lương cột và hàng mà người sử dụng sẽ làm việc Dễ dàng bảo mật dữ liệu Theo quan điểm của người lập trình thì CSDL chuẩn hóa sẽ dễ dàng làm việcvà bảo tri, nhưng nó không dễ dàng để người sử dụng làm việc. Nếu người sử dụngnhìn vào bảng DonHang họ chỉ thấy cột MaKhachHang. Nếu họ muốn xem tênkhách hàng họ phải họ phải liên kết với bảng KhachHang. Đây là một tác vụ khôngdễ đối với người sử dụng. Sử dụng khung nhìn ta có thể liên kết hai bảng này lại vàcung cấp khung nhìn cho người sử dụng Người sử dụng dùng khung nhìn để nhậnthông tin cần thiết mà không cần biết cách liên kết bên dưới giữa các bảng. Khung nhìn có thể tính gộp dữ liệu, ví dụ bạn có thể dễ dàng tạo khung nhìnchứa tổng giá trị đơn hàng cho từng khách hàng. Một thuận lợi khác của khung nhìn là khả năng tùy chỉnh dữ liệu theo nhucầu của người sử dụng. Ví dụ một cột trong khung nhìn có thể được kết hợp bởi 2cột HoDem và cột Ten. Người phát triển thường dùng tên cột không rõ ý nghĩa, khung nhìn sẽ giúpbạn giải quyết vấn đề này. Bạn có thể dễ dàng tạo khung nhìn có tên hiệu cho cáccột. Số cột trong bảng là nhiều, bạn có thể tạo ra khung nhìn chỉ chứa các cột cầnthiết. Bạn có thể cấp quyền truy cập trên khung nhìn thay vì cấp quyền truy cậptrên bảng. Để tạo khung nhìn bạn sử dụng lệnh CREATE VIEW theo cú pháp sau: CREATE VIEW <tên khung nhìn> AS SELECT <câu lệnh select>Ví dụ: create view khdonhang as select donhang.madonhang, donhang.ngaydathang,khachhang.hodem + + khachhang.ten as hoten from donhang,khachhang where donhang.makhachhang = khachhang.makhachhang Thực hiện câu truy vấn trên khung nhìn vừa tạo ra: select * from khdonhang 55
  57. 57. Nếu trong câu lệnh CREATE VIEW, ta không chỉ định danh sách các tên cộtcho khung nhìn, tên các cột trong khung nhìn sẽ chính là tiêu đề các cột trong kếtquả của câu lệnh SELECT. Trong trường hợp tên các cột của khung nhìn đươc chỉđịnh, chúng phải có cùng số lượng với số lượng cột trong kết quả của câu truy vấn. create view khdonhang(Madonhang,NgayDatHang,HovaTen) as select donhang.madonhang, donhang.ngaydathang,khachhang.hodem + + khachhang.ten from donhang,khachhang where donhang.makhachhang = khachhang.makhachhang 56
  58. 58. Bài TậpBài 1: Tạo CSDL LUONG để lưu trữ lương, trong đó có bảng tblLuong có cấu trúcnhư sau: Tên trường Kiểu dữ liệu Ghi chú HoDem nvarchar(50) Ten nvarchar(20) DonVi nvarchar(20) Luong smallmoney PhuCap smallmoney Allow Nulls Thuong smallmoney Allow Nulls TamUng smallmoney Allow NullsYêu cầu: 1. Nhập dữ liệu cho bảng 2. Xem danh sách tất cả các cán bộ ở phòng Tài vụ 3. Đưa ra danh sách những người ở phòng kế hoạch đã tạm ứng tiền 4. Đưa ra danh sách những người ở phòng Kế hoạch và phòng Tài vụ có mức thưởng lớn hơn 500.000 đ 5. Bổ xung thêm cột ConLai để tính số tiền còn được nhận của mỗi cán bộBài 2: Tạo cơ sở dữ liệu SinhVien sau đó sử dụng các lệnh để tạo các bảng sau: tblSinhvien(Masv, Hoten, DiaChi, Malop) tblLop(Malop, Tenlop, MaNghanh) tblNganhHoc(MaNganh, TenNganh, MaKhoa) tblKhoa(MaKhoa, TenKhoa)Bài 3: Tạo một View hiển thị thông tin chi tiết của sinh viên (trong CSDL SinhVienđã tạo ở bài trên) dựa trên 4 bảng trên. Thông tin hiển thị bao gồm Masv, HoTen,Diachi, Tenlop, Tenkhoa, Tennganhhoc. Danh sách sinh viên được hiển thị theolớp, trong 1 lớp thì sắp xếp theo tên. 57

×