sqlKey

296 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
296
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
15
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

sqlKey

  1. 1. Giaùo Trình Heä Quaûn Trò CSDL SQLServer 2000 Trang 46 Bài 07 TRUY XUẤT DỮ LIỆU BẰNG CÂU LỆNH SQL Truy vấn đơn giản Biến đổi dữ liệu Truy vấn có điều kiện Truy vấn nhiều Table Sau khi bạn đã có thông tin trong CSDL của mình, bạn muốn trích ra những dữ liệu bạn mong muốn. Từ các phát biểu SELECT đơn giản lấy các cột chỉ định. Sau đó mở rộng bằng các kỹ thuật thao tác và chuyển đổi dữ liệu hạn chế dữ liệu trùng. Cuối cùng với các truy vấn cao cấp như các truy vấn con, truy vấn kết nối và tương quan dữ liệu (truy vấn nhiều table). Cú pháp đầy đủ của câu lênh SELECT SELECT [ALL | DISTINCT] [TOP N [PERCENT]] <DS các cột> [INTO <Tên Table>] FROM <DS Các Table> [Where <Điều kiện>] [GROUP BY <DS các cột gom nhóm>] [HAVING <Điều kiện của Group by>] [ORDER BY <Tên cột> Asc|Desc , . . .] Các truy vấn lấy thông tin từ CSDL bằng cách sử dụng câu lênh SQL từ công cụ SQL Query Analyzer. Ngòai ta ta cũng có thể sử dụng các công cụ kác và các tiện ích của hãng thứ 3. I. PHÁT BIỂU SELECT ĐƠN GIẢN 1. Lệnh SELECT đơn giản SELECT <DS Các cột> FROM <Tên Table > Mệnh đề : SELECT : Xác định các cột cần lấy dữ liệu FROM : Xác định Bảng (Table) chứa cột được lấy Sử dụng dấu hoa thị (*) thay thế cho DS tất cả các cột trong bảng. VD: SELECT * FROM KHACHHANG Để chọn các cột rõ ràng bạn phải phân mỗi cột bằng dấu (,) SELECT <Tên cột 1> [, <Tên cột 2> . . . .] FROM <Tên Table> VD: SELECT MaKH, TenKH, DiaChiKH FROM KHACHHANG Ghi chú : Khi sử dụng lệnh SELECT * , trật tự các cột sẽ giống trật tự đã chỉ định khi tạo Table. Khi sử dụng lệnh SELECT <DS các cột> thì trật tự là trật tự theo <DS các cột> 2. Thay Thế Tiêu Đề Cột Thay vì sử dụng các tiêu đề cột như đã chỉ định khi thiết kế Table bạn có thể thay đổi các tiêu đề cột theo ý mình bằng cách đặt các bí danh cho tiêu đề. Có 2 cách: SELECT <Têu đề cột>=<Tên cột> FROM <Tên Table>
  2. 2. Giaùo Trình Heä Quaûn Trò CSDL SQLServer 2000 Trang 47 SELECT <Tên cột> As <Tiêu đề cột> FROM <Tên Table> Ghi chú: Nếu bí danh có sử dụng khoảng trắng thì phải đặt bí danh trong cặp nháy ‘ ‘ VD: SELECT MaKH as 'M Khch Hng', TenKH Tenkhachhang, 'Địa Chỉ KH' =DiaChiKH FROM khachhang 3. Sử dụng Literals Sử dụng Literals để làm cho dữ liệu dễ đọc hơn. Một Literals là một chuỗi được đặt trong ngoặc kép đơn. Thể hiển như một cột khác trong câu truy vấn. VD: SELECT TenKH, DiaChiKH, 'M Khch Hng: ' , MaKH From KhachHang II. BIẾN ĐỔI DỮ LIỆU 1. Hàm toán học Các hàm tóan học cho phép thực hiện xử lý các dữ liệu số cú pháp: SELECT <Tên hàm> (<Các tham số>) VD: SELECT SQRT(9) Hàm Power(X,Y) Round(X,n) Square(X) SQRT(X) Diễn Giải Giá trị của X lũy thừa Y Số X làm tròn n chữ số tính từ dấu thập phân. Bình phương giá trị X Căn bậc 2 của giá trị X 2. Các hàm về chuỗi Thực hiện xử lý dữ liệu chuổi ký tự . Cú pháp: SELECT <Tên hàm>(<Các tham số>) VD: Select Right('ABCDE',3) Hàm ‘Chuỗi 1’ + ‘Chuỗi 2’ Lower(Chuỗi kí tự) Upper(Chuỗi kí tự) LTrim(Chuỗi kí tự) RTrim(Chuỗi kí tự) Left(Chuỗi kí tự, n) Right(Chuỗi kí tự, n) SubString(Chuỗi kí tự, n1, n2) Replace(‘Chuỗi1’,’Chuổi2’,’Chuỗi3’) Diễn Giải Nối 2 Hay nhiều chuổi ký tự Chuyển thành chữ thường Chuyển thành chữ Hoa Trả về dữ liệu không có khảng trắng bên trái Trả về dữ liệu không có khảng trắng bên phải Trả về một chuổi n ký tự tính từ bên trái Trả về một chuổi n ký tự tính từ bên phải Trả về 1 chuổi ký tự bắt đầu từ vị trí n1 có chiều dài n2 kí tự Thay thế tất cả lần xuất hiện Chuỗi2 trong Chuỗi1 bằng Chuỗi3 3. Các hàm ngày tháng Để biến đổi các giá trị kiểu DateTime
  3. 3. Giaùo Trình Heä Quaûn Trò CSDL SQLServer 2000 Trang 48 Cú pháp: SELECT <Tên hàm>(<Các tham số>) VD: SELECT GetDate() Đối với các hàm có sử dụng tham số gọi là DatePart các giá trị của DatePart liệt kê như sau: DatePart DD MM QQ DW YY Giá Trị 1-31 1-12 1-4 1-7(Sun-Sat) 1753-9999 Diễn Giải Ngày trong tháng Tháng trong năm Quý trong năm Thứ trong tuần Năm Các hàm về ngày Hàm Diễn Giải GetDate() DateAdd(Datepart, n, Ngày) DateDiff(DatePart, Ngày1, Ngày 2) DatePart(Datepart, Ngày) Day(Ngày) Month(Ngày) Year(Ngày) Trả về ngày giờ hiện hành Thêm n DateParts vào Ngày Trả Về Số Datepart Giữa 2 Ngày Trà về giá trị DatePart của Ngày Trả về trị thể hiện ngày của Ngày Trả về trị thể hiện tháng của Ngày Trả về trị thể hiện năm của Ngày VD: Select DateAdd(mm,-3,’10/6/2004’) III. CHỌN LỰA CÁC DÒNG KẾT XUẤT Cú pháp: SELECT <DS Các cột> FROM <Tên Table> WHERE <Biểu thức điều kiện> Để xác định các dòng nào cần trích xuất dựa trên dựa trên mệnh đề tìm kiếm WHERE của phát biểu SELECT. Các điều kiện tìm kiếm bao gồm các phép toán so sánh, các phạm vi, các danh sách, so khớp chuỗi, các giá trị không xác định và sự phủ định của các điều kiện này 1. Các phép toán so sánh Phép toán = > < >= <= Diễn giải Bằng Lớn hơn Nhỏ hơn Lớn hơn hoặc bằng Nhỏ hơn hoặc bằng Phép toán <> != !> !< () Diễn giải Không bằng Không bằng Không lớn hơn Không nhỏ hơn Thứ tự ưu tiên
  4. 4. Giaùo Trình Heä Quaûn Trò CSDL SQLServer 2000 VD: Trang 49 Select Masv, Tensv, Hocbong From Sinhvien Where Hocbong >=200000 2. Phạm Vi Trích xuất dữ liệu dựa trên điều kiện là 1 phạm vi các giá trị sử dụng từ khoá BETTWEEN. Cú pháp : SELECT <DS các cột> FROM <TênTable> WHERE <Tên cột> [Not] BetWeen <Giá trị đầu> and <Giá trị cuối> VD: Select Masv, Tensv,Ngaysinh From Sinhvien Where Ngaysinh Between '1/1/1978' and '12/31/1980' 3. Danh Sách Trích xuất dữ liệu dựa trên điều kiện là 1 danh sách các giá trị bằng cách sử dụng từ khoá IN Cú pháp : SELECT <DS các cột> FROM <TênTable> WHERE <Tên cột> [Not] IN(<DS các giá trị>) VD: Select Masv, Hosv,TenSV From Sinhvien Where Masv IN ('SV01','SV03','SV06') 4. Chuỗi ký tự Trích xuất các dòng dữ liệu dựa trên 1 phần của chuổi ký tự ta sử dụng từ khoá LIKE, Có thể sử dụng 4 ký tự thay thế trong biểu thức. % : Đại diện không hay nhiều ký tự - : Một ký tự [] : Một ký tự bên trong phạm vi xác định [^] : Một ký tự không nằm trong phạm vi xác định Cú pháp : SELECT <DS các cột> FROM <TênTable> WHERE <Tên cột> [Not] LIKE ‘Chuỗi ký tự’ VD: Select masv, Hosv,TenSV, DiaChi From sinhvien Where DiaChi Like '%Q3%' VD: Select masv, Hosv,TenSV, DiaChi From sinhvien Where Tensv Like '[DM]%'
  5. 5. Giaùo Trình Heä Quaûn Trò CSDL SQLServer 2000 Trang 50 5. Các giá trị không xác định Một giá trị Nul là giá trị rỗng (không có dữ liệu. Dó đó để xác định các dòng có chứa giá trị Null trong table ta sử dụng các từ khóa IS NULL và IS NOT NULL. Cú pháp: SELECT <DS các cột> FROM <TênTable> WHERE <Tên cột> IS [NOT] NULL VD: Select Makh,Tenkh,Diachikh From Khachhang Where Dienthoaikh IS NULL VD: Select Makh,Tenkh,Diachikh, Dienthoaikh, Emailkh From Khachhang Where EmailKH IS NOT NULL 6. Sử dụng nhiều điều kiện để trích xuất các dòng Chúng ta có thể liên kết nhiều điều kiện tìm kiếm bằng cách sử dụng các tóan tử logic • AND trả về kết quả khi tất cả điều kiện là đúng, • OR trả về kết quả khi bất kỳ điều kiện nào đúng. Cú pháp: SELECT <DS các cột> FROM <TênTable> WHERE <Điều kiện 1> AND | OR <Điều kiện 2> . . . VD: Select * From Sanpham Where Maloai in (1,2,3) and Dongia>100000 7. Giới hạn các thông tin trùng DISTINCT Khi chọn thông tin từ một Table có thể nhận được các dòng thông tin trùng nhau. Để giới hạn thông tin trùng dùng từ khoá DISTINCT nằm trong mệnh đề SELECT Cú pháp: SELECT DISTINCT <DS Các cột> FROM <Tên Table> WHERE <Điều kiện> VD: Select Distinct Masp Select Distinct Masp,sldat From Chitietdh From Chitietdh
  6. 6. Giaùo Trình Heä Quaûn Trò CSDL SQLServer 2000 Trang 51 8. Sắp xếp dữ liệu với mệnh đề ORDER BY Để sắp xếp kết quả truy vấn theo một trật tự nào đó ta sử dụng mệnh đề Order By Cú pháp : SELECT <DS các cột> FROM <TênTable> WHERE <Điều kiện> Order By <DS Các cột> ASC | DESC Asc: Tăng dần Desc: Giảm dần VD: Select Maloai, MaSP, TenSp From SanPham Order By MaSP Desc 9. Các hàm tập hợp Các hàm tập hợp có thể trả về các giá trị tóm tắt đối với tòan bộ một bảng hoặc đối với các nhóm của các dòng trong bảng. Các hàm tập hợp thông thường được sử dụng với các mệnh đề Group By và trong mệnh đề Having Hàm Kết Quả COUNT(*) Trả về số dòng được chọn MAX(Tên cột) Trả về giá trị lớn nhất trong cột MIN(Tên cột) Trả về giá trị nhỏ nhất trong cột AVG(Tên cột) Trả về trị trung bình cộng của các giá trị trong cột SUM(Tên cột) Trả về tổng số các giá trị trong cột VD: Select count(*) From KhachHang VD: Select Max(DonGia) as GiaCaoNhat From SanPham a. Group By và Having Mệnh đề Group By nhóm dữ liệu tổng hợp thỏa mãn điều kiện Where để trả về như dòng đơn. Mệnh đề Having thiết lập các điều kiện để định rõ dòng nào sẽ được trả về bởi mệnh đề Group By Cú pháp: SELECT <DS các cột> FROM <TênTable> WHERE <Điều kiện> [Group By <DS Các cột gom nhóm>] [HAVING <Điều kiện cho Group By>] VD: Select MaKH, Count(*) As SolanDH From Dondathang Group By Makh Having Count(*) >=2
  7. 7. Giaùo Trình Heä Quaûn Trò CSDL SQLServer 2000 Trang 52 b. Compute và Compute By Các mệnh đề Compute và Conpute By sinh ra các dòng dữ liệu tổng hợp và chi tiết mới. • Mênh đề Compute trả về các dòng chi tiết và một dòng tổng chính. • Mệnh đề Compute By trả về các dòng mới của dữ liệu tổng hợp, giống với mệnh đề Group By nhưng trả về các dòng như các nhóm con cùng với các giá trị tổng hợp. Muốn sử dụng Compute By bạn phải sử dụng mệnh đề Group By, trật tự các cột trong Compute By phải giống trật tự trong Order By Cú pháp: SELECT <DS các cột> FROM <TênTable> WHERE <Điều kiện> [COMPUTE <BT Tính toán >] [BY <Tên cột phân nhóm>] VD: Mênh đề Group By Select Maloai, Sum(SLTon) as TongSLTon From SanPham Group By MaLoai VD: Mênh đề Compute Select Maloai, SLTon From SanPham Compute Sum(SLTon) VD: Mênh đề Compute By Select Maloai, SLTon From SanPham Order By Maloai Compute Sum(SLTon) By MaLoai 10. Siêu tập hợp Rollup và Cube Để thêm các dòng tóm tắt bổ sung tham khảo như là các tóan tử Rollup và Cube với mệnh đề Group By Cú pháp: SELECT <DS các cột> FROM <TênTable> WHERE <Điều kiện> [Group By <DS Các cột gom nhóm> ] [With ROLLUP | CUBE] Tóan tử Rollup sinh ra các dòng siêu kết hợp VD: Select Sodh,Masp, Sum(SLDat) as TongSLDat From Chitietdh Where Sodh in('00001','00002','00003') Group By sodh,masp With RoLLup siêu tập hợp, sử dụng các
  8. 8. Giaùo Trình Heä Quaûn Trò CSDL SQLServer 2000 Trang 53 Sinh ra một dòng đối với mỗi đơn hàng cùng với thông tin tổng hợp các dòng với giá trị Null trong MaSP thể hiển tổng số của tất cả các MaSP. Và sinh ra một dòng tổng cộng cho tất cả các đơn đặt hàng Tóan tử Cube sinh ra các dòng siêu kết hợp Giống như tóan tử Rollup tóan tử Cube chẳng những sinh ra các giá trị trung bình và tổng cộng động mà còn trả về các dòng tổng bổ sung. VD: Select Sodh,Masp, Sum(SLDat) as TongSLDat From chitietDH Where Sodh in('00001','00002') Group By Sodh,Masp With Cube IV. TƯƠNG QUAN DỮ LIỆU Cách thực hiện kết nối để trích dữ liệu từ 1 hoặc nhiều bảng. Các kết quả sẽ xuất hiện như một bảng đơn với các cột từ tất cả các bảng được chỉ định trong SELECT Column_List và so khớp với điều kiện tìm kiếm. Khi sử dụng nhiều Table nguồn chúng ta cần chú ý đến mối liên kết giữa các Table nguồn. 1. Khái niệm a. Loại kết nối - JoinType • Inner Join (Liên kết trong bảng A và B) : Khi chọn các thông tin của bảng A hoặc bảng B thì các thông tin ấy bắt buột phải có mặt đồng thời trong cả 2 bảng A,B • Left Join (Liên kết ngoài bên trái của A với B ): Khi chọn thông tin của A: Thông tin ấy mặc nhiên được lấy Khi chọn thông tin của B : Thông tin ấy phải có mặt trong A thì mới lấy được • Right Join: (Liên kết ngoài bên phải của A với B ): Khi chọn thông tin của A: Thông tin ấy phải có mặt trong B thì mới lấy được Khi chọn thông tin của B : Thông tin ấy mặc nhiên được lấy • Full Join (Liên kết ngoài toàn phần): Khi chọn thông tin của A: Thông tin ấy mặc nhiên được lấy Khi chọn thông tin của B : Thông tin ấy mặc nhiên được lấy b. Toán tử kết nối- JoinOperator Trong SQL Server 2000 có toán tử kết nối = 2. Cú pháp kết nối Khi thực hiện kết nối các bảng bạn có thể sử dụng 2 cú pháp: SELECT <Tên Table>.<Tên cột> [, . . .] FROM <DS Các Table> WHERE <Tên Table 1>.<Tên cột> <Toán tử> <Tên Table2>.<Tên cột>[, . .] Hoặc SELECT <Tên Table>.<Tên cột>[, . . .] FROM <Tên Table 1> [Loại kết nối> <Tên Table 2> ON <Tên Table 1>.<Tên cột>=<Tên Table 2>.<Tên cột> [, . . .] WHERE <BT Điều kiện> VD: Liệt kê kết quả học tập sinh viên khoa “TH” thông tin gồm : Masv, Hosv, Tensv, Phai, Ngaysinh, Makhoa, Mamh, Diem SELECT Sinhvien.masv, Sinhvien.hosv, Sinhvien.tensv, Sinhvien.phai, Sinhvien.ngaysinh, Sinhvien.makhoa, Ketqua.mamh, Ketqua.diem; FROM sinhvien , Ketqua WHERE sinhvien.masv=ketqua.masv and Sinhvien.makhoa = "TH" Hoặc
  9. 9. Giaùo Trình Heä Quaûn Trò CSDL SQLServer 2000 Trang 54 SELECT Sinhvien.masv, Sinhvien.hosv, Sinhvien.tensv, Sinhvien.phai, Sinhvien.ngaysinh, Sinhvien.makhoa, Ketqua.mamh, Ketqua.diem; FROM sinhvien INNER JOIN ketqua ON Sinhvien.masv = Ketqua.masv; WHERE Sinhvien.makhoa = "TH" Ghi chú: Tập kết quả của 2 cú pháp này sẽ giống nhau. Tuy nhiên có một sự khác nhau VD: Liệt kê các sản phNm thuộc loại 1 chưa có đặt hàng Cú pháp 1: Select MaSp, TenSP, QuiCach From SanPham Where MaLoai=1 and MaSP N ot In (Select MaSP From ChitietDH) Cú pháp 2: Select MaSp, TenSP, QuiCach From SanPham Left Join ChiTietDH ON SanPham.MaSP=ChiTietDh.MaSP Where MaLoai=1 Nhận xét: • Đối với các câu truy vấn thông thường thì sử dụng cú pháp 1 rõ ràng và dễ hiểu hơn • Đối câu truy vấn liên kết thì cú pháp 2 ngắn gọn hơn. Tuy nhiên nếu câu truy vấn có nhiều bảng thì sẽ phức tạp hơn. • Sử dụng cú pháp nào tùy theo người sử dụng. 3. Làm việc với các truy vấn con Một truy vấn con có thể trả về một cột đơn hoặc một giá trị đơn ở bất kỳ nơi đâu 1 giá trị đơn có thể sử dụng. Và có thể được so sanh bởi các toá tử so sánh. Các từ khoá In và Exist VD : Liệt kê các sản phNm Mã loại là 1 có đặt hàng Cú pháp 1 : Select MaSp, TenSP, QuiCach From SanPham Where MaLoai=1 and MaSP In (Select MaSP From ChitietDH) Cú pháp 2 : Select MaSp, TenSP, QuiCach From SanPham Where Exists (Select * From ChiTietDh Whrere MaSP=SanPham.MaSP and MaLoai=1) 4. Tạo Union Query – Query Hợp Nhất SELECT <DS Các cột> FROM <DS Các Table> [WHERE <Điều kiện>] UNION SELECT <DS Các cột> FROM <DS Các Table> [WHERE <Điều kiện>] UNION . . . . DSVùng chọn phải giống nhau trong các mệnh đề SELECT VD: Lliệt kê ds khách mời dự họp tất niên gồm khách hàng và nhân viên Select TenKH AS TenKM, DiaChiKh As DiaChiKM, DienThoaiKh As DienThoaiKM From KhachHang
  10. 10. Giaùo Trình Heä Quaûn Trò CSDL SQLServer 2000 Trang 55 UN ION Select Trim(HoN V)+” “+ Trim(TenN V) , DiaChiN V, DienThoaiN V From N hanVien 5. SELECT INTO Phát biểu Select InTo cho phép tạo kết quả mới dựa trên kết quả truy vấn. Bảng mới được tạo dựa trên các cột bạn xác định trong danh sách chọn lựa. Cú pháp : Select <DS Các cột> Into <Tên Table> From <DS Các Table> [Where <Điều kiện>] VD: Select * Into TempKhachHang From KhachHang Có 2 loại bảng: Bảng thường trực : Sử dụng Select InTo định nghĩa một bảng và đưa dữ liệu vào trong đó Bảng tạm thời : Các bảng này sẽ nằm trong CSDL TempDb VD: Select * Into #TempKhachHang From KhachHang Ghi chú : N ếu muốn thêm các dòng vào một bảng đã có ta sử dụng IN SERT Hoặc IN SERT IN TO VD: IN SERT TempKhachHang Select * From KhachHang

×