1. Trang chủ
  2. » Công Nghệ Thông Tin

Hướng dẫn thực hành SQL

84 138 1

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

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 84
Dung lượng 2,24 MB

Nội dung

THỰC HÀNH HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU SQL BÀI TẬP THỰC HÀNH MÔN : HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU GVHD: Th.S Vũ Thị Thương THỰC HÀNH HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU SQL B Tóm tắt câu lệnh TSQL học 1) Trên sở liệu (database) Các phiên SQL Server: Enterprise, Personal, Desktop, Developer, Các phận SQL Server: Enterprise Manager, Query Analyzer, Books Online, Các loại tập tin SQL Server: data file (primary, secondary), log file Các loại sở liệu SQL Server: system database, user database create database HoSoSinhVien create database HoSoSinhVien on (name=’HSSV_data’, filename=’c:\HSSV_data.mdf’) log on create database: tạo sở liệu drop database HoSoSinhVien drop database: xóa sở liệu alter database HoSoSinhVien alter database: sửa thông tin sở liệu exec sp_dboption HoSoSinhVien, ‘read only’, ‘true’ exec sp_dboption HoSoSinhVien, ‘autoshrink’, ‘true’ exec sp_dboption exec sp_dboption: sửa thông tin sở liệu dbcc shrinkdatabase(HoSoSinhVien, 10) dbcc: điều khiển sở liệu 2) Trên bảng (table) Nhớ kiểu số liệu: text, binary, numberic, money, datetime, bit, variant Nhớ các ràng buộc: default, check, unique, foreign, primary Nhớ kiểu toàn vẹn: entity, domain, referential, user Nhớ thuộc tính bổ trợ: identity, null THỰC HÀNH HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU SQL create table: tạo bảng Tạo bảng với cột create table SinhVien ( MaSV int, TenSV nchar(50) Tạo với ràng buộc create table SinhVien ( MaSV int primary key, TenSV nvarchar(50) not null, QueQuan int references DiaPhuong(MaDP) drop table SinhVien drop table: xóa bảng alter table add: thêm cột Thêm cột cách dùng lệnh alter table alter table SinhVien add QueQuan int alter table SinhVien drop column QueQuan alter table drop column: xóa cột alter table SinhVien alter column TenSV nchar(50) not null alter table alter column: thêm thuộc tính not null alter table add primary key: thêm khóa Thêm ràng buộc khóa cần phải biến cột null thành not null trước thêm Nếu để lệnh chuyển đổi thuộc tính not null cạnh lệnh thêm khóa phải chèn từ khóa go vào lệnh chưa thực lệnh báo lỗi alter table SinhVien alter column MaSV int not null go alter table SinhVien add primary key (MaSV) alter table SinhVien add foreign key (QueQuan) references DiaPhuong(MaDP) alter table add foreign key: thêm ràng buộc khóa ngồi alter table SinhVien add default 'khong ten' for TenSV alter table add default: thêm ràng buộc mặc định exec sp_help SinhVien exec sp_help: xem thông tin bảng 3) Trên ghi (record) Nhớ thêm phần biểu thức điều kiện Nhớ thêm phần ký tự thay insert into SinhVien (MaSV, TenSV, QueQuan) values (1, N’Nguyễn Văn insert values: thêm ghi vào bảng insert into DocGia select MaSV, TenSV, QueQuan from SinhVien insert into DocGia select MaGV, TenGV, QueQuan from GiaoVien insert select: thêm ghi từ bảng khác vào bảng select MaSV, TenSV, Diem into SinhVienKha from SinhVien where select into: đưa kết lựa chọn vào bảng delete from SinhVien delete from SinhVien where MaSV=1234 delete: xóa ghi từ bảng truncate: xóa tồn ghi bảng truncate table SinhVien update SinhVien set NhomTruong = where MaSV < update: sửa ghi bảng update SinhVien set NhomTruong = where (MaSV > and MaSV < 8) 4) Truy vấn (query) Hỗ trợ truy vấn: distinct, top, as, identity Phép toán tập hợp: in, like, between Các hàm tổng nhóm: sum, max, min, avg 4.1) Truy vấn đơn giản select * from SinhVien select *: Hiện tất bảng select TenSV, DiemTB from SinhVien select: Hiện số cột select TenSV, DiemTB from SinhVien where select where: Hiện số dòng / ghi select TenSV, DiemTB from SinhVien order by DiemTB desc, TenSV asc select order by: Hiện xếp theo điểm theo tên select distinct: Hiện danh sách giá trị không trùng lặp select distinct QueQuan from select top TenSV, DiemTB from SinhVien order by DiemTB desc, TenSV asc select top: Hiện dòng bảng 4.2) Truy vấn lồng (nested query) select where (select) Hiện tất người bảng nhân viên có lương lương lớn người có cơng ty: select TenNV, Luong from NhanVien where Luong = (select max(Luong) from select where (in) Hiện tất người bảng nhân viên có lương lớn lớn nhì người có cơng ty: select TenNV, Luong from NhanVien Câu lệnh select tạo tập hai giá trị (top 2) lương lớn lương lớn nhì Và câu lệnh select thứ chọn người mà lương nằm tập lớn lớn nhì select where (in sub) Hiện tất người có lương lớn phòng (không phải lớn công ty mà lớn phòng đơn vị mà thuộc về) select nv1.TenNV, nv1.Luong from NhanVien as nv1 where nv1.Luong = (select max(Luong) from NhanVien where Câu lệnh select trả vềPhong=nv1.Phong) giá trị lương lớn khơng phải lớn tồn cơng ty mà lớn phòng nv1 Sau câu lệnh select ngồi xác định xem nv1 có chọn không cách kiểm tra lương với lương lớn phòng 4.3) Truy vấn tổng nhóm (subtotal query / grouping query) select group by: Thống kê theo tiêu chí Hiện số lượng nhân viên ứng với quê select QueQuan, count(*) from NhanVien Đếm số nam số nữ công ty 10 di tu viec noi bang select Student.RN, Student.[Name], Student.Age, Book.RN, Book.BookTitle from Student, Book Chon nhung bo thoa man dieu kien select Student.RN, Student.[Name], Student.Age, Book.RN, Book.BookTitle from Student, Book where (Student.RN = Book.RN) and (Student.[Name] = 'Tran Tuan Duong'); Loai bo cac truong khong can thiet select Student.[Name], Book.BookTitle from Student, Book where (Student.RN = Book.RN) and (Student.[Name] = 'Tran Tuan Duong'); Cau hoi: Tran Tuan Duong muon bao nhieu quyen sach? select COUNT(*) AS [So quyen sach muon] from Student, Book where (Student.RN = Book.RN) and (Student.[Name] = 'Tran Tuan Duong'); Cau 1.4 Cach Select * from Student s1, Student s2; Select s1.RN, s1.[Name], s1.Age from Student s1, Student s2 where (s1.[RN] != s2.[RN]) and (s1.Age = s2.Age) Cach Dau tien la cho nhung tuoi co nguoi trung Select Age from Student Group by Age Having Count(RN) >= 2; Loc ten nhung nguoi co tuoi nam nhom Select RN, [Name], Age from Student where Age in (Select Age from Student Group by Age Having Count(RN) >= 2) Cau 1.6 Update Student set [Name] = [Name] + ' B' where [RN] = 4; Select * From Student; Cau 1.7 update Student set Age = Age + 1; Cau 1.8: Tran Tuan Duong tra sach EPC, xoa ban ghi Bang Book ma co RN=2 va BookTitle = EPC delete from Book where (Book.RN in (select Student.RN from Student where Student.[Name] = 'Tran Tuan Duong')) and (BookTitle = 'EPC') Select * from Book; Cau them Select [Name] from Student where [Name] like 'Pham%[gh]'; Chinh sua RN cua Student se lam cho RN Book thay doi update Student set RN= RN + 100 where RN = 1; Cau 2.1 Tuoi lon nhat cua Student Cau 2.2 Select [Name] from Student where Age = (Select MAX(Age) FROM Student); Select [Name] from Student where Age = (Select MIN(Age) FROM Student); cau 2.4 select Age, count(RN) from student Group By Age; cau 2.5 select Age, count(RN) from student Group By Age; Cau 2.6 Hoc vien nao muon nhieu sach nhat??? DECLARE @TEMP Select MAX([SoLuong]) From (Select COUNT(*) As [SoLuong] From Book Group By RN); Bài thực hành QUẢN LÝ BÁN HÀNG Sử dụng câu lệnh T-SQL Tạo CSDL để quản lý sản phẩm bán cửa hàng, sở liệu có tên QLHANG, tạo bảng để lưu trữ thông tin sau: Bảng Customers: lưu trữ thông tin khách hàng: customerid, customername,tei Bảng Items: lưu trữ thơng tin hàng hóa: itemid, itemname, quantity, prìce Bảng CustomerItem: lưu trữ thơng tin sản phẩm dược bán mua: customerid,itemid,quantity Nhập thông tin sau vào CSDL(Sử dụng câu lệnh T-SQL) a Nhập liệu bảng Customers sau b Nhập liệu bảng Items sau c Nhập thông tin vê hàng bán vào bảng CustomerItem sau Đặt ràng buộc khóa chính, khóa ngoại cho người dùng khơng thể xóa thơng tin khách hàng khách hàng mua sản phẩm Hiển thị tổng số tiền mà cửa hàng thu từ khách hàng Hiển thị tên, số tiền mua người khách hàng trả tiền cho cửa hàng nhiều Kiểm tra xem người khách có số điên thoại 2468888 có mua mặt hàng Tủ lạnh khơng? Nếu có mua dòng chũ “Có mua”, ngược lại “Khơng mua” Tính tổng số hàng hóa tổng tiền lại kho(Số lại tổng số trừ số bán) Hiển thị danh sách mặt hàng bán chạy (số lượng bán nhiều nhất) Hiển thị tất mặt hàng mà chưa bán 10 Hiển thị danh sách người mua nhiều mặt hàng 11 Hiển thị danh sách người mua hàng có số lượng nhiều LỜI GIẢI CAU create table customers( customerid int not null, customername varchar(50), tel varchar(10)) go tao bang items create table items( itemid int not null, itemname varchar(50), quantity int, price float) go tao bang customeritem create table customeritem( customerid int, itemid int, quantity int) go CAU 2a insert customers values(1,'dinh truong son','1234567') insert customers values(2,'mai minh','1357777') insert customers values(3,'nguyen hong ha','2468888') go CAU 2b insert items values(1,'tu lanh',5,3500) insert items values(2,'tivi',2,3000) insert items values(3,'dieu hoa',1,8000) insert items values(4,'quat da',5,1700) insert items values(5,'may giat',3,5000) go CAU 2c insert customeritem values(1,1,4) insert customeritem values(1,5,1) insert customeritem values(2,2,1) insert customeritem values(3,3,1) insert customeritem values(3,1,1) go CAU alter table customers add constraint pk_customers primary key(customerid) go alter table customeritem add constraint fk_customeritem foreign key(customerid) references customers(customerid) go CAU select sum(customeritem.quantity*price) from customeritem inner join items on customeritem.itemid = items.itemid go CAU select top customername,sum(ci.quantity*price) from customers c inner join customeritem c.customerid = ci.customerid inner join items i on ci on i.itemid =ci.itemid group by customername order by sum(ci.quantity*price) desc go CAU if exists(select itemname from items inner join customeritem on items.itemid = customeritem.itemid inner join customers on customers.customerid = customeritem.customerid where itemname = 'tu lanh' and tel = '2468888') select 'co mua' else select 'khong mua' go CAU select sum(items.quantity-customeritem.quantity) as conlai, sum(customeritem.quantity*price) as tienlai from items inner join customeritem on items.itemid = customeritem.itemid go CAU select top itemname as top3 from items inner join customeritem on items.itemid = customeritem.itemid group by itemname order by sum(customeritem.quantity) desc go CAU select itemname as chuabanduoc from items where itemid not in (select itemid from customeritem) go CAU 10 select customername from customers where customerid in (select customerid from customeritem group by customerid having count(itemid)>1) go CAU 11 select customername from customers where customerid in(select customerid from customeritem group by customerid having sum(quantity) > 1) go (Phần sinh viên tự làm) Câu Xây dựng sở liệu có tên LopHoc, có bảng liệu tên DSSV (danh sách sinh viên), bảng có trường liệu sau: Tên liệu Tên trường Loại liệu Mã sinh viên masv Chuỗi ký tự có ký tự Tên sinh viên tensv Chuỗi ký tự không vượt 32 ký tự Tuổi tuoi Số nguyên Số điện thoại sodt Chuỗi ký tự không 15 ký tự Địa diachi Chuỗi ký tự không vượt 256 ký tự Sau tạo xong, thực yêu cầu sau: • Dùng lệnh để chèn danh sách sinh viên lớp bạn học vào bảng DSSV • Sau tạo xong, dùng lệnh SELECT để hiển thị danh sách sinh viên chèn vào • Dùng lệnh DELETE để xóa tồn danh sách • Xóa Bảng DSSV khỏi sở liệu LopHoc • Xóa Cơ sở liệu LopHoc Hướng dẫn * Để tạo sở liệu, ta nhập lệnh sau vào cửa sổ Query: CREATE DATABASE LopHoc; Tô đậm lệnh bấm F5 để chạy * Để tạo bảng mới, ta chuyển vào làm việc sở liệu (bằng lệnh USE), sau tạo bảng lệnh sau: USE LopHoc; GO; CREATE TABLE DSSV ( masv nvarchar(6) PRIMARY KEY, tensv nvarchar(32), tuoi int, sodt nvarchar(15), diachi nvarchar(256) ) Nhập lệnh vào cửa sổ Query, tô đậm vùng lệnh bấm F5 để chạy * Để nhập liệu cho bảng, ta sử dụng câu lệnh INSERT sau: INSERT INTO DSSV (masv, tensv, tuoi, sodt, diachi) VALUES ('A012345', 'Pham Ngoc Hung', 32, '0982872507', 'Hoang Quoc Viet, Cau Giay, Ha Noi'); Câu lệnh chèn thêm dòng (bản ghi) liệu vào bảng DSSV Lưu ý liệu bên mệnh đề VALUES phải kiểu trật tự với danh sách trường liệt kê sau tên DSSV (tức 'A012345' kiểu chuỗi, tương ứng phù hợp với trường masv có kiểu nvarchar(6), 32 số nguyên tương ứng với trường tuoi thuộc kiểu int, ) Chúng ta thêm ghi khác lệnh INSERT, với lưu ý giá trị trường masv ghi khơng trùng lặp, trường trường khóa (PRIMARY KEY) * Để thị liệu bảng DSSV, ta sử dụng lệnh sau: SELECT * FROM DSSV; Nếu muốn thị tất ghi bảng DSSV với liệu nằm trường masv, tensv, sodt, ta dùng lệnh sau: SELECT masv, tensv, sodt FROM DSSV; Khi đó, kết chứa liệu tất ghi với trường masv, tensv sodt * Để xóa tất liệu bảng, ta dùng lệnh sau: DELETE FROM DSSV; Sau thực lệnh này, tất ghi có bảng DSSV bị xóa * Để xóa bảng DSSV khơng sử dụng bảng nữa, ta sử dụng lệnh sau: DROP TABLE DSSV; * Để xóa sở liệu LopHoc, trước hết ta cần chuyển sang làm việc sở liệu khác gọi lệnh xóa sở liệu (tức ta "đập đổ" ngơi nhà sau khỏi ngơi nhà đó) USE master; chuyen sang csdl master DROP DATABASE LopHoc; Câu Xây dựng sở liệu kho sách có tên KhoSach để chứa sách Cơ sở liệu có bảng có tên Sach, có trường liệu sau: Tên liệu Tên trường Mã sách Dạng liệu Kiểu liệu masach (trường khóa) Chuỗi ký tự khơng nvarchar(20) Ràng buộc Trường khóa vượt 20 ký tự Tiêu đề sách tieude Chuỗi ký tự không nvarchar(100) Không bỏ vượt 100 ký tự trống (NOT NULL) Chuỗi ký tự không nvarchar(32) Khơng bỏ vượt q 32 ký tự trống Đồng tác giả dongtacgia Chuỗi ký tự không nvarchar(256) Được phép bỏ trống Tác giả tacgiachinh vượt 256 ký tự, chứa danh sách đồng tác giả, phân cách dấu phẩy Ngày xuất ngayxuatban Trường kiểu ngày datetime tháng (DateTime) Nhà xuất nhaxuatban Không bỏ trống Chuỗi ký tự không nvarchar(256) Được phép bỏ trống vượt 256 ký tự Giá bán (ghi dongia Số thực float Khơng phép bìa) bỏ trống Số lượng soluong Số nguyên int Không phép sách bỏ trống Sau có bảng Sach, sử dụng lệnh INSERT để chèn sách vào bảng trên: masach tieude tacgiachinh dongtacgia ngayxuatba nhaxuatban dongia soluong n B00001 Phương trình Phạm Huy Phạm Cảnh 23/11/2001 NXB Khoa vi phân tích Điển Dương, phân Đinh Thế 80000 1200 học kỹ thuật Lục B00002 Giải tích hàm Phạm Kỳ Anh 12/12/2005 NXB Đại học 75000 900 quốc gia Hà Nội B00101 Đất rừng Đoàn Giỏi 10/03/2003 NXB văn học 20000 2000 Chu Lai 13/11/2005 NXB văn học 54000 1500 Phạm Ngọc 12/12/2001 NXB văn học 12000 4000 phương nam B00102 Ăn mày dĩ vãng B00104 Một thời để nhớ Hùng Sau tạo chèn liệu vào bảng Sách CSDL KhoSach xong, thực việc sau: • Sử dụng lệnh SELECT để liệt kê toàn danh sách Sách có sở liệu • Sử dụng lệnh SELECT với điều kiện WHERE để lọc tất sách xuất trước ngày26/03/2001 • Sử dụng lệnh SELECT với điều kiện WHERE hàm COUNT để đếm số sách có giá nhỏ 60000 • Sử dụng lệnh DELETE với điều kiện WHERE để xóa sách tác giả 'Phạm Ngọc Hùng' Câu 3: Tạo CSDL “QLThuVien” Tạo lập bảng BANDOC, SACH, MUONTRA có cấu trúc sau: BANDOC STT MaBD char(2) Ten varchar(35) Tuoi(int) - - - SACH STT MaSach char(4) Gioitinh (bit) Dienthoai number - Tensach (varchar) Soluong (number) MaNXB char(2) MaLoai char(2) TH STT MaBD MaSach Ngaymuon (Date) NgayTra (Date) Soluong (number) MUONTRA Tạo lập ràng buộc Tạo ràng buộc khố bảng BANDOC, SACH(MaBD, Masach) Tạo ràng buộc khoá ngoại bảng MUONTRA Tạo ràng buộc indentity(1,1) trường STT bảng Cập nhật lại số lượng đầu sách bảng SACH theo điều kiện đây: Nếu mã loại (MaLoai=’TH’) số lượng sách = 500 ...THỰC HÀNH HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU SQL B Tóm tắt câu lệnh TSQL học 1) Trên sở liệu (database) Các phiên SQL Server: Enterprise, Personal, Desktop, Developer, Các phận SQL Server:... variant, timestamp, uniqueidentifier [Type here] THƯC HÀNH HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU SQL TỔNG QUAN VỀ SQL SERVER Bài thực hành Tạo CSDL đơn giản SQL Server Management Studio Mục tiêu : Kết thúc này,... liệu Giá trị nhị phân: bit 18 THƯC HÀNH HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU SQL Các số nguyên: bigint, int, smallint, tinyint Các số thực xấp xỉ: float, real Giá trị số thực xác: decimal, numberic Giá trị

Ngày đăng: 17/01/2020, 11:06

TỪ KHÓA LIÊN QUAN

w