SlideShare a Scribd company logo
1 of 122
Download to read offline
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
MỤC LỤC

MỤC LỤC...................................................................................................................0
Chươ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á ........................................................................................................7
Chươ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.....................................11
Chươ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.......................................................31
Chươ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.......................................................................................54
Chươ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
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 .............................................................................61
Chươ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
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 ...............................................................76
Chươ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 ......................................................................................................92
PHỤ LỤC................................................................................................................106




                                                              3
Chương I : Những khái niệm cơ bản về cơ sở dữ liệu

I. 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ưng
ta 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ản
ghi, 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ột
hệ 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 đối
vớ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ần
mề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 kinh
doanh 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ảng
cho 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ấu
trú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 trong
mộ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ứa
trong 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
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ệu
sẽ 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ĩa
kiể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 định
nghĩa trường vì dữ liệu sẽ không có chỗ để chứa.Do đó, thiết kế cơ sở dữ liệu cực
kỳ 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 ghi
tươ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ứa
khoả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óa
chí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ản
ghi 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ác
trong CSDL.

                                          5
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 nhau
như 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ủa
bả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ới
nhau 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 định
nghĩ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ộc
tí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ảng
luô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 tham
chiế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ĩa
mố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ỗi
bả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ếu
quả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ấm
cá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ác
hoá đơn trong tblOrder. Nhưng điều gì sẽ xảy ra nếu ta tiến hành xoá một khách
hà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 trong
tblCustomer. 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ất
quán, bộ máy cơ sở dữ liệu cung cấp một cách để ta định nghĩa mối quan hệ trong
cá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ính
toà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
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ông
nhấ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ách
hà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ên
tắ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ất
quá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ảng
khô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ía
Nam 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áo
cá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ính
xá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ộc
ta 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ảng
riê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 tin
trong 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ếu
chuẩn hoá có thể do chủ ý, hoặc có thể là do kết quả của sự thiếu kinh nghiệm hoặc
sự 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ọi
thứ 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 ích
trong 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 động
cho 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ật
và xoá bản ghi từ các bảng dựa trên các tiêu chỉ nêu ra.




                                         7
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ên
quan 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ày
khô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ều
nà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ớp
có 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ều
khách hàng, và mỗi khách hàng có nhiều người bán.




                                         8
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
Chương 2 : Giới thiệu về SQL Server 2005


I. SQL Server 2005

       SQL Server 2005 là một hệ thống quản l. cơ sở dữ liệu (Relational Database
Management System (RDBMS)) sử dụng Transact-SQL để trao đổi dữ liệu giữa
Client 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 nhau
trong RDBMS.
       SQL Server 2005 được tối ưu để có thể chạy trên môi trường cơ sở dữ liệu
rấ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 server
khác như Microsoft Internet Information Server (IIS), E-Commerce Server, Proxy
Server.... 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 ra
phiê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 3GB
RAM
      Express: Bản miễn phí, hỗ trợ tối đa 1CPU, 1GB RAM và kích thước
Database 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ững
ngườ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ác
chứ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
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 2005
Express

II. 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ản
lý 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àm
việ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ơn
nữa.
      Để khởi động SQL Server Management Studio Express bạn thực hiện theo
các bước sau:
       Vào Start/Programs/Microsoft SQL Server 2005/ SQL Server Management
Studio 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
• 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 đăng
nhậ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
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ạn
có 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 bao
gồ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
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ễn
mối quan hệ giữa các bảng trong CSDL. Sử dụng lược đồ CSDL bạn có thể chỉnh
sử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ủ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 CSDL khác.




                                      14
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ực
thi khi thủ tục lưu trữ được thực thi.




                                        15
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 cho
phé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ác
giá 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ép
ta 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ương
trì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ột
sự kiện ngôn ngữ thực thi. Có 2 loại trigger: DML triggers and DDL triggers. DDL
trigger được Microsoft giới thiệu trong SQL server 2005. Chúng được thực hiện khi
có 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ột
bảng, bạn có thể viết một DDL trigger để ngăn chặn việc xóa một trường nếu
trường đó có chứa dữ liệu. Bạn cũng có thể sử dụng DDL trigger để thống kê các
thay đổ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, and
DELETE 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ác
lệnh INSERT, UPDATE, and DELETE không hợp lệ.

                                          16
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ện
thâ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ác
thao 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ần
lư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ổ Object
Explorer 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
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ết
cộ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
• 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ước
bigint              Các số nguyên từ -263 đến 263-1                  8 bytes
binary(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 byte
char(n)             Kiểu chuỗi có chiều dài n kí tự cố định (1 ≤ n   n bytes
                    ≤ 8000). Không hỗ trợ Unicode
datetime            Dữ liệu ngày giờ, nhận giá trị từ 1/1/1753 đến 4 bytes
                    31/12/9999
decimal(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ác
float               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+308
image               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ân
int                 Số nguyên có giá trị từ -231 đến 231 - 1         4 bytes
money               Dữ liệu kiểu tiền tệ từ -263 đến 263             8 bytes
nchar(n)            Dữ liệu chuỗi, có chiều dài cố định n (1 ≤ n ≤   2n bytes
                    4000) ký tự Unicode
ntext               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 bytes
numeric(p,s)        Tương tự kiểu decimal
nvarchar(n)   Dữ liệu kiếu chuỗi, có thể lưu trữ n (1 ≤ n ≤          2n bytes
nvarchar(MAX) 4000) kí tự Unicode
real                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
smallint           Số nguyên từ -215 đến 215 -1                     2 bytes
smallmoney         Dữ liệu kiểu tiền tệ từ - 214,748.3648 đến       4 bytes
                   214,748.3647
sql_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 bytes
timestamp          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 timestamp
tinyint            Số nguyên có giá trị từ 0 đến 255                1 byte
unique-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ụng
varbinary(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ệu
Char 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ì SQL
Server 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ự đưa
và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ột
nhậ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ười
thiết kế CSDL có thể chỉ ra giá trị bắt đầu và giá trị bước tăng. Cột nhận dạng
thườ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 Indenty
Specification của cửa sổ Column Properties.




                                          20
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ính
toá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ích
củ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
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 hay
một cột để tránh việc lưu dữ liệu không chính xác vào database (invalid data). Các
rà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ột
tham 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ị Null
và 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ột
tạo nên Primary Key phải mang tính duy nhất. Mỗi bảng trong CSDL nên có một
khó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ảo
tí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
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 được
sử 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ều
Foreign key trong một bảng. Foreign key có thể reference (tham chiếu) vào Primary
Key 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ảng
có 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ệu
trong bảng chứa Primarykey (tức bảng cha). Ví dụ nếu ta xóa dữ liệu trong bảng cha
thì dữ liệu trong bảng con trở nên "mồ côi" (orphan) vì không thể reference ngược
về bảng cha. Do đó Foreign Key constraint sẽ đảm bảo điều đó không xảy ra. Nếu
bạ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 trong
bảng con trước.
      Default Constraints
       Default Constraints (Giá trị ngầm định) là giá trị mà SQL server tự động gán
cho một cột nào đó trong bảng. Giá trị ngầm định có thể là một hằng, NULL hoặc
mộ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ộc
tính Default Value or Binding trong cửa sổ Column Properties.




                                        23
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ành
NULL                           Thiết lập giá trị ngầm định là NULL
7                              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ào
mộ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ảng
cha để cho phép một giá trị được chấp nhận hay không trong khi Check Constraint
dự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ụ ta
có 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
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ông
cụ 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ích
OK.




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ện
cá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
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 (Database
Diagram). Để 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
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 để đưa
và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ất
hiện cửa sổ Diagram như sau:




                                      27
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ằng
việ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ộc
trong 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 con
có 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 khai
bá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
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ính
của bản ghi đang thay đổi cũng thay đổi theo, bạn cần khai báo Cascaden cho
trường hợp Update.
      Để làm điều này tachọn hai thuộc tính Delete Rule và Update Rule ứng với
trườ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ốn
lư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
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ện
cá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 Remove
from Diagram.
       Xóa quan hệ: Kích chuột phải lên quan hệ muốn xóa và chọn Delete
Relationship 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ối
quan 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
5. Nhập dữ liệu cho bảng

      Để nhập dữ liệu cho bảng trong SQL Server Management Studio ta kích
chuộ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. Trong
trườ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ông
gâ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 theo
mộ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ọn
New Query.




                                      31
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 truy
vấ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ạn
thả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ện
trong phần Messages.




                                       32
Để lưu trữ truy vấn bạn vào File và chọn Save SQLQuery1.sql hoặc kích vào
biể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ủa
query và thư mục để lưu trữ query.




                                       33
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ác
trườ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
Chương 4: Các câu lệnh SQL cơ bản


I. 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ệu

II. 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ác
dữ 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ột
củ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ép
chọ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ệnh
nà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ức
tạ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
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ặc
khô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ác
cộ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ác
bả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ảng
và khung nhìn tham gia vào truy vấn, tên của các bảng và khung nhìn được phân
cách nhau bởi dấu phẩy.


                                       36
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ưu
trữ 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ột
khi 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ên
cá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ột
trong 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
Tên cho tiêu đề cột Ten và Địa chỉ thay cho tiêu đề cột DiaChi khi kết quả đươc
hiể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 truy
vấ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
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ách
hiể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           N'Nam'
                 when      GioiTinh = 0 then           N'Nữ'
                 else      N'Khô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ác
dò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ực
hiệ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ảng
bạn thực hiện như sau:

      select Top 5 percent * from KhachHang

Từ khoá DISTINCT
       Từ khoá DISTINCT được sử dụng trong câu lệnh SELECT nhằm loại bỏ ra
khỏ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
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. Sau
mệ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ều
kiệ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án
tử 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
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àng
lớ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ệnh
sau 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ọc
ra 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/2010
ta 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 danh
sá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, 7
hoặc 8 ta thực hiện câu lệnh sau:
      select * from KhachHang

                                        41
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ực
hiệ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ạn
thự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ân
theo 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
xếp có thể theo chiều tăng (ASC) hoặc giảm (DESC), mặc định là sắp xếp theo
chiề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 ưu
tiê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ên
có 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ếu
trù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ảng
thà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
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
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ột
madonhang, 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 tin
thườ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ới
nhau. Khi dữ liệu được truy vấn, các hoạt động liên kết được dùng để sử dụng
nhữ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ác
dò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
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ảng
DonHang 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 DonHang
bằ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 theo
sau 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 được
cù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
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òng
tươ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ột
trong 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ững
dò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 đó so
khớ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ết
có 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 trong
bả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ách
hà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ì cho
xem 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ác
dò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ảng
KhachHang.
                                        47
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ạn
thê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ủa
LEFT 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ìm
thấ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 khi
thê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
Để 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ới
cú 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 được
phé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',N'Hằ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ông
cầ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ông
cầ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 theo
thứ 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ông
liệt kê tên cột.
       insert into khachhang
       values (N'Đặng Minh',N'Hằng',N'Ba Đì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ổ sung
nhiề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ác
thông qua câu lệnh SELECT. Với cách này, các giá trị dữ liệu được bổ sung vào
bảng không được chỉ định tường minh mà thay vào đó là một câu lệnh SELECT
truy 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ảng
KhachHang_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 KhachHang
bằng cách sử dụng câu lệnh sau:
                                         49
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ày
có 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ác
mặt hàng có manhomhang = 1 trong bảng DanhMucHang, bạn thực hiện câu lệnh
sau:
      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àng
có MaHang = 2 bạn thực hiện như sau:
      update DanhMucHang
      set TenHang = N'Bia 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ủa
câu lệnh này như sau:

      DELETE FROM <tên bảng>
      [WHERE <điều kiện>]




                                        50
Để 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ệnh
DELETE. Ví dụ muón xóa hết dữ liệu trong bảng KhachHang_Backup bạn thực
hiệ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ạn
muón xóa khách hàng có MaKhachHang = 18 trong bảng KhachHang bạn thực hiện
như sau:
      delete from KhachHang
      where MaKhachHang = 18

III. 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ệu
mớ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
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ủ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.
      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ĩa
rà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ếu
cho 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ởi
rà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
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óa
chí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
[ 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ội
dung 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 CSDL
khá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
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ệc
và 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ụng
nhìn vào bảng DonHang họ chỉ thấy cột MaKhachHang. Nếu họ muốn xem tên
khá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ông
dễ đố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ận
thô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ìn
chứ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 nhu
cầ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 2
cộ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úp
bạ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ác
cộ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ần
thiế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ập
trê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
Nếu trong câu lệnh CREATE VIEW, ta không chỉ định danh sách các tên cột
cho 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ết
quả 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
Bài Tập


Bài 1: Tạo CSDL LUONG để lưu trữ lương, trong đó có bảng tblLuong có cấu trúc
như 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 Nulls
Yê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ị theo
lớp, trong 1 lớp thì sắp xếp theo tên.




                                        57
Chương 5: Một số hàm trong SQL Server


I. Các hàm trên dữ liệu kiểu số

   1. Hàm ABS(<số>): Trả về trị tuyệt đối của 1 số
   2. Hàm CEILING(<số>): Trả về số nguyên nhỏ nhất lớn hơn hoặc bằng <số>.
   3. Hàm FLOOR(<số>): Trả về số nguyên lớn nhất nhỏ hơn hoặc bằng <số>.
   4. Hàm ROUND(<số>, p): Hàm làm tròn số với p chữ số sau dấu thập phân.
   5. Hàm SQUARE(<số>): Hàm trả về giá trị bình phương của <số>.
   6. Hàm SQRT(number): Hàm trả về giá trị căn bậc hai của <số>.
   7. Hàm isNumeric: Kiểm tra một giá trị có phải thuộc kiểu dữ liệu số hay
không.

II. Nhóm hàm thống kê

   1. Hàm COUNT: Dùng để đếm số bản ghi
      Ví dụ 1: Để biết số bản ghi trong bảng KhachHang ta sử dụng lệnh sau:
             select count(*) from KhachHang

       Ví dụ 2: Muốn biết khách hàng có mã khách hàng đã đặt bao nhiêu đơn hàng
ta sử dụng lệnh sau:
             select count(MaKhachHang) as Sodonhang
             from DonHang
             where MaKhachHang = 3

   2. Hàm MAX: Trả về giá trị lớn nhất của một tập hợp các giá trị.
      Ví dụ: Hãy cho biết giá của mặt hàng có giá cao nhất
             select max(DonGia) from DanhMucHang

   3. Hàm MIN: Trả về giá trị nhỏ nhất của một tập hợp các giá trị.
      Ví dụ: Hãy cho biết giá của mặt hàng có giá thấp nhất
             select min(DonGia) from DanhMucHang

   4. Hàm SUM: Trả về tổng giá trị của một tập hợp các giá trị.
   5. Hàm AVG:Trả về giá trị trung bình của một tập hợp các giá trị




                                       58
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

More Related Content

What's hot

Bai tap va loi giai sql
Bai tap va loi giai sqlBai tap va loi giai sql
Bai tap va loi giai sql. .
 
BÁO CÁO CÔNG NGHỆ PHẦN MỀM 8 điểm-QUẢN LÝ CỬA HÀNG BÁN MÁY ẢNH
BÁO CÁO CÔNG NGHỆ PHẦN MỀM 8 điểm-QUẢN LÝ CỬA HÀNG BÁN MÁY ẢNHBÁO CÁO CÔNG NGHỆ PHẦN MỀM 8 điểm-QUẢN LÝ CỬA HÀNG BÁN MÁY ẢNH
BÁO CÁO CÔNG NGHỆ PHẦN MỀM 8 điểm-QUẢN LÝ CỬA HÀNG BÁN MÁY ẢNHHoà Đoàn
 
Chuẩn hóa lược đồ quan hệ
Chuẩn hóa lược đồ quan hệChuẩn hóa lược đồ quan hệ
Chuẩn hóa lược đồ quan hệHưởng Nguyễn
 
Phân tích thiết kế hệ thống thông tin quản lý bán hàng của công ty cổ phần qu...
Phân tích thiết kế hệ thống thông tin quản lý bán hàng của công ty cổ phần qu...Phân tích thiết kế hệ thống thông tin quản lý bán hàng của công ty cổ phần qu...
Phân tích thiết kế hệ thống thông tin quản lý bán hàng của công ty cổ phần qu...Dịch vụ Làm Luận Văn 0936885877
 
Giáo trình phân tích thiết kế hệ thống thông tin
Giáo trình phân tích thiết kế hệ thống thông tinGiáo trình phân tích thiết kế hệ thống thông tin
Giáo trình phân tích thiết kế hệ thống thông tinVõ Phúc
 
Bài 2: Các khái niệm trong CSDL quan hệ - Giáo trình FPT
Bài 2: Các khái niệm trong CSDL quan hệ - Giáo trình FPTBài 2: Các khái niệm trong CSDL quan hệ - Giáo trình FPT
Bài 2: Các khái niệm trong CSDL quan hệ - Giáo trình FPTMasterCode.vn
 
Bài giảng kiến trúc máy tính
Bài giảng kiến trúc máy tínhBài giảng kiến trúc máy tính
Bài giảng kiến trúc máy tínhCao Toa
 
Phụ thuộc hàm và các dạng chuẩn - dhcntt
Phụ thuộc hàm và các dạng chuẩn - dhcnttPhụ thuộc hàm và các dạng chuẩn - dhcntt
Phụ thuộc hàm và các dạng chuẩn - dhcnttanhhuycan83
 
Chương 4. Chuẩn hóa cơ sở dữ liệu
Chương 4. Chuẩn hóa cơ sở dữ liệu Chương 4. Chuẩn hóa cơ sở dữ liệu
Chương 4. Chuẩn hóa cơ sở dữ liệu Hoa Le
 
CÁC BÀI TOÁN KHAI PHÁ DỮ LIỆU VÀ ỨNG DỤNG CỦA KHAI PHÁ DỮ LIỆU.pdf
CÁC BÀI TOÁN KHAI PHÁ DỮ LIỆU VÀ ỨNG  DỤNG CỦA KHAI PHÁ DỮ LIỆU.pdfCÁC BÀI TOÁN KHAI PHÁ DỮ LIỆU VÀ ỨNG  DỤNG CỦA KHAI PHÁ DỮ LIỆU.pdf
CÁC BÀI TOÁN KHAI PHÁ DỮ LIỆU VÀ ỨNG DỤNG CỦA KHAI PHÁ DỮ LIỆU.pdfMan_Ebook
 
Quản lý quan hệ khách hàng
Quản lý quan hệ khách hàngQuản lý quan hệ khách hàng
Quản lý quan hệ khách hàngAn Nguyen
 
Ứng dụng mô hình CSDL phân tán giải quyết bài toán quản lý bán hàng
Ứng dụng mô hình CSDL phân tán giải quyết bài toán quản lý bán hàngỨng dụng mô hình CSDL phân tán giải quyết bài toán quản lý bán hàng
Ứng dụng mô hình CSDL phân tán giải quyết bài toán quản lý bán hàngnataliej4
 
Hệ thống quản lý rạp chiếu phim
Hệ thống quản lý          rạp chiếu phimHệ thống quản lý          rạp chiếu phim
Hệ thống quản lý rạp chiếu phimvennguyennoinho
 
Báo cáo đồ án môn công nghệ phần mềm
Báo cáo đồ án môn công nghệ phần mềmBáo cáo đồ án môn công nghệ phần mềm
Báo cáo đồ án môn công nghệ phần mềmRiTa15
 
SQL Cursor - kiểu dữ liệu Cursor (Kiểu dữ liệu con trỏ)
SQL Cursor - kiểu dữ liệu Cursor (Kiểu dữ liệu con trỏ)SQL Cursor - kiểu dữ liệu Cursor (Kiểu dữ liệu con trỏ)
SQL Cursor - kiểu dữ liệu Cursor (Kiểu dữ liệu con trỏ)Pix Nhox
 
[Báo cáo] Bài tập lớn Ngôn ngữ lập trình: Quản lý thư viện
[Báo cáo] Bài tập lớn Ngôn ngữ lập trình: Quản lý thư viện[Báo cáo] Bài tập lớn Ngôn ngữ lập trình: Quản lý thư viện
[Báo cáo] Bài tập lớn Ngôn ngữ lập trình: Quản lý thư việnThe Nguyen Manh
 
Bài giảng cơ sở dữ liệu
Bài giảng cơ sở dữ liệuBài giảng cơ sở dữ liệu
Bài giảng cơ sở dữ liệutrieulongweb
 
Giáo trình SQL server tiếng việt
Giáo trình SQL server tiếng việtGiáo trình SQL server tiếng việt
Giáo trình SQL server tiếng việtThuyet Nguyen
 

What's hot (20)

Bai tap va loi giai sql
Bai tap va loi giai sqlBai tap va loi giai sql
Bai tap va loi giai sql
 
BÁO CÁO CÔNG NGHỆ PHẦN MỀM 8 điểm-QUẢN LÝ CỬA HÀNG BÁN MÁY ẢNH
BÁO CÁO CÔNG NGHỆ PHẦN MỀM 8 điểm-QUẢN LÝ CỬA HÀNG BÁN MÁY ẢNHBÁO CÁO CÔNG NGHỆ PHẦN MỀM 8 điểm-QUẢN LÝ CỬA HÀNG BÁN MÁY ẢNH
BÁO CÁO CÔNG NGHỆ PHẦN MỀM 8 điểm-QUẢN LÝ CỬA HÀNG BÁN MÁY ẢNH
 
Chuẩn hóa lược đồ quan hệ
Chuẩn hóa lược đồ quan hệChuẩn hóa lược đồ quan hệ
Chuẩn hóa lược đồ quan hệ
 
Phân tích thiết kế hệ thống thông tin quản lý bán hàng của công ty cổ phần qu...
Phân tích thiết kế hệ thống thông tin quản lý bán hàng của công ty cổ phần qu...Phân tích thiết kế hệ thống thông tin quản lý bán hàng của công ty cổ phần qu...
Phân tích thiết kế hệ thống thông tin quản lý bán hàng của công ty cổ phần qu...
 
Giáo trình phân tích thiết kế hệ thống thông tin
Giáo trình phân tích thiết kế hệ thống thông tinGiáo trình phân tích thiết kế hệ thống thông tin
Giáo trình phân tích thiết kế hệ thống thông tin
 
Bài 2: Các khái niệm trong CSDL quan hệ - Giáo trình FPT
Bài 2: Các khái niệm trong CSDL quan hệ - Giáo trình FPTBài 2: Các khái niệm trong CSDL quan hệ - Giáo trình FPT
Bài 2: Các khái niệm trong CSDL quan hệ - Giáo trình FPT
 
Bài giảng kiến trúc máy tính
Bài giảng kiến trúc máy tínhBài giảng kiến trúc máy tính
Bài giảng kiến trúc máy tính
 
Phụ thuộc hàm và các dạng chuẩn - dhcntt
Phụ thuộc hàm và các dạng chuẩn - dhcnttPhụ thuộc hàm và các dạng chuẩn - dhcntt
Phụ thuộc hàm và các dạng chuẩn - dhcntt
 
Chương 4. Chuẩn hóa cơ sở dữ liệu
Chương 4. Chuẩn hóa cơ sở dữ liệu Chương 4. Chuẩn hóa cơ sở dữ liệu
Chương 4. Chuẩn hóa cơ sở dữ liệu
 
CÁC BÀI TOÁN KHAI PHÁ DỮ LIỆU VÀ ỨNG DỤNG CỦA KHAI PHÁ DỮ LIỆU.pdf
CÁC BÀI TOÁN KHAI PHÁ DỮ LIỆU VÀ ỨNG  DỤNG CỦA KHAI PHÁ DỮ LIỆU.pdfCÁC BÀI TOÁN KHAI PHÁ DỮ LIỆU VÀ ỨNG  DỤNG CỦA KHAI PHÁ DỮ LIỆU.pdf
CÁC BÀI TOÁN KHAI PHÁ DỮ LIỆU VÀ ỨNG DỤNG CỦA KHAI PHÁ DỮ LIỆU.pdf
 
Thuật toán K mean
Thuật toán K meanThuật toán K mean
Thuật toán K mean
 
Quản lý quan hệ khách hàng
Quản lý quan hệ khách hàngQuản lý quan hệ khách hàng
Quản lý quan hệ khách hàng
 
Ứng dụng mô hình CSDL phân tán giải quyết bài toán quản lý bán hàng
Ứng dụng mô hình CSDL phân tán giải quyết bài toán quản lý bán hàngỨng dụng mô hình CSDL phân tán giải quyết bài toán quản lý bán hàng
Ứng dụng mô hình CSDL phân tán giải quyết bài toán quản lý bán hàng
 
Hệ thống quản lý rạp chiếu phim
Hệ thống quản lý          rạp chiếu phimHệ thống quản lý          rạp chiếu phim
Hệ thống quản lý rạp chiếu phim
 
Báo cáo đồ án môn công nghệ phần mềm
Báo cáo đồ án môn công nghệ phần mềmBáo cáo đồ án môn công nghệ phần mềm
Báo cáo đồ án môn công nghệ phần mềm
 
SQL Cursor - kiểu dữ liệu Cursor (Kiểu dữ liệu con trỏ)
SQL Cursor - kiểu dữ liệu Cursor (Kiểu dữ liệu con trỏ)SQL Cursor - kiểu dữ liệu Cursor (Kiểu dữ liệu con trỏ)
SQL Cursor - kiểu dữ liệu Cursor (Kiểu dữ liệu con trỏ)
 
[Báo cáo] Bài tập lớn Ngôn ngữ lập trình: Quản lý thư viện
[Báo cáo] Bài tập lớn Ngôn ngữ lập trình: Quản lý thư viện[Báo cáo] Bài tập lớn Ngôn ngữ lập trình: Quản lý thư viện
[Báo cáo] Bài tập lớn Ngôn ngữ lập trình: Quản lý thư viện
 
Bài giảng cơ sở dữ liệu
Bài giảng cơ sở dữ liệuBài giảng cơ sở dữ liệu
Bài giảng cơ sở dữ liệu
 
Giáo trình SQL server tiếng việt
Giáo trình SQL server tiếng việtGiáo trình SQL server tiếng việt
Giáo trình SQL server tiếng việt
 
Quản lý nhân sự-lương trên hệ quản trị cơ sở dữ liệu MICROSOFT ACCESS
Quản lý nhân sự-lương trên hệ quản trị cơ sở dữ liệu MICROSOFT ACCESSQuản lý nhân sự-lương trên hệ quản trị cơ sở dữ liệu MICROSOFT ACCESS
Quản lý nhân sự-lương trên hệ quản trị cơ sở dữ liệu MICROSOFT ACCESS
 

Viewers also liked

Bài 1: Làm quen với SQL Server 2008 - Giáo trình FPT
Bài 1: Làm quen với SQL Server 2008 - Giáo trình FPTBài 1: Làm quen với SQL Server 2008 - Giáo trình FPT
Bài 1: Làm quen với SQL Server 2008 - Giáo trình FPTMasterCode.vn
 
Chuong 1 - CSDL phân tán
Chuong 1 - CSDL phân tánChuong 1 - CSDL phân tán
Chuong 1 - CSDL phân tánduysu
 
Web hoc tieng nhat
Web hoc tieng nhatWeb hoc tieng nhat
Web hoc tieng nhathoaidiet0404
 
Giáo trình phân tích thiết kế hệ thống thông tin
Giáo trình phân tích thiết kế hệ thống thông tinGiáo trình phân tích thiết kế hệ thống thông tin
Giáo trình phân tích thiết kế hệ thống thông tinVõ Phúc
 
Đột biến gene trong bệnh rối loạn đông máu Hemophilia
Đột biến gene trong bệnh rối loạn đông máu HemophiliaĐột biến gene trong bệnh rối loạn đông máu Hemophilia
Đột biến gene trong bệnh rối loạn đông máu HemophiliaHạnh Hiền
 
Ngư tiều y thuật vấn đáp
Ngư tiều y thuật vấn đápNgư tiều y thuật vấn đáp
Ngư tiều y thuật vấn đápBác sĩ Thạch
 
Thông tư 04/2010/BXD -huong dan quan ly chi phi
Thông tư 04/2010/BXD -huong dan quan ly chi phiThông tư 04/2010/BXD -huong dan quan ly chi phi
Thông tư 04/2010/BXD -huong dan quan ly chi phihousingcorp
 
giới thiệu dự án.pp
giới thiệu dự án.ppgiới thiệu dự án.pp
giới thiệu dự án.ppdiempham1002
 
Benh lay truyen qua duong tinh duc
Benh lay truyen qua duong tinh ducBenh lay truyen qua duong tinh duc
Benh lay truyen qua duong tinh ducthaonguyen.psy
 
Hướng Dẫn Sử Dụng & Khắc Phục Sự Cố UPS APC
Hướng Dẫn Sử Dụng & Khắc Phục Sự Cố UPS APC Hướng Dẫn Sử Dụng & Khắc Phục Sự Cố UPS APC
Hướng Dẫn Sử Dụng & Khắc Phục Sự Cố UPS APC Trung Phan
 
Chuong 3.1 qua trinh qua do
Chuong 3.1 qua trinh qua doChuong 3.1 qua trinh qua do
Chuong 3.1 qua trinh qua dothanhyu
 
lý thuyết cơ sở dữ liệu phân tán
lý thuyết cơ sở dữ liệu phân tánlý thuyết cơ sở dữ liệu phân tán
lý thuyết cơ sở dữ liệu phân tánNgo Trung
 
Các yếu tố ảnh hưởng tới hiệu suất tuabin gió
Các yếu tố ảnh hưởng tới hiệu suất tuabin gióCác yếu tố ảnh hưởng tới hiệu suất tuabin gió
Các yếu tố ảnh hưởng tới hiệu suất tuabin gióTuong Do
 
Tai nạn giao thông
Tai nạn giao thôngTai nạn giao thông
Tai nạn giao thôngTmKemme
 

Viewers also liked (20)

Bài 1: Làm quen với SQL Server 2008 - Giáo trình FPT
Bài 1: Làm quen với SQL Server 2008 - Giáo trình FPTBài 1: Làm quen với SQL Server 2008 - Giáo trình FPT
Bài 1: Làm quen với SQL Server 2008 - Giáo trình FPT
 
Chuong 1 - CSDL phân tán
Chuong 1 - CSDL phân tánChuong 1 - CSDL phân tán
Chuong 1 - CSDL phân tán
 
Dns
DnsDns
Dns
 
Dr phong đtđy4 2013
Dr phong   đtđy4 2013Dr phong   đtđy4 2013
Dr phong đtđy4 2013
 
Web hoc tieng nhat
Web hoc tieng nhatWeb hoc tieng nhat
Web hoc tieng nhat
 
Giáo trình phân tích thiết kế hệ thống thông tin
Giáo trình phân tích thiết kế hệ thống thông tinGiáo trình phân tích thiết kế hệ thống thông tin
Giáo trình phân tích thiết kế hệ thống thông tin
 
La01.001 định hướng xây dựng chuẩn mực báo cáo tài chính việt nam đáp ứng xu ...
La01.001 định hướng xây dựng chuẩn mực báo cáo tài chính việt nam đáp ứng xu ...La01.001 định hướng xây dựng chuẩn mực báo cáo tài chính việt nam đáp ứng xu ...
La01.001 định hướng xây dựng chuẩn mực báo cáo tài chính việt nam đáp ứng xu ...
 
Đột biến gene trong bệnh rối loạn đông máu Hemophilia
Đột biến gene trong bệnh rối loạn đông máu HemophiliaĐột biến gene trong bệnh rối loạn đông máu Hemophilia
Đột biến gene trong bệnh rối loạn đông máu Hemophilia
 
3 dmax
3 dmax3 dmax
3 dmax
 
Ngư tiều y thuật vấn đáp
Ngư tiều y thuật vấn đápNgư tiều y thuật vấn đáp
Ngư tiều y thuật vấn đáp
 
Thông tư 04/2010/BXD -huong dan quan ly chi phi
Thông tư 04/2010/BXD -huong dan quan ly chi phiThông tư 04/2010/BXD -huong dan quan ly chi phi
Thông tư 04/2010/BXD -huong dan quan ly chi phi
 
giới thiệu dự án.pp
giới thiệu dự án.ppgiới thiệu dự án.pp
giới thiệu dự án.pp
 
Benh lay truyen qua duong tinh duc
Benh lay truyen qua duong tinh ducBenh lay truyen qua duong tinh duc
Benh lay truyen qua duong tinh duc
 
Hướng Dẫn Sử Dụng & Khắc Phục Sự Cố UPS APC
Hướng Dẫn Sử Dụng & Khắc Phục Sự Cố UPS APC Hướng Dẫn Sử Dụng & Khắc Phục Sự Cố UPS APC
Hướng Dẫn Sử Dụng & Khắc Phục Sự Cố UPS APC
 
Chuong 3.1 qua trinh qua do
Chuong 3.1 qua trinh qua doChuong 3.1 qua trinh qua do
Chuong 3.1 qua trinh qua do
 
Luật Đấu thầu số 43/2013/QH13 ngày 26/11/2013
Luật Đấu thầu số 43/2013/QH13 ngày 26/11/2013Luật Đấu thầu số 43/2013/QH13 ngày 26/11/2013
Luật Đấu thầu số 43/2013/QH13 ngày 26/11/2013
 
lý thuyết cơ sở dữ liệu phân tán
lý thuyết cơ sở dữ liệu phân tánlý thuyết cơ sở dữ liệu phân tán
lý thuyết cơ sở dữ liệu phân tán
 
Các yếu tố ảnh hưởng tới hiệu suất tuabin gió
Các yếu tố ảnh hưởng tới hiệu suất tuabin gióCác yếu tố ảnh hưởng tới hiệu suất tuabin gió
Các yếu tố ảnh hưởng tới hiệu suất tuabin gió
 
Luật nhân quả
Luật nhân quả Luật nhân quả
Luật nhân quả
 
Tai nạn giao thông
Tai nạn giao thôngTai nạn giao thông
Tai nạn giao thông
 

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

Co sodulieu sql_dht_loi
Co sodulieu sql_dht_loiCo sodulieu sql_dht_loi
Co sodulieu sql_dht_loiNam Bùi
 
Huong dan su dung ban day du
Huong dan su dung ban day duHuong dan su dung ban day du
Huong dan su dung ban day duthanh_k8_cntt
 
Tri tue-nhan-tao-dinh-manh-tuong
Tri tue-nhan-tao-dinh-manh-tuongTri tue-nhan-tao-dinh-manh-tuong
Tri tue-nhan-tao-dinh-manh-tuongQuyên Đinh
 
Giao trinhvisualbasic6.0[bookbooming.com]
Giao trinhvisualbasic6.0[bookbooming.com]Giao trinhvisualbasic6.0[bookbooming.com]
Giao trinhvisualbasic6.0[bookbooming.com]bookbooming1
 
Giao trinhvisualbasic6.0
Giao trinhvisualbasic6.0Giao trinhvisualbasic6.0
Giao trinhvisualbasic6.0Vu Huynh Van
 
GIÁO TRÌNH SAP 2000 VERSION 2014
GIÁO TRÌNH SAP 2000 VERSION 2014GIÁO TRÌNH SAP 2000 VERSION 2014
GIÁO TRÌNH SAP 2000 VERSION 2014nguyenxuan8989898798
 
MegaK academy - Giáo trình SAP 2000 v14.0.0.pdf
MegaK academy - Giáo trình SAP 2000 v14.0.0.pdfMegaK academy - Giáo trình SAP 2000 v14.0.0.pdf
MegaK academy - Giáo trình SAP 2000 v14.0.0.pdfToi Hoang
 
Giao trinh sap 2000 v14
Giao trinh sap 2000 v14Giao trinh sap 2000 v14
Giao trinh sap 2000 v14Le Duy
 
Giao trinh sap2000 v14
Giao trinh sap2000 v14Giao trinh sap2000 v14
Giao trinh sap2000 v14Ttx Love
 
Giao trinh sap 2000 v14
Giao trinh sap 2000 v14Giao trinh sap 2000 v14
Giao trinh sap 2000 v14kietbecamex
 
Word2010trainingbook share99post
Word2010trainingbook share99postWord2010trainingbook share99post
Word2010trainingbook share99postTrung Thanh Nguyen
 
Co so ly thuyet ve bao mat
Co so ly thuyet ve bao matCo so ly thuyet ve bao mat
Co so ly thuyet ve bao matapofisvn
 
Phân tích thiết kế hệ thống thông tin PTIT
Phân tích thiết kế hệ thống thông tin PTIT Phân tích thiết kế hệ thống thông tin PTIT
Phân tích thiết kế hệ thống thông tin PTIT NguynMinh294
 
Xây dựng Robot tự hành dạng Nonholonomic và tổng hợp bộ điều khiển bám quỹ đạo
Xây dựng Robot tự hành dạng Nonholonomic và tổng hợp bộ điều khiển bám quỹ đạoXây dựng Robot tự hành dạng Nonholonomic và tổng hợp bộ điều khiển bám quỹ đạo
Xây dựng Robot tự hành dạng Nonholonomic và tổng hợp bộ điều khiển bám quỹ đạoMan_Ebook
 
Thuyết minh kết cấu Chung cư cao tầng CT7
Thuyết minh kết cấu Chung cư cao tầng CT7 Thuyết minh kết cấu Chung cư cao tầng CT7
Thuyết minh kết cấu Chung cư cao tầng CT7 nataliej4
 
Giao trinh asp net_w2008
Giao trinh asp net_w2008Giao trinh asp net_w2008
Giao trinh asp net_w2008tanhung18
 
Giao trinh-asp-net-w2008
Giao trinh-asp-net-w2008Giao trinh-asp-net-w2008
Giao trinh-asp-net-w2008Son Duong Hoang
 
PLC, Phạm Quốc Phương
PLC, Phạm Quốc PhươngPLC, Phạm Quốc Phương
PLC, Phạm Quốc PhươngMan_Ebook
 

Similar to Bai giang hệ quản trị cơ sở dữ liệu (20)

Co sodulieu sql_dht_loi
Co sodulieu sql_dht_loiCo sodulieu sql_dht_loi
Co sodulieu sql_dht_loi
 
Huong dan su dung ban day du
Huong dan su dung ban day duHuong dan su dung ban day du
Huong dan su dung ban day du
 
Tri tue-nhan-tao-dinh-manh-tuong
Tri tue-nhan-tao-dinh-manh-tuongTri tue-nhan-tao-dinh-manh-tuong
Tri tue-nhan-tao-dinh-manh-tuong
 
Giao trinh ly thuyet do hoa
Giao trinh ly thuyet do hoaGiao trinh ly thuyet do hoa
Giao trinh ly thuyet do hoa
 
Giao trinhvisualbasic6.0[bookbooming.com]
Giao trinhvisualbasic6.0[bookbooming.com]Giao trinhvisualbasic6.0[bookbooming.com]
Giao trinhvisualbasic6.0[bookbooming.com]
 
Giao trinhvisualbasic6.0
Giao trinhvisualbasic6.0Giao trinhvisualbasic6.0
Giao trinhvisualbasic6.0
 
Shop AI
Shop AIShop AI
Shop AI
 
GIÁO TRÌNH SAP 2000 VERSION 2014
GIÁO TRÌNH SAP 2000 VERSION 2014GIÁO TRÌNH SAP 2000 VERSION 2014
GIÁO TRÌNH SAP 2000 VERSION 2014
 
MegaK academy - Giáo trình SAP 2000 v14.0.0.pdf
MegaK academy - Giáo trình SAP 2000 v14.0.0.pdfMegaK academy - Giáo trình SAP 2000 v14.0.0.pdf
MegaK academy - Giáo trình SAP 2000 v14.0.0.pdf
 
Giao trinh sap 2000 v14
Giao trinh sap 2000 v14Giao trinh sap 2000 v14
Giao trinh sap 2000 v14
 
Giao trinh sap2000 v14
Giao trinh sap2000 v14Giao trinh sap2000 v14
Giao trinh sap2000 v14
 
Giao trinh sap 2000 v14
Giao trinh sap 2000 v14Giao trinh sap 2000 v14
Giao trinh sap 2000 v14
 
Word2010trainingbook share99post
Word2010trainingbook share99postWord2010trainingbook share99post
Word2010trainingbook share99post
 
Co so ly thuyet ve bao mat
Co so ly thuyet ve bao matCo so ly thuyet ve bao mat
Co so ly thuyet ve bao mat
 
Phân tích thiết kế hệ thống thông tin PTIT
Phân tích thiết kế hệ thống thông tin PTIT Phân tích thiết kế hệ thống thông tin PTIT
Phân tích thiết kế hệ thống thông tin PTIT
 
Xây dựng Robot tự hành dạng Nonholonomic và tổng hợp bộ điều khiển bám quỹ đạo
Xây dựng Robot tự hành dạng Nonholonomic và tổng hợp bộ điều khiển bám quỹ đạoXây dựng Robot tự hành dạng Nonholonomic và tổng hợp bộ điều khiển bám quỹ đạo
Xây dựng Robot tự hành dạng Nonholonomic và tổng hợp bộ điều khiển bám quỹ đạo
 
Thuyết minh kết cấu Chung cư cao tầng CT7
Thuyết minh kết cấu Chung cư cao tầng CT7 Thuyết minh kết cấu Chung cư cao tầng CT7
Thuyết minh kết cấu Chung cư cao tầng CT7
 
Giao trinh asp net_w2008
Giao trinh asp net_w2008Giao trinh asp net_w2008
Giao trinh asp net_w2008
 
Giao trinh-asp-net-w2008
Giao trinh-asp-net-w2008Giao trinh-asp-net-w2008
Giao trinh-asp-net-w2008
 
PLC, Phạm Quốc Phương
PLC, Phạm Quốc PhươngPLC, Phạm Quốc Phương
PLC, Phạm Quốc Phương
 

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

  • 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. MỤC LỤC MỤC LỤC...................................................................................................................0 Chươ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á ........................................................................................................7 Chươ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.....................................11 Chươ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.......................................................31 Chươ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.......................................................................................54 Chươ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. 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 .............................................................................61 Chươ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. 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 ...............................................................76 Chươ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 ......................................................................................................92 PHỤ LỤC................................................................................................................106 3
  • 5. Chương I : Những khái niệm cơ bản về cơ sở dữ liệu I. 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ưng ta 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ản ghi, 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ột hệ 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 đối vớ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ần mề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 kinh doanh 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ảng cho 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ấu trú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 trong mộ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ứa trong 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. 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ệu sẽ 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ĩa kiể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 định nghĩa trường vì dữ liệu sẽ không có chỗ để chứa.Do đó, thiết kế cơ sở dữ liệu cực kỳ 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 ghi tươ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ứa khoả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óa chí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ản ghi 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ác trong CSDL. 5
  • 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 nhau như 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ủa bả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ới nhau 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 định nghĩ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ộc tí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ảng luô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 tham chiế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ĩa mố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ỗi bả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ếu quả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ấm cá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ác hoá đơn trong tblOrder. Nhưng điều gì sẽ xảy ra nếu ta tiến hành xoá một khách hà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 trong tblCustomer. 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ất quán, bộ máy cơ sở dữ liệu cung cấp một cách để ta định nghĩa mối quan hệ trong cá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ính toà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. 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ông nhấ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ách hà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ên tắ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ất quá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ảng khô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ía Nam 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áo cá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ính xá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ộc ta 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ảng riê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 tin trong 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ếu chuẩn hoá có thể do chủ ý, hoặc có thể là do kết quả của sự thiếu kinh nghiệm hoặc sự 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ọi thứ 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 ích trong 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 động cho 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ật và xoá bản ghi từ các bảng dựa trên các tiêu chỉ nêu ra. 7
  • 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ên quan 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ày khô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ều nà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ớp có 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ều khách hàng, và mỗi khách hàng có nhiều người bán. 8
  • 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. Chương 2 : Giới thiệu về SQL Server 2005 I. SQL Server 2005 SQL Server 2005 là một hệ thống quản l. cơ sở dữ liệu (Relational Database Management System (RDBMS)) sử dụng Transact-SQL để trao đổi dữ liệu giữa Client 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 nhau trong RDBMS. SQL Server 2005 được tối ưu để có thể chạy trên môi trường cơ sở dữ liệu rấ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 server khác như Microsoft Internet Information Server (IIS), E-Commerce Server, Proxy Server.... 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 ra phiê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 3GB RAM Express: Bản miễn phí, hỗ trợ tối đa 1CPU, 1GB RAM và kích thước Database 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ững ngườ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ác chứ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. 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 2005 Express II. 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ản lý 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àm việ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ơn nữa. Để khởi động SQL Server Management Studio Express bạn thực hiện theo các bước sau: Vào Start/Programs/Microsoft SQL Server 2005/ SQL Server Management Studio 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. • 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 đăng nhậ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. 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ạn có 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 bao gồ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. 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ễn mối quan hệ giữa các bảng trong CSDL. Sử dụng lược đồ CSDL bạn có thể chỉnh sử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ủ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 CSDL khác. 14
  • 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ực thi khi thủ tục lưu trữ được thực thi. 15
  • 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 cho phé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ác giá 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ép ta 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ương trì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ột sự kiện ngôn ngữ thực thi. Có 2 loại trigger: DML triggers and DDL triggers. DDL trigger được Microsoft giới thiệu trong SQL server 2005. Chúng được thực hiện khi có 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ột bảng, bạn có thể viết một DDL trigger để ngăn chặn việc xóa một trường nếu trường đó có chứa dữ liệu. Bạn cũng có thể sử dụng DDL trigger để thống kê các thay đổ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, and DELETE 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ác lệnh INSERT, UPDATE, and DELETE không hợp lệ. 16
  • 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ện thâ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ác thao 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ần lư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ổ Object Explorer 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. 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ết cộ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. • 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ước bigint Các số nguyên từ -263 đến 263-1 8 bytes binary(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 byte char(n) Kiểu chuỗi có chiều dài n kí tự cố định (1 ≤ n n bytes ≤ 8000). Không hỗ trợ Unicode datetime Dữ liệu ngày giờ, nhận giá trị từ 1/1/1753 đến 4 bytes 31/12/9999 decimal(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ác float 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+308 image 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ân int Số nguyên có giá trị từ -231 đến 231 - 1 4 bytes money Dữ liệu kiểu tiền tệ từ -263 đến 263 8 bytes nchar(n) Dữ liệu chuỗi, có chiều dài cố định n (1 ≤ n ≤ 2n bytes 4000) ký tự Unicode ntext 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 bytes numeric(p,s) Tương tự kiểu decimal nvarchar(n) Dữ liệu kiếu chuỗi, có thể lưu trữ n (1 ≤ n ≤ 2n bytes nvarchar(MAX) 4000) kí tự Unicode real 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. smallint Số nguyên từ -215 đến 215 -1 2 bytes smallmoney Dữ liệu kiểu tiền tệ từ - 214,748.3648 đến 4 bytes 214,748.3647 sql_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 bytes timestamp 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 timestamp tinyint Số nguyên có giá trị từ 0 đến 255 1 byte unique-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ụng varbinary(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ệu Char 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ì SQL Server 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ự đưa và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ột nhậ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ười thiết kế CSDL có thể chỉ ra giá trị bắt đầu và giá trị bước tăng. Cột nhận dạng thườ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 Indenty Specification của cửa sổ Column Properties. 20
  • 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ính toá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ích củ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. 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 hay một cột để tránh việc lưu dữ liệu không chính xác vào database (invalid data). Các rà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ột tham 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ị Null và 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ột tạo nên Primary Key phải mang tính duy nhất. Mỗi bảng trong CSDL nên có một khó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ảo tí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. 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 được sử 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ều Foreign key trong một bảng. Foreign key có thể reference (tham chiếu) vào Primary Key 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ảng có 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ệu trong bảng chứa Primarykey (tức bảng cha). Ví dụ nếu ta xóa dữ liệu trong bảng cha thì dữ liệu trong bảng con trở nên "mồ côi" (orphan) vì không thể reference ngược về bảng cha. Do đó Foreign Key constraint sẽ đảm bảo điều đó không xảy ra. Nếu bạ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 trong bảng con trước. Default Constraints Default Constraints (Giá trị ngầm định) là giá trị mà SQL server tự động gán cho một cột nào đó trong bảng. Giá trị ngầm định có thể là một hằng, NULL hoặc mộ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ộc tính Default Value or Binding trong cửa sổ Column Properties. 23
  • 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ành NULL Thiết lập giá trị ngầm định là NULL 7 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ào mộ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ảng cha để cho phép một giá trị được chấp nhận hay không trong khi Check Constraint dự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ụ ta có 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. 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ông cụ 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ích OK. 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ện cá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. 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 (Database Diagram). Để 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. 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 để đưa và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ất hiện cửa sổ Diagram như sau: 27
  • 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ằng việ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ộc trong 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 con có 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 khai bá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. 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ính của bản ghi đang thay đổi cũng thay đổi theo, bạn cần khai báo Cascaden cho trường hợp Update. Để làm điều này tachọn hai thuộc tính Delete Rule và Update Rule ứng với trườ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ốn lư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. 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ện cá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 Remove from Diagram. Xóa quan hệ: Kích chuột phải lên quan hệ muốn xóa và chọn Delete Relationship 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ối quan 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. 5. Nhập dữ liệu cho bảng Để nhập dữ liệu cho bảng trong SQL Server Management Studio ta kích chuộ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. Trong trườ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ông gâ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 theo mộ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ọn New Query. 31
  • 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 truy vấ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ạn thả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ện trong phần Messages. 32
  • 34. Để lưu trữ truy vấn bạn vào File và chọn Save SQLQuery1.sql hoặc kích vào biể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ủa query và thư mục để lưu trữ query. 33
  • 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ác trườ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. Chương 4: Các câu lệnh SQL cơ bản I. 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ệu II. 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ác dữ 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ột củ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ép chọ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ệnh nà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ức tạ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. 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ặc khô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ác cộ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ác bả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ảng và khung nhìn tham gia vào truy vấn, tên của các bảng và khung nhìn được phân cách nhau bởi dấu phẩy. 36
  • 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ưu trữ 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ột khi 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ên cá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ột trong 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. Tên cho tiêu đề cột Ten và Địa chỉ thay cho tiêu đề cột DiaChi khi kết quả đươc hiể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 truy vấ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. 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ách hiể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 N'Nam' when GioiTinh = 0 then N'Nữ' else N'Khô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ác dò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ực hiệ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ảng bạn thực hiện như sau: select Top 5 percent * from KhachHang Từ khoá DISTINCT Từ khoá DISTINCT được sử dụng trong câu lệnh SELECT nhằm loại bỏ ra khỏ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. 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. Sau mệ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ều kiệ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án tử 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. 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àng lớ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ệnh sau 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ọc ra 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/2010 ta 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 danh sá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, 7 hoặc 8 ta thực hiện câu lệnh sau: select * from KhachHang 41
  • 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ực hiệ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ạn thự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ân theo 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. xếp có thể theo chiều tăng (ASC) hoặc giảm (DESC), mặc định là sắp xếp theo chiề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 ưu tiê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ên có 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ếu trù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ảng thà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. 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. 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ột madonhang, 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 tin thườ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ới nhau. Khi dữ liệu được truy vấn, các hoạt động liên kết được dùng để sử dụng nhữ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ác dò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. 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ảng DonHang 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 DonHang bằ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 theo sau 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 được cù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. 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òng tươ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ột trong 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ững dò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 đó so khớ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ết có 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 trong bả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ách hà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ì cho xem 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ác dò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ảng KhachHang. 47
  • 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ạn thê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ủa LEFT 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ìm thấ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 khi thê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. Để 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ới cú 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 được phé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',N'Hằ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ông cầ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ông cầ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 theo thứ 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ông liệt kê tên cột. insert into khachhang values (N'Đặng Minh',N'Hằng',N'Ba Đì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ổ sung nhiề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ác thông qua câu lệnh SELECT. Với cách này, các giá trị dữ liệu được bổ sung vào bảng không được chỉ định tường minh mà thay vào đó là một câu lệnh SELECT truy 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ảng KhachHang_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 KhachHang bằng cách sử dụng câu lệnh sau: 49
  • 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ày có 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ác mặt hàng có manhomhang = 1 trong bảng DanhMucHang, bạn thực hiện câu lệnh sau: 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àng có MaHang = 2 bạn thực hiện như sau: update DanhMucHang set TenHang = N'Bia 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ủa câu lệnh này như sau: DELETE FROM <tên bảng> [WHERE <điều kiện>] 50
  • 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ệnh DELETE. Ví dụ muón xóa hết dữ liệu trong bảng KhachHang_Backup bạn thực hiệ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ạn muón xóa khách hàng có MaKhachHang = 18 trong bảng KhachHang bạn thực hiện như sau: delete from KhachHang where MaKhachHang = 18 III. 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ệu mớ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. 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ủ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. 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ĩa rà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ếu cho 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ởi rà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. 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óa chí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. [ 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ội dung 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 CSDL khá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. 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ệc và 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ụng nhìn vào bảng DonHang họ chỉ thấy cột MaKhachHang. Nếu họ muốn xem tên khá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ông dễ đố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ận thô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ìn chứ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 nhu cầ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 2 cộ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úp bạ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ác cộ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ần thiế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ập trê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. Nếu trong câu lệnh CREATE VIEW, ta không chỉ định danh sách các tên cột cho 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ết quả 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. Bài Tập Bài 1: Tạo CSDL LUONG để lưu trữ lương, trong đó có bảng tblLuong có cấu trúc như 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 Nulls Yê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ị theo lớp, trong 1 lớp thì sắp xếp theo tên. 57
  • 59. Chương 5: Một số hàm trong SQL Server I. Các hàm trên dữ liệu kiểu số 1. Hàm ABS(<số>): Trả về trị tuyệt đối của 1 số 2. Hàm CEILING(<số>): Trả về số nguyên nhỏ nhất lớn hơn hoặc bằng <số>. 3. Hàm FLOOR(<số>): Trả về số nguyên lớn nhất nhỏ hơn hoặc bằng <số>. 4. Hàm ROUND(<số>, p): Hàm làm tròn số với p chữ số sau dấu thập phân. 5. Hàm SQUARE(<số>): Hàm trả về giá trị bình phương của <số>. 6. Hàm SQRT(number): Hàm trả về giá trị căn bậc hai của <số>. 7. Hàm isNumeric: Kiểm tra một giá trị có phải thuộc kiểu dữ liệu số hay không. II. Nhóm hàm thống kê 1. Hàm COUNT: Dùng để đếm số bản ghi Ví dụ 1: Để biết số bản ghi trong bảng KhachHang ta sử dụng lệnh sau: select count(*) from KhachHang Ví dụ 2: Muốn biết khách hàng có mã khách hàng đã đặt bao nhiêu đơn hàng ta sử dụng lệnh sau: select count(MaKhachHang) as Sodonhang from DonHang where MaKhachHang = 3 2. Hàm MAX: Trả về giá trị lớn nhất của một tập hợp các giá trị. Ví dụ: Hãy cho biết giá của mặt hàng có giá cao nhất select max(DonGia) from DanhMucHang 3. Hàm MIN: Trả về giá trị nhỏ nhất của một tập hợp các giá trị. Ví dụ: Hãy cho biết giá của mặt hàng có giá thấp nhất select min(DonGia) from DanhMucHang 4. Hàm SUM: Trả về tổng giá trị của một tập hợp các giá trị. 5. Hàm AVG:Trả về giá trị trung bình của một tập hợp các giá trị 58