Giáo trình hướng dẫn học SQL sever 2005 - Phần 1 là tài liệu hỗ trợ học tập và nghiên cứu về ngôn ngữ lập trình nói chung và ngôn ngữ SQL nói riêng. Trong nội dung phần 1 sẽ giới thiệu về SQL sever 2005 bao gồm hướng dẫn cài đặt và các thao tác trên nền SQL. Đây là tài liệu thiết thực cho nhu cầu tìm hiểu trong quá trình học tập, sử dụng SQL sever 2005.
Mục lục Mục lục 1 Giới thiệu SQL Server 2005 1.1 Cài đặt SQL Server 2005 Express Edition 1.1.1 Các yêu cầu cho hệ thống 32bit .5 1.1.2 Các bước cài đặt SQL Server 2005 Express Edition .7 1.2 Một số thao tác SQL Server 2005 Express Edition 16 1.2.1 Tạo CSDL .16 1.2.2 Tạo bảng 17 1.2.3 Xóa bảng, xóa CSDL .19 1.2.4 Mở query editor để viết câu lệnh SQL 19 Structured Query Language (SQL) 20 2.1 SQL ngôn ngữ sở liệu quan hệ 20 2.2 Vai trò SQL 20 2.3 Giới thiệu sơ lược Transact SQL (T-SQL) 21 2.3.1 Ngôn ngữ định nghĩa liệu ( Data Definition Language – DDL) 22 2.3.2 Ngôn ngữ điều khiển liệu (Data control language – DCL) 22 2.3.3 Ngôn ngữ thao tác liệu (Data manipulation language – DML) 23 2.3.4 Cú pháp T-SQL .24 2.3.5 2.3.6 Các kiểu liệu .25 Biến (Variables) 26 2.3.7 Hàm (Function) 27 2.3.8 Các toán tử (Operators) 27 2.3.9 Các thành phần điều khiển (Control of flow) 28 2.3.10 Chú thích (Comment) 28 2.3.11 Giá trị NULL 28 Ngôn ngữ thao tác liệu – DML .29 3.1 Câu lệnh SELECT .29 3.1.1 Danh sách chọn câu lệnh SELECT 30 3.1.2 Mệnh đề FROM .34 3.1.3 3.1.4 Mệnh đề WHERE - điều kiện truy vấn liệu 34 Phép hợp (UNION) 38 3.1.5 Phép nối 41 3.1.6 Các loại phép nối 43 3.1.7 Phép nối theo chuẩn SQL-92 .45 3.1.8 Mệnh đề GROUP BY 47 3.1.9 Truy vấn (Subquery) .50 3.2 Thêm, cập nhật xóa liệu 51 3.2.1 Thêm liệu 52 3.2.2 Cập nhật liệu 53 3.2.3 Xóa liệu 54 Ngôn ngữ định nghĩa liệu – DDL 56 4.1 Tạo bảng 56 4.2 Các loại ràng buộc .58 4.2.1 Ràng buộc CHECK 58 4.2.2 Ràng buộc PRIMARY KEY 59 4.2.3 Ràng buộc FOREIGN KEY 60 4.3 Sửa đổi định nghĩa bảng 61 4.4 Xóa bảng .63 4.5 Khung nhìn - VIEW 63 4.6 Thêm, cập nhật, xóa liệu VIEW .65 4.7 Thay đổi định nghĩa khung nhìn 65 4.8 Xóa khung nhìn .66 Thủ tục lưu trữ, hàm trigger 67 5.1 Thủ tục lưu trữ (Stored procedure) .67 5.1.1 Tạo thủ tục lưu trữ 68 5.1.2 Lời gọi thủ tục 69 5.1.3 Biến thủ tục lưu trữ 69 5.1.4 5.1.5 Giá trị trả thủ tục lưu trữ .70 Tham số với giá trị mặc định 71 5.1.6 Sửa đổi thủ tục .72 5.1.7 Xóa thủ tục 72 5.2 Hàm người dùng định nghĩa (User Defined Function-UDF) 72 5.2.1 Hàm vô hướng - Scalar UDF 73 5.2.2 Hàm nội tuyến - Inline UDF 74 5.2.3 5.2.4 Hàm bao gồm nhiều câu lệnh bên – Multi statement UDF 75 Thay đổi hàm 76 5.2.5 Xóa hàm .77 5.3 Trigger 77 5.3.1 Các đặc điểm trigger .77 5.3.2 Các trường hợp sử dụng trigger .77 5.3.3 Khả sau trigger .78 5.3.4 Định nghĩa trigger 78 5.3.5 Kích hoạt trigger dựa thay đổi liệu cột 82 5.3.6 Sử dụng trigger Giao tác (TRANSACTION) 83 5.4 DDL TRIGGER 84 5.5 Enable/ Disable TRIGGER 85 Sao lưu phục hồi liệu (Backup and Restore) 87 6.1 Các lý phải thực Backup 87 6.2 Các loại Backup 87 6.2.1 Full backup Differential backup .87 6.2.2 Transaction log backup 88 6.3 Các thao tác thực trình Backup Restore SQL Server 2005 Express Edition 89 6.3.1 Sao lưu (Backup) 89 6.3.2 Phục hồi (Restore) 91 Các hàm quan trọng T-SQL 94 7.1 Các hàm làm việc với kiểu liệu số 94 7.1.1 Hàm ISNUMERIC .94 7.1.2 7.2 Hàm ROUND 94 Các hàm làm việc với kiểu liệu chuỗi 95 7.2.1 Hàm LEFT .95 7.2.2 Hàm RIGHT 95 7.2.3 7.2.4 Hàm SUBSTRING 95 Hàm LEN .96 7.2.5 Hàm REPLACE 96 7.2.6 Hàm STUFF 96 7.2.7 Hàm LOWER/UPPER 97 7.2.8 Hàm LTRIM/RTRIM 97 7.3 Các hàm làm việc với kiểu liệu Ngày tháng/ Thời gian 97 7.3.1 7.3.2 Hàm GETDATE 97 Hàm DAY/ MONTH/ YEAR 97 7.3.3 Hàm DATEPART 98 7.3.4 Hàm DATENAME 99 7.4 Hàm CAST CONVERTER 99 Kết nối vào SQL Server 2005 từ ngơn ngữ lập trình để xây dựng ứng dụng liên quan đến CSDL 101 8.1 Cấu hình Microsoft SQL Server 2005 101 8.1.1 Cho phép tiếp nhận kết nối từ xa thể SQL Server 102 8.1.2 Kích hoạt dịch vụ SQL Server Browser 102 8.1.3 Tạo ngoại lệ Windows Firewall .103 8.2 Kết nối vào SQL Server ngơn ngữ lập trình 104 8.2.1 C# VB.NET 104 8.2.2 VB 106 Tài liệu tham khảo 108 Giới thiệu SQL Server 2005 SQL Server 2005 hệ thống quản lý sở liệu (Relational Database Management System (RDBMS) ) sử dụng Transact-SQL để trao đổi liệu Client computer SQL Server computer Một RDBMS bao gồm databases, database engine ứng dụng dùng để quản lý liệu phận khác RDBMS SQL Server 2005 tối ưu để chạy môi trường sở liệu lớn (Very Large Database Environment) lên đến Tera-Byte phục vụ lúc cho hàng ngàn user SQL Server 2005 kết hợp "ăn ý" với server khác Microsoft Internet Information Server (IIS), E-Commerce Server, Proxy Server Các phiên SQL Server 2005: Enterprise: Hỗ trợ khơng giới hạn số lượng CPU 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ợ) hệ thống 64bit Standard: Tương tự Enterprise hỗ trợ CPU Ngoài phiên khơng trang bị số tính cao cấp khác Workgroup: Tương tự Standard hỗ trợ CPU tối đa 3GB RAM Express: Bản miễn phí, hỗ trợ tối đa 1CPU, 1GB RAM kích thước Database giới hạn 4GB Chi tiết tham khảo địa chỉ: http://www.microsoft.com/sql/prodinfo/features/compare-features.mspx 1.1 Cài đặt SQL Server 2005 Express Edition 1.1.1 Các yêu cầu cho hệ thống 32bit Express Edition System Requirements 32-bit Processor PIII 600MHZ cao Tốt nhất: 1GHZ cao Framework Operating System Microsoft NET Framework 2.0 • Windows XP with Service Pack cao • Microsoft Windows 2000 Professional SP4 Express Edition System Requirements 32-bit Memory Hard Disk • Microsoft Windows 2000 Server Service Pack cao • Windows Server 2003 Standard, Enterprise, or Datacenter editions • Windows Server 2003 Web Edition SP1 • Windows Small Business Server 2003 with Service Pack cao • Vista Home Basic phiên cao (SQL Express SP1 and SQL Express • Windows XP Embedded SP2 Feature Pack 2007 • Windows Embedded for Point of Service SP2 with Service Pack cao Advanced SP2) 192 MB RAM cao hơn; tốt nhất: 512 MB cao • 350 MB ổ cứng cho cài đặt • 425 MB ổ cứng cho cài đặt SQL Server Books Online, SQL Server Mobile Books Online, sample databases Drive CD-ROM or DVD-ROM drive Display Super VGA (1,024x768) cao Other Devices Mouse, Keyboard Other Microsoft Internet Explorer 6.0 SP1 cao Requirements Chi tiết yêu cầu hệ thống cho phiên Microsoft SQL Server 2005 tham khảo địa chỉ: http://www.microsoft.com/sql/prodinfo/sysreqs/default.mspx Download cài đặt Microsoft NET Framework 2.0: Để cài đặt thành công SQL Server Express Edition hay phiên SQL Server 2005 khác, Microsoft NET Framework 2.0 phải cài đặt trước Gỡ bỏ phiên Beta, CTP Tech Preview SQL Server 2005, Visual Studio 2005 Microsoft NET Framework 2.0 Download cài đặt Cài đặt SQL Server 2005 Express Edition: Microsoft SQL Server 2005 Express Edition phiên miễn phí, dễ sử dụng “nhẹ” Microsoft SQL Server 2005 Microsoft SQL Server 2005 Express Edition tích hợp Visual Studio 2005 tạo dễ dàng việc phát triển ứng dụng hướng CSDL SQL Server 2005 Express Edition tự sử dụng ứng dụng thương mại dễ dàng cập nhật lên phiên cao cần thiết Cài đặt SQL Server Management Studio Express: SQL Server Management Studio Express cung cấp giao diện để người dùng dễ dàng tương tác với thành phần Microsoft SQL Server 2005 Express Edition Trước cài đặt SQL Server Management Studio Express, MSXML 6.0 phải cài đặt Download địa chỉ: http://www.microsoft.com/express/sql/download/default.aspx 1.1.2 Các bước cài đặt SQL Server 2005 Express Edition Double click vào file cài đặt Microsoft SQL Server Express Edition Click Next: 10 3.1.5 Phép nối Khi cần thực yêu cầu truy vấn liệu từ hai hay nhiều bảng, ta phải sử dụng đến phép nối Một câu lệnh nối kết hợp dòng liệu bảng khác lại theo nhiều điều kiện hiển thị chúng kết truy vấn Ví dụ: Để tìm khách hàng có mã đặt hàng ngày câu truy vấn sau: select c.CUSTOMERNAME, o.ORDERDATE from customers c, orders o where c.customerid = o.customerid and c.customerid = Giải thích câu truy vấn: Bảng Customers Bảng Order Trước tiên vào bảng Customers tìm dịng có có mã khách hàng Tìm kiếm bảng Orders dịng có giá trị trường CUSTOMERID cho dòng vào kết truy vấn Như để thực yêu cầu truy vấn, phải thực phép kết nối hai bảng Customers Orders với điều kiện kết nối CUSTOMERID bảng CUSTOMERS với CUSTOMERID bảng ORDERS Phép nối sở để thực yêu cầu truy vấn liệu liên quan đến nhiều bảng Một câu lệnh nối thực lấy dòng liệu bảng tham gia truy vấn, so sánh giá trị dòng nhiều cột định điều kiện nối kết hợp dòng thoả mãn điều kiện thành dòng kết truy vấn Để thực phép nối, cần phải xác định yếu tố sau: 41 Những cột cần hiển thị kết truy vấn Những bảng có tham gia vào truy vấn Điều kiện để thực phép nối bảng liệu Trong yếu tố kể trên, việc xác định xác điều kiện để thực phép nối bảng đóng vai trò quan trọng Trong đa số trường hợp, điều kiện phép nối xác định nhờ vào mối quan hệ bảng cần phải truy xuất liệu Thơng thường, điều kiện khố khố ngồi hai bảng có mối quan hệ với Như vậy, để đưa câu lệnh nối thực xác yêu cầu truy vấn liệu đòi hỏi phải hiểu mối quan hệ ý nghĩa chúng bảng liệu Một câu lệnh nối bắt đầu với từ khóa SELECT Các cột định tên sau từ khoá SELECT cột hiển thị kết truy vấn Việc sử dụng tên cột danh sách chọn là: Tên số cột bảng có tham gia vào truy vấn Nếu tên cột bảng trùng tên tên cột phải viết dạng tên_bảng.tên_cột Dấu (*) sử dụng danh sách chọn cần hiển thị tất cột bảng tham gia truy vấn Trong trường hợp cần hiển thị tất cột bảng đó, ta sử dụng cách viết: tên_bảng.* Mệnh đề FROM phép nối Sau mệnh đề FROM câu lệnh nối danh sách tên bảng (hay khung nhìn) tham gia vào truy vấn Nếu ta sử dụng dấu * danh sách chọn thứ tự bảng liệt kê sau FROM ảnh hưởng đến thứ tự cột hiển thị kết truy vấn Mệnh đề WHERE phép nối Khi hai hay nhiều bảng nối với nhau, ta phải định điều kiện để thực phép nối sau mệnh đề WHERE Điều kiện nối biểu diễn dạng biểu thức logic so sánh giá trị liệu cột bảng tham gia truy vấn Các toán tử so sánh sử dụng để xác định điều kiện nối Phép toán Ý nghĩa = Bằng > Lớn >= Lớn < Nhỏ 42 Không lớn !< Không nhỏ 3.1.6 Các loại phép nối Phép nối bằng: Một phép nối (equi-join) phép nối giá trị cột sử dụng để nối so sánh với dựa tiêu chuẩn tất cột bảng tham gia nối đưa kết Một dạng đặc biệt phép nối sử dụng nhiều phép nối tự nhiên (naturaljoin) Trong phép nối tự nhiên, điều kiện nối hai bảng điều kiện khố ngồi khố hai bảng; Và danh sách chọn câu lệnh giữ lại cột hai cột tham gia vào điều kiện phép nối Ví dụ phép kết nối bằng: select * from Customers c, Orders o where c.customerid = o.customerid Ví dụ phép kết nối tự nhiên: select c.CUSTOMERID, c.CUSTOMERNAME, c.BIRTHDAY, c.GENDER, c.ADDRESS, o.ORDERDATE from Customers c, Orders o where c.customerid = o.customerid viết gọn: select c.*, o.ORDERDATE from Customers c, Orders o where c.customerid = o.customerid Trong phép kết nối bằng, trường CUSTOMERID xuất hai lần Sự dư thừa loại bỏ cách sử dụng phép kết nối tự nhiên việc định rõ cột cột cần truy xuất 43 Trong câu lệnh nối, điều kiện phép nối định mệnh đề WHERE cịn định điều kiện tìm kiếm liệu khác (điều kiện chọn) Thông thường, điều kiện kết hợp với điều kiện nối thơng qua tốn tử AND Ví dụ: select c.*, o.ORDERDATE from Customers c, Orders o where c.customerid = o.customerid and c.customerid = Phép tự nối Phép tự nối phép nối mà điều kiện nối định liên quan đến cột bảng Trong trường hợp này, có xuất tên bảng nhiều lần mệnh đề FROM bảng cần phải đặt bí danh Ví dụ: Giả sử có u cầu tìm khách hàng có nhiều đơn đặt hàng ngày select c1.CUSTOMERID, c1.CUSTOMERNAME from customers c1, customers c2, orders o1, orders o2 where c1.customerid = o1.customerid and c2.customerid = o2.customerid and c1.customerid = c2.customerid and o1.orderdate = o2.orderdate and o1.orderid o2.orderid Câu truy vấn giải thích sau: Lần lượt lấy mã khách hàng, mã hóa đơn ngày đặt hàng từ bảng c1, o1 đem so sánh với mã khách hàng, mã hóa đơn ngày đặt hàng từ bảng c2, o2 Nếu việc so sánh hai tập hợp thỏa điều kiện sau đây: mã khách hàng trùng nhau, ngày đặt hàng trùng có mã hóa đơn khác thông tin khách hàng cho vào kết qua truy vấn Phép nối Trong phép nối đề cập trên, dịng có giá trị cột định thoả mãn điều kiện kết nối hiển thị kết truy vấn, gọi phép nối (inner join) Theo nghĩa đó, phép nối loại bỏ thơng tin chứa dịng khơng thoả mãn điều kiện nối Tuy nhiên, ta cần giữ lại thông tin cách cho phép dịng khơng thoả mãn điều kiện nối có mặt kết phép nối Để làm điều này, ta sử dụng phép nối ngồi SQL cung cấp loại phép nối sau đây: 44 Phép nối trái (ký hiệu: *=): Phép nối hiển thị kết truy vấn tất dòng liệu bảng nằm bên trái điều kiện nối cho dù dịng khơng thoả mãn điều kiện phép nối Phép nối phải (ký hiệu: =*): Phép nối hiển thị kết truy vấn tất dòng liệu bảng nằm bên phải điều kiện nối cho dù dòng không thoả điều kiện phép nối Tuy nhiên SQL Server 2005 Express Edition không hỗ trợ trực tiếp phép nối *= =* Mặt khác phiên SQL Server tới phép nối hồn tồn khơng hỗ trợ Do Microsoft khuyến cáo người sử dụng dùng phép nối LEFT JOIN, RIGHT JOIN Các phép nối nói rõ phần 3.1.7 Phép nối theo chuẩn SQL-92 Chuẩn SQL2 (SQL-92) đưa cách khác để biểu diễn cho phép nối, cách biểu diễn này, điều kiện phép nối không định mệnh đề WHERE mà định mệnh đề FROM câu lệnh Cách sử dụng phép nối cho phép ta biểu diễn phép nối điều kiện nối rõ ràng, đặc biệt trường hợp phép nối thực ba bảng trở lên Phép nối Điều kiện để thực phép nối định mệnh đề FROM theo cú pháp sau: tên_bảng_1 [INNER] JOIN tên_bảng_2 ON điều_kiện_nối Ví dụ: Phép nối ngồi SQL2 cung cấp phép nối sau đây: Phép nối trái (LEFT OUTER JOIN) Phép nối phải (RIGHT OUTER JOIN) Phép nối đầy đủ (FULL OUTER JOIN) Cũng tương tự phép nối trong, điều kiện phép nối định mệnh đề FROM theo cú pháp: tên_bảng_1 LEFT|RIGHT|FULL [OUTER] JOIN tên_bảng_2 ON điều_kiện_nối Ví dụ: Để tìm khách hàng có đặt hàng thay sử dụng câu truy vấn sau: select * customers c, orders o where c.customerid = o.orderid 45 Ta sử dụng câu truy vấn sau: select * from customers c inner join orders o on c.customerid = o.customerid Nếu phép nối trái hiển thị kết truy vấn dịng liệu khơng thoả điều kiện nối bảng bên trái phép nối phép nối ngồi đầy đủ hiển thị kết truy vấn dịng liệu khơng thoả điều kiện nối hai bảng tham gia vào phép nối Ví dụ: Giả sử có CSDL sau: Thực phép nối trái, nối phải nối đầy đủ cho kết sau: Phép nối trái: select * from faculty f left join class c on f.facultyid = c.facultyid Phép nối phải: select * from faculty f right join class c on f.facultyid = c.facultyid Phép nối đầy đủ: select * from faculty f full join class c 46 on f.facultyid = c.facultyid Một đặc điểm bật SQL2 cho phép biểu diễn phép nối nhiều bảng liệu cách rõ ràng Thứ tự thực phép nối bảng xác định theo nghĩa kết phép nối sử dụng phép nối khác Ví dụ: Liệt kê tên mặt hàng có đơn đạt hàng có mã select i.ITEMNAME, o.ORDERDATE from (orders o inner join orderdetail od on o.orderid = od.orderid) inner join items i on od.itemid = i.itemid where o.orderid = 3.1.8 Mệnh đề GROUP BY Ngoài khả thực yêu cầu truy vấn liệu thông thường (chiếu, chọn, nối,…) đề cập phần trước, câu lệnh SELECT cho phép thực thao tác truy vấn tính tốn thống kê liệu Mệnh đề GROUP BY sử dụng câu lệnh SELECT nhằm phân hoạch dòng liệu bảng thành nhóm liệu, nhóm liệu thực tính tốn giá trị thống kê tính tổng, tính giá trị trung bình, Các hàm gộp (aggregate functions) sử dụng để tính giá trị thống kê cho tồn bảng nhóm liệu Chúng sử dụng cột danh sách chọn câu lệnh SELECT xuất mệnh đề HAVING, không phép xuất mệnh đề WHERE SQL cung cấp hàm gộp đây: Hàm gộp Chức SUM([ALL| DISTINCT] biểu_thức) Tính tổng giá trị AVG([ALL| DISTINCT] biểu_thức) Tính trung bình giá trị COUNT([ALL|DISTINCT] biểu_thức) Đếm số giá trị biểu thức 47 COUNT(*) Đếm số dịng chọn MAX(biểu_thức) Tính giá trị lớn MIN(biểu_thức) Tính giá trị nhỏ Hàm SUM AVG làm việc với biểu thức số Hàm SUM, AVG, COUNT, MIN MAX bỏ qua giá trị NULL tính tốn Hàm COUNT(*) khơng bỏ qua giá trị NULL Mặc định, hàm gộp thực tính tốn thống kê tồn liệu Trong trường hợp cần loại bỏ bớt giá trị trùng (chỉ giữ lại giá trị), ta định thêm từ khoá DISTINCT trước biểu thức đối số hàm Thống kê toàn liệu Khi cần tính tốn giá trị thống kê tồn liệu, ta sử dụng hàm gộp danh sách chọn câu lệnh SELECT Trong trường hợp này, danh sách chọn không sử dụng tên cột hay biểu thức hàm gộp Ví dụ: Tính tuổi trung bình, tuổi nhỏ lớn khách hàng select min(year(getdate())-year(BIRTHDAY)) as MINAGE, max(year(getdate())-year(BIRTHDAY)) as MAXAGE, avg(year(getdate())-year(BIRTHDAY)) as AVGAGE from customers Thống kê nhóm Trong trường hợp cần thực tính tốn giá trị thống kê nhóm liệu, ta sử dụng mệnh đề GROUP BY để phân hoạch liệu vào nhóm Các hàm gộp sử dụng thực thao tác tính tốn nhóm cho biết giá trị thống kê theo nhóm liệu Ví dụ: Câu truy vấn sau cho biết số tổng số tiển khách hàng phải trả cho tất lần đặt hàng select c.CUSTOMERID, c.CUSTOMERNAME, convert(varchar(20),cast(SUM(i.UNITPRICE*od.QUANTITY) as money),1) as SUMTOTAL from customers c inner join orders o on o.customerid = c.customerid inner join orderdetail od on o.orderid = od.orderid inner join items i on i.itemid = od.itemid group by c.customerid, c.customername 48 Nếu muốn số tiền khách hàng phải trả cho đơn đặt hàng, cần thêm trường ORDERID vào mệnh đề group by select c.CUSTOMERID, c.CUSTOMERNAME, convert(varchar(20),cast(SUM(i.UNITPRICE*od.QUANTITY)as money),1) as SUMTOTAL from customers c inner join orders o on o.customerid = c.customerid inner join orderdetail od on o.orderid = od.orderid inner join items i on i.itemid = od.itemid group by c.customerid, c.customername, o.orderid Lưu ý: Trong trường hợp danh sách chọn câu lệnh SELECT có hàm gộp biểu thức khơng phải hàm gộp biểu thức phải có mặt đầy đủ mệnh đề GROUP BY, không câu lệnh không hợp lệ Mệnh đề HAVING định điều kiện hàm gộp Mệnh đề HAVING sử dụng nhằm định điều kiện giá trị thống kê sản sinh từ hàm gộp tương tự cách thức mệnh đề WHERE thiết lập điều kiện cho câu lệnh SELECT Mệnh đề HAVING thường khơng thực có nghĩa không sử dụng kết hợp với mệnh đề GROUP BY Một điểm khác biệt HAVING WHERE điều kiện WHERE khơng có hàm gộp HAVING lại cho phép sử dụng hàm gộp điều kiện Ví dụ: Tìm khách hàng có tổng số tiền phải toán cho tất lần đặt hàng lớn 100 triệu select c.CUSTOMERID, c.CUSTOMERNAME, convert(varchar(20),cast(SUM(i.UNITPRICE*od.QUANTITY)as money),1) as SUMTOTAL from customers c inner join orders o on o.customerid = c.customerid inner join orderdetail od on o.orderid = od.orderid inner join items i on i.itemid = od.itemid group by c.customerid, c.customername having sum(i.UNITPRICE*od.QUANTITY) > 100000000 49 3.1.9 Truy vấn (Subquery) Truy vấn câu lệnh SELECT lồng vào bên câu lệnh SELECT, INSERT, UPDATE, DELETE bên truy vấn khác Loại truy vấn sử dụng để biểu diễn cho truy vấn điều kiện truy vấn liệu cần phải sử dụng đến kết truy vấn khác Cú pháp truy vấn sau: (SELECT [ALL | DISTINCT] danh_sách_chọn FROM danh_sách_bảng [WHERE điều_kiện] [GROUP BY danh_sách_cột] [HAVING điều_kiện]) Khi sử dụng truy vấn cần lưu ý số quy tắc sau: Một truy vấn phải viết cặp dấu ngoặc Trong hầu hết trường hợp, truy vấn thường phải có kết cột (tức có cột danh sách chọn) Mệnh đề COMPUTE ORDER BY không phép sử dụng truy vấn Các tên cột xuất truy vấn cột bảng truy vấn Một truy vấn thường sử dụng làm điều kiện mệnh đề WHERE HAVING truy vấn khác Nếu truy vấn trả giá trị, sử dụng thành phần bên biểu thức (chẳng hạn xuất phép so sánh bằng) Phép so sánh với kết truy vấn Kết truy vấn sử dụng đề thực phép so sánh số học với biểu thức truy vấn cha Trong trường hợp này, truy vấn sử dụng dạng: WHERE biểu_thức phép_toán_số_học [ANY|ALL] (truy_vấn_con) Trong phép tốn số học sử dụng bao gồm: =, , >, =,