Lệnh CREATE Lệnh này dùng để tạo ra các đối tượng như DATABASE, TABLE CREATE TABLE - Bảng là một cấu trúc để cất giữ các bộ của quan hệ.Có khuôn dạng hai chiều gồm có các cột và hàng.. V
Trang 1BÀI 1: THỰC HÀNH CÂU LỆNH CREATE DATABASE, CREATE TABLE,
ALTER TABLE, DROP TABLE
CHO CSDL QUẢN LÝ THƯ VIỆN GỒM CÁC BẢNG SAU
1 Bảng tblDauSach: Lưu trữ thông tin của các đầu sách có trong thư viện
m
a DS varchar mã đầu sách 4
2 Bảng tblDocGia: lưu trữ thông tin về độc gia
3 tblLinhVuc: Thông tin về các lĩnh vực sách
m
a LV varchar Mã lĩnh vực 10
4 tblNXB: Thông tin về nhà xuất bản
m
a N X B varchar Mã nhà xuất bản 10
5 tblPhieuMuon: thông tin về phiếu mượn
Trang 26 tblSach: Thông tin về sách
m
7 tblTacGia: Thông tin về tác giả
m
dienThoai varchar Điện thoại của tác giả 10
I N h ắc lại l ý t h u y ết
a Lệnh CREATE
Lệnh này dùng để tạo ra các đối tượng như DATABASE, TABLE
CREATE TABLE
- Bảng là một cấu trúc để cất giữ các bộ của quan hệ.Có khuôn dạng hai chiều gồm
có các cột và hàng Nó là yếu tố cơ bản cho các thao tác khác nhau Có thể nói việc tạo bảng là bước đầu tiên quan trọng nhất để thiết lập CSDL
-Cú pháp của lệnh này:
CREATE TABLE table-name(colom_name type(size) )
Khi tạo ra bảng chúng ta phải chỉ ra kiểu dữ liệu của cột và mỗi cột chỉ có thể có môt kiểu dữ liệu duy nhất Khi tạo bảng ta có thể đưa ra các ràng buộc
Các ràng buộc của các trường có thể là : primary key, foreign key , unique, not null VD:Tạo bảng nhân viên
Trang 3CREATE TABLE NHAN_VIEN (NV varchar(4) constraint p_NV Primary key, ho_ten Varchar(25), Ng_sinh datetime, chứcvụ varchar(20), đia_chi varchar(30), luong int);
trong VD trên ta tạo ra một ràng buộc là p_NV được định nghĩa là primary key
Ta cũng có thể tạo ra bảng mới với cấu trúc và dữ liệu từ 1 bảng khác
Cú pháp:
SELECT <ds cột> into <tên bảng mới>
from <Tên bảng>
[where <điều kiện>]
Với cấu trúc này, bảng tạo ra có cấu trúc và dữ liệu, tuy nhiên bảng mới không có ràng buộc khóa chính
VD: Tạo ra 1 bảng mới có tên là NVN (NV,họ_tên) từ bảng NHAN_VIEN
SELECT NV,họ_tên into NVN FROM NHAN_VIEN;
+ ADD: thêm cột mới, hoặc ràng buộc
+ ALTER: sửa đổi kiểu dữ liệu của cột
+ DROP: xoá bỏ các ràng buộc, cột
VD1: thêm trường gia đình kiểu varchar(1) vào R1
ALTER TABLE R1 ADD gia đình varchar(1)
VD2: thay đổi trường Địa_chỉ Varvarchar(30) trong R1 thành Địa_Chỉ(20):
ALTER TABLE R1 ALTER COLUMN Địa_Chỉ varvarchar(20)
VD3: Xóa cột Địa_chỉ khỏi bảng R1
Trang 4ALTER TABLE R1 Drop COLUMN Địa_Chỉ
VD4: huỷ bỏ ràng buộc trường khoá #NV trong R1
ALTER TABLE R1 DROP constraint NV_prim
1 Sử dụng câu lệnh SQL tạo bảng tblNXB trong CSDL Quản lý thư viện
- Ta nhận thấy với bảng tblNXB, trường maNXB chính là khóa chính của bảng, các trường tenNXB, diaChi ta yêu cầu không được trống, trường dienThoai có thể trống
- Để tạo bảng ta sử dụng câu lệnh create table
- Để tạo khóa chính của bảng ta sử dụng ràng buộc primary key
Thực thi các câu lệnh này trong hệ quản trị CSDL access hoặc hệ quản trị CSDL SQL server Cài đặt hệ quản trị 2000 trở lên Sau đây là cửa sổ soạn thạo và thực thi các câu lệnh SQL trong môi trường là hệ quản trị SQL Server 2008:
Click vào 1, sẽ mở ra cửa sổ 2, cửa sổ này cho phép soạn thảo bất kỳ một câu lệnh nào của ngôn ngữ SQL, database đang được mở hiện thị ở 3.
- Tạo database có tên QLTV
1
Cửa sổ soạn thảo câu lệnh SQL3
2
Trang 5create database QLTV
Bôi đen và dùng F5 để thực hiện câu lệnh n ày, khi đó hệ thống sẽ tạo ra một cơ sở
dữ liệu trên ổ đĩa với đường dẫn sau:
Muốn thao tác với CSDL này, dùng câu lệnh:
Use QLTV
Để tạo bảng tblNXB ta sử dụng câu lệnh sau đây:
CREATE TABLE tblNXB
(
maNXB varchar(10) primary key,
tenNXB varchar(50) not null,
diaChi varchar(50) not null,
dienThoai varchar(10) null )
Sau khi thực thi câu lệnh này, bảng tblNXB sẽ được tạo ra trong CSDL có tên QLTV, và
hệ thống sẽ tạo ra cho bảng 1 ràng buộc khóa chính với một tên do hệ thống quy định
Muốn đặt tên ràng buộc cho khóa chính (tên ràng buộc là P_NXB), câu lệnh trên sẽ được
viết lại như sau:
Trang 62 Sử dụng câu lệnh SQL sửa đổi độ rộng của trường tenNXB có độ rộng 40 ký tự
Alter table tblNXB alter column tenNXB varchar(40) not null
3 Sử dụng câu lệnh SQL xóa bảng tblNXB
- Để xóa bảng ta sử dụng câu lệnh drop như sau:
Drop table tblNXB
III B ài t ập t h ực hành
Anh/Chị hãy dùng các câu lệnh SQL thực hiện các yêu cầu sau:
1 Tạo cơ sở dữ liệu Quản lý sách thư viện ở trên
2 Tạo các bảng trong CSDL Quản lý sách thư viện
3 Thêm cột idSach vào bảng tblDauSach
4 Thêm bảng nhapSach (gồm các trường maPhieuNhap, maDS, ngayNhap, soLuong, đơn giá) vào CSDL trên
5 Xóa các trường ngayNhap, soLuong của bảng tblDauSach
6 Xóa cột idSach ở bảng tblDauSach
C
hú ý: Sinh viên làm các bài tập thực hành ở trên, cuối buổi thực hành nộp lại bài làm cho giáo viên.
Trang 7INSERT INTO tên_bảng VALUES (giá_trị_1, giá_trị_2, )
Bạn cũng có thể chỉ rõ các cột/trường nào cần chèn dữ liệu:
INSERT INTO tên_bảng (cột_1, cột_2, ) VALUES (giá_trị_1, giá_trị_2, )
- Chèn nhiều bản ghi vào bảng từ một bảng khác:
INSERT INTO <Tên bảng>
SELECT Clause
Câu lệnh UPDATE được sử dụng để cập nhật/sửa đổi dữ liệu đã có trong bảng
Cú pháp:
UPDATE tên_bảng
SET tên_cột = giá_trị_mới
WHERE tên_cột = giá_trị
Trang 8Câu lệnh DELETE được dùng để xoá tất cả các dòng hoặc tất cả các dòng ra khỏi bảng.
Cú pháp:
Xóa những bản ghi thỏa mãn điều kiện:
DELETE FROM tên_bảng
WHERE <Điều kiện>
CREATE TABLE NHANVIEN (
HONV VARCHAR(10) CONSTRAINT NV_HONV_NN NOT NULL,
TENLOT VARCHAR(20) NOT NULL,
TENNV VARCHAR(10) NOT NULL,
MANV CHAR(9) CONSTRAINT NV_MANV_PK PRIMARY KEY,
Muốn xem thông tin về các ràng buộc trong bảng, ta dùng câu lệnh sau:
Exec sp_helpconstraint NHANVIEN
Ràng buộc toàn vẹn tạo ra khi ta tạo ra các cấu trúc bảng hoặc sau khi tạo ra cấu trúc bảng:
Ví dụ:
Cấu trúc tạo bảng sau có 1 ràng buộc khóa chính:
Trang 9CREATE TABLE tblNXB
(
maNXB varchar(10) primary key, tenNXB varchar(50), diaChi archar(50), dienThoai
varchar(10))
với các này, hệ thống sẽ quy định tên của ràng buộc
hoặc ta có thể viết theo cách khác như sau:
cách 1:
CREATE TABLE tblNXB
(
maNXB varchar(10) constraint p_NXB primary key, tenNXB varchar(50), diaChi
varchar(50), dienThoai varchar(10))
cách 2:
CREATE TABLE tblNXB
(
maNXB varchar(10) , tenNXB varchar(50), diaChi archar(50), dienThoai varchar(10),
constraint p_NXB primary key(MaNXB) )
với 2 cách này, ta tự đặt tên cho ràng buộc khóa chính là p_ NXB.
- Cách 1, chỉ phù hợp với trường hợp ràng buộc khóa chính có 1 cột còn cách 2 thì có thể áp dùng cho mọi trường hợp (số lượng cột tham gia ràng buộc >=1)
Câu lệnh thêm ràng buộc:
ALTER TABLE <Tên_bảng> ADD
CONSTRAINT <Ten_RBTV> <RBTV>, CONSTRAINT <Ten_RBTV> <RBTV>,
…
Câu lệnh này sử dụng khi đã tạo xong cấu trúc bảng (bảng chưa có dữ liệu)
Ví dụ 1: Thêm ràng buộc check có tên c_PHAI trên cột PHAI của bảng NHANVIEN: ALTER TABLE NHANVIEN ADD CONSTRAINT c_PHAI CHECK (PHAI IN (‘Nam’,
‘Nu’))
Hoặc:
ALTER TABLE NHANVIEN ADD CONSTRAINT c_phai CHECK(PHAI='nam' OR
Trang 10maphong varchar(10) NOT NULL, tenphong varchar(50), diadiem varchar(50))
- Thêm ràng buộc khóa chính trên cột maphong:
ALTER TABLE PHONGBAN ADD CONSTRAINT P_PHONG primary key (maphong)
Lưu ý: Cột tham gia vào ràng buộc khóa chính phải NOT NULL
- Thêm cột maphong Varchar(10) vào bảng NHANVIEN:
ALTER TABLE NHANVIEN ADD maphong varchar(10)
- Thêm ràng buộc khóa ngoại của bảng NHANVIEN và ràng buộc tham chiếu đến bảng PHONGBAN thông qua cột Maphong:
ALTER TABLE NHANVIEN ADD f_NV FOREIGN key(maphong) REFERENCES
PHONGBAN(maPhong) ON DELETE CASCADE ON UPDATE CASCADE
Ví dụ 2: Ràng buộc khóa chính gồm nhiều thuộc tính:
CREATE TABLE Thuctap(masv VARCHAR(10), madt VARCHAR(10) , NTT
NVARCHAR(25),
kqtt FLOAT CONSTRAINT c_kqtt CHECK(kqtt>0 AND kqtt<=10),
CONSTRAINT p_tt PRIMARY key(masv,madt),
CONSTRAINT f1_tt FOREIGN key(masv) REFERENCES sv(masv) ON DELETE
CASCADE ON UPDATE CASCADE ,
CONSTRAINT f2_tt FOREIGN key(madt) REFERENCES dt(madt) ON DELETE
CASCADE ON UPDATE CASCADE )
Trang 11 Câu lệnh xóa ràng buộc:
ALTER TABLE <Tên_bảng> DROP CONSTRAINT <Tên_RBTV>
Ví dụ:
- Xóa ràng buộc khóa chính trên cột Maphong của bảng PHONGBAN:
ALTER TABLE PHONGBAN DROP CONSTRAINT P_PHONG
- Xóa ràng buộc Check trên cột Phai của bảng NHANVIEN:
ALTER TABLE NHANVIEN DROP CONSTRAINT C_PHAI
2 ) Hãy viết các câu truy vấn SQL thực hiện thêm các bản ghi sau vào bảng
Trang 12nào đó; delete from: để thực hiện xóa một hoặc nhiều bộ dữ liệu trong một bảng nào đó.
- Với mỗi câu lệnh insert into ta chỉ thực hiện thêm được một bộ bản ghi cho mỗi lần thực hiện câu lệnh Vì vậy cần thêm bao nhiêu bản ghi thì ta cần thực hiện bấy nhiêu câu lệnh
Lời
giải:
1 insert into tblDauSach
values (‘1010111’, ‘Phương pháp tính’, 2007, ‘111’, ‘Nxb01’, ‘Tg002’);
insert into tblDauSach
values (‘1011111’, ‘Lập trình hướng đối tượng với C#’, 2008, ‘101’, ‘Nxb02’,
2 delete from tblDauSach where maDS like ‘%11’;
3 update tblDauSach Set maDS =’1010110’
3 Tạo ràng buộc trên cột ngayNhap sao cho cột này nhận giá trị mặc định là ngày
hiện tại (hàm Getdate() lấy ngày hiện hành).
4 Xóa hết ràng buộc tại các cột trong các bảng trong CSDL QLTV
5 Tạo lại các ràng buộc khóa chính, khóa ngoại và các ràng buộc khác trên các bảng trong CSDL QLTV
Trang 13Bài 2: Viết các câu lệnh SQL thực hiện các yêu
cầu sau:
1 Thêm các thông tin sau vào bảng tblTacGia
Tg003 Phạm Ngọc Thách Hà Nội 04 3223049
2 Thêm các thông tin sau vào bảng tblNXB
Nxb01 Nhà xuất bản giáo dục Hà Nội 04 7892345
Nxb02 Nhà xuất bản đồng nai Đồng Nai 078 789223
Nxb03 Nhà xuất bản giao thông vận tải Hà Nội 04 3223049
Nxb04 Nhà xuất bản Kim Đồng Hà Nội 04 2230498
3 Thêm các thông tin sau vào bảng tblLinhVuc
4 Thay đổi mã của tác giả Quách Tuấn Ngọc thành ‘Tg005’
5 Thay đổi tên tác giả có mã ‘TG007’ thành ‘Đỗ Xuân Lôi’
6 Thay đổi tên cuốn sách có mã ‘2010111’ thành ‘Kết cấu ô tô’
7 Xóa tất cả các độc giải có mã bắt đầu bằng chuỗi ‘10103’
8 Xóa tất cả các đầu sách được nhập vào ngày ‘20/6/2008’
9 Hiển thị tất cả các tác giả viết sách thuộc về lĩnh vực Công Nghệ Thông Tin
10 Thực hiện các bài tập trong phần 18.3
Trang 14hú ý: Sinh viên làm các bài tập thực hành ở trên, cuối buổi thực hành nộp lại bài làm cho giáo viên.
Trang 15BÀI 3: TRUY VẤN DỮ LIỆU
WHERE <điều kiện>
- <danh sách các cột>: Tên các cột cần được hiển thị trong kết quả truy vấn
- <danh sách các bảng>: Tên các bảng liên quan đến câu truy vấn
- <điều kiện>: Biểu thức boolean xác định dòng nào sẽ được rút trích
Nối các biểu thức: AND, OR, và NOT
Phép toán: < , > , <= , >=, <> , =, LIKE và BETWEEN
Cú pháp
Cú pháp của câu lệnh SELECT như sau:
SELECT tên_các_cột
FROM tên_bảng
Để truy xuất nhiều cột ta liệt kê các cột sao cho mỗi cột đặt cách nhau bởi dấu phẩy
Ví Dụ: Để truy xuất maTG và tenTG trong bảng tblTacGia ta thực hiện câu truy vấn
SELECT * FROM tên_Bảng;
Cú pháp mệnh đề WHERE trong câu lệnh SELECT như sau:
SELECT tên_cột[,…] FROM tên_bảng[,…]
WHERE tên_cột phép_toán giá_trị[and/or …]
Trong mệnh đề WHERE, các phép toán được sử dụng là
<> So sánh không bằng
Trang 16< Nhỏ hơn
>= Lớn hơn hoặc bằng
<= Nhỏ hơn hoặc bằng
BETWEEN Nằm giữa một khoảng
L
ư u ý: Trong một số phiên bản của SQL, phép toán <> có thể được viết dưới dạng !=
Ví dụ 1: Để lấy về tất cả các cuốn sách được xuất bản từ năm 2004 đến năm 2008 ta
có câu truy vấn sau:
Select *
From tblDauSach
Where (namXB >= 2004) and (namXB <= 2008);
Ví dụ 2: Để lấy về tất cả tên các cuốn sách có mã là ‘1010111’ Ta sử dụng câu truy vấn sau:
1.Dùng câu lệnh SQL thực hiện các yêu cầu sau:
a) Hiện thị tất cả các nhà xuất bản có trong trong CSDL.
b) Hiển thị tất cả các thông tin về các đầu sách có mã bắt đầu bằng ký tự :’101’ c) Hiển thị tất cả tên sách thuộc lĩnh vực ‘Công nghệ thông tin’, tên sách được sắp
- Để kiểm tra một xâu có được bắt đầu bằng chuỗi ký tự nào đó ta sử dụng từ khóa like
- Thông tin về các độc giả được lưu trong bảng tblDocGia
Trang 17- Thông tin về đầu sách được lưu trong bảng tblDauSach
Lời
gi ả i
a) select tenNXB [Nhà xuất bản] from tblNXB;
b) select * from tblDauSach where maDS like ‘101%’;
c) select tenSach from tblDauSach ds, tblLinhVuc lv
where ((ds.MaLV = lv.MaLV) and (tenLV= ‘Công nghệ thông tin’))
order by tenSach;
d) select * from tblDocGia where soThe =’skh20984’;
III.
B ài t ập t h ực hành
Sử dụng các câu lệnh SQL thực hiện các truy vấn sau:
1 Hiển thị thông tin về các độc giả mượn sách ngày: 23/03/2005
2 Hiển thị tất cả các đầu sách của tác giả Quách Tuấn Ngọc
3 Hiển thị tất cả các sách có số lượng lớn hơn 100
4 Hiển thị tất cả các đọc giả đang mượn sách
5 Hiển thị tất cả thông tin về sách thuộc về lĩnh vực ‘Kinh tế’, sắp xếp kết quả theo trường ngayNhap
6 Hiển thị tất cả tác giả viết cuốn sách ‘Pascal nâng cao’
7 Hiển thị tất cả tác giả có địa chỉ ở Hà Nội
8 Hiển thị tất cả độc giả sinh ngày năm 15/10/1988
………
Trang 18BÀI 4: TRUY VẤN DỮ LIỆU (TIẾP) Mục tiêu:
Rèn luyện kỹ năng truy vấn trên nhiều bảng có sử dụng các toán tử: IN, LIKE, BETWEEN
Đề bài tập:
Cho CSDL QLDIEM gồm các bảng như sau:
Khoa(MaKhoa, TenKhoa) MonHoc(MaMH, TenMH, SoTc) SinhVien(MaSV, Hoten,Ngaysinh, Quequan, GioiTinh, MaKhoa) KetQua(MaSV, MaMH, DiemL1, DiemL2 )
Hãy tạo CSDL và thiêt lập các ràng buộc theo mô tả dưới đây:
-Một khoa có nhiều sinh viên
-Một sinh viên có nhiều kết quả (một sinh viên học nhiều môn học)
-Một môn học có nhiều kết quả (mỗi sinh viên có 1 KQ riêng)
Sau đó nhập dữ liệu cho các bảng và thực hiện các yêu cầu sau đây:
1 Liệt kê tất cả các sinh viên, thông tin gồm MaSV, TenSV, GioiTinh Tên sinh viên viết Hoa, sắp xếp tên sinh viên theo thứ tự giảm dần trong bảng chữ cái
2 Hiển thị thông tin của các sinh viên họ ‘Nguyễn’
3 Hiển thị thông tin của các sinh viên gồm: Masv, Hoten, Tuoi (đây là thuộc tính
tự đặt)
4 Hiển thị thông tin của các sinh viên thuộc khoa ‘Công nghệ thông tin’ và có điểm thi lần 1 các môn >=8
5 Hiển thị thông tin của các môn học có số tín chỉ >=3 thuộc khoa có mã “KT”
6 Hiển thị thông tin về các khoa có các sinh viên tên: ‘Lan’, ‘Mai’, ‘Hoa’
7 Hiển thị thông tin của các sinh viên chưa tham gia thi bất kì môn nào (chưa có kết quả thi môn học)
Trang 19BÀI 5: TRUY VẤN LỒNG, HÀM KẾT HỢP VÀ GOM NHÓM
I
N h ắc lại lý t h u y ết
A CÁC PHÉP TOÁN TẬP HỢP
- Toán tử UNION cho phép ta hợp các kết quả của hai hay nhiều truy vấn
thành một tập kết quả duy nhất Cú pháp của phép hợp như sau:
- Toán tử INTERSECT: phép giao
SELECT <ds cột> FROM <ds bảng> WHERE <điều kiện>
Trang 20Ví dụ : trong cơ sở dữ liệu quản lý sách của thư viện trường ĐHSPKTHY, hiển thị tên các đầu sách không được nhập trong năm 2007, chúng ta sẽ thiết kế câu truy vấn như sau:
SELECT tenDS FROM tblDauSach WHERE maDS NOT IN (SELECT
maDS
FROM tblPhieuNhap WHERE ngayNhap BETWEEN '1/1/2007' AND '31/12/2007' );
Các câu lệnh SELECT có thể lồng nhau ở nhiều mức
Câu truy vấn con thường trả về một tập các giá trị
Các câu truy vấn con trong cùng một mệnh đề WHERE được kết hợp bằng phép nối logic
Mệnh đề WHERE của câu truy vấn cha
- <biểu thức> <so sánh tập hợp> <truy vấn con>
- So sánh tập hợp thường đi cùng với một số toán tử
IN, NOT IN, ALL, ANY hoặc SOME
- Kiểm tra sự tồn tại
EXISTS, NOT EXISTS
Truy vấn lồng phân cấp
+ Mệnh đề WHERE của truy vấn con không tham chiếu đến thuộc tính của các quan
hệ trong mệnh đề FROM ở truy vấn cha
+ Khi thực hiện, câu truy vấn con sẽ được thực hiện trước
Ví dụ:
SELECT MANV, TENNV
FROM NHANVIEN, PHONGBAN
WHERE TENPHG=‘Nghien cuu’ AND PHG=MAPHG