Từ table quản lý nhân viên: hãy đưa ra các bộ phận phòng ban trong công ty Select Distinct Bo_phan From quan_ly_nv; kết quả:... Từ table quản lý nhân viên: hãy cho biết nhân viên làm vi
Trang 1BÀI BÁO CÁO TÌM HIỂU SQL NHÓM 2 Phụ lục:
Select distinct 3
♣ The SELECT DISTINCT : 3
♣ SELECT COUNT(DISTINCT) 7
♣ SELECT Count(*) AS 9
SQL WHERE Clause: 11
♣ Where Clause: 11
♣ AND, OR, NOT operators: 13
♣ IN operator 13
♣ BETWEEN Operator 20
Aliases: 24
JOINS: 27
♣ INNER JOIN Keyword 27
♣ LEFT JOIN Keyword 37
♣ RIGHT JOIN Keyword: 45
♣ FULL OUTER JOIN Keyword 51
♣ SELF JOIN 54
ORDER BY 61
SQL UNION 65
GROUP BY 74
SQL HAVING 78
SQL EXISTS 82
SQL ANY và ALL 84
SQL INSERT INTO SELECT 87
SQL COMMENTS 91
SQL NULL FUNCTIONS 91
UPDATE Statement 93
DELETE Statement 97
MIN() and MAX() Functions 102
♣ MIN FUNCTIONS: 102
♣ MAX FUNCTIONS: 104
Trang 2COUNT(), AVG() and SUM() Functions 106
♣ COUNT FUNCTIONS: 106
♣ AVG FUNCTIONS: 108
♣ SUM FUNCTIONS: 110
SQL LIKE Operator 112
INSERT INTO 116
SELECT TOP 120
Trang 3Select distinct
♣ The SELECT DISTINCT :
Đ/n: Câu lệnh The SELECT DISTINCT được sử dụng để trả về chỉ những giá trị khác
nhau.(trả về những giá trị duy nhất, không bị trùng )
1 Từ table quản lý nhân viên: hãy đưa ra các bộ phận phòng ban trong công ty
Select Distinct Bo_phan
From quan_ly_nv;
kết quả:
Trang 42 Từ table quản lý nhân viên: hãy cho biết nhân viên làm việc trong công ty đến
từ các tỉnh nào
Select Distinct Que_Quan
From quan_ly_nv;
kết quả
b SELECT DISTINCT + ORDER BY
SELECT DISTINCT column1, column2,
FROM table_name;
ORDER BY column name DESC/ASC
Example 1: Từ table Customers hãy cho biết khách hàng đến từ những quốc gia nào? Hãy sắp xếp các quốc gia theo thứ tự tăng dần.
Table Customers:
SELECT DISTINCT Country FROM Customers
ORDER BY Country ASC;
Trang 6c SELECT DISTINCT +WHERE
SELECT DISTINCT column1, column2,
d SELECT DISTINCT + WHERE + ORDER BY
SELECT DISTINCT column1, column2,
FROM table_name;
WHERE condition
ORDER BY column name
Example: Từ table Customers hãy cho biết khách hàng đến từ những quốc gia nào trừ những quốc gia bắt đầu bằng chữ “A”? Hãy sắp xếp các quốc gia theo thứ tự tăng dần.
Table Customers:
Trang 7SELECT DISTINCT Country
FROM Customers
WHERE Country NOT LIKE 'A%'
ORDER BY Country ASC;
Trang 8Example 1: Từ table quản lý nhân viên: hãy cho biết trong công ty có bao nhiêu phòng ban.
Select COUNT(Distinct Bo_phan)
From quan_ly_nv;
Kết quả:
Example 2: Từ table quản lý nhân viên: hãy cho biết nhân viên làm việc trong công
ty đến từ bao nhiêu tỉnh thành
Trang 9Select COUNT(Distinct Que_Quan)
From quan_ly_nv;
Kết quả:
b SELECT COUNT (DISTINCT ) + WHERE
Example: Từ table quan_ly_kh hãy cho biết có bao nhiêu nhân viên đảm nhận khách hàng không đến từ Đà Nẵng
Select COUNT (Distinct NV_damnhan)
Trang 10SELECT Count(*) AS Name
FROM (SELECT DISTINCT column name FROM Table name);
Example: Từ table customer hãy đếm xem khách hàng đến từ bao nhiêu nước khác nhau và đặt tên tạm thời cho kết quả là DistinctCountries
SELECT Count(*) AS DistinctCountries
FROM (SELECT DISTINCT Country FROM Customers)
Trang 11SELECT Count(*) AS Distinctproduct
FROM (SELECT DISTINCT productName FROM Products);
Kết quả:
SQL WHERE Clause:
♣ Where Clause:
Đ/n: Mệnh đề Where được dùng để lọc các record Chỉ xuất ra những record đáp ứng được
yêu cầu (điều kiện) cụ thể
Syntax:
SELECT column1, column2,
FROM table_name
WHERE condition;
a Mệnh đề WHERE trong trường hợp thông thường
Example: Từ table quan_ly_nv hãy xuất ra thông tin những nhân viên thuộc bộ phận kinh doanh
Trang 12Select *From quan_ly_nv
Where Bo_phan = 'Kinh doanh';
Kết quả:
b Mệnh đề WHERE được sử dụng tương đương với INNER JOIN
SELECT table1.column_name, table2.column_name,…
FROM Table1, Table2
WHERE Table1.column_name=Table2.comlumn_name and condition(s);
Example: Từ Table SINHVIEN và Table KHOA, cho biết danh sách sinh viên Nam khoa 'Cong Nghe Thong Tin' sắp xếp tăng dần theo tên
Table SINHVIEN:
Trang 13Table KHOA:
SELECT HOSV,TENSV,MASV,NGAYSINH,PHAI,SINHVIEN.MAKHOA
FROM SINHVIEN,KHOA
WHERE SINHVIEN.MAKHOA =KHOA.MAKHOA and TENKHOA ='Cong Nghe Thong Tin' and PHAI ='Nam'
ORDER BY TENSV;
Kết quả:
♣ AND, OR, NOT operators:
And, or,not là các toán tử được kết hợp trong mệnh đề Where
AND: A and B (xuất record với điều kiện là cả A và B đều đúng)
Syntax:
SELECT column1, column2,
FROM table_name
WHERE condition1 AND condition2 AND condition3 ;
OR: A or B (xuất record với điều kiện A đúng hoặc B đúng)
Syntax:
SELECT column1, column2,
FROM table_name
WHERE condition1 OR condition2 OR condition3 ;
NOT: Not condition (xuất record với điều kiện đó không đúng)
Syntax:
Trang 14SELECT column1, column2,…
FROM table_name
WHERE column_name IN (value1, value2, );
Example: and , or, not, in
1 Từ table quan_ly_nv hãy xuất ra những nhân viên thuộc phòng kinh doanh và đến từ Đà Nẵng
Select *From quan_ly_nv
Where Bo_phan = ‘Kinh doanh’ And Que_Quan = 'Đà Nẵng';
Kết quả:
2 Từ table quan_ly_nv hãy xuất ra những nhân viên không đến từ Đà Nẵng
Trang 15Select *From quan_ly_nv
Where Not Que_Quan = 'Đà Nẵng';
Kết quả:
3 Từ table quan_ly_nv hãy xuất ra những nhân viên thuộc phòng nhân sự hoặc nhân viên đến từ Đà Nẵng
Trang 16Select *From quan_ly_nv
Where Bo_phan = ‘Nhân sự’ Or Que_Quan = 'Đà Nẵng';
Kết quả:
4 Từ table quan_ly_kh hãy xuất ra những khách hàng không đến từ Đà Nẵng.
Select KH_id, Ten_KH, Email, Dia_chi
From quan_ly_kh
Where Dia_chi Not Like '%Đà Nẵng';
Trang 17Kết quả:
5 Từ table customer hãy xuất ra những khách hàng có Country='Germany' và
có City='Berlin'
SELECT * FROM Customers
WHERE Country='Germany' AND City='Berlin';
Kết quả:
Trang 186 Từ table customer hãy xuất ra những khách hàng có Country='Germany' và
có City='Berlin' hoặc City='München'
SELECT * FROM Customers
WHERE Country='Germany' AND (City='Berlin' OR City='München');
Kết quả:
7 Từ table customer hãy xuất ra những khách hàng có Country='Germany' hoặc country = 'France' hoặc = 'UK'
Trang 19SELECT * FROM Customers
WHERE Country IN ('Germany', 'France', 'UK');
Kết quả:
8 Từ table customer hãy xuất ra những khách hàng có City=' London ' hoặc có City='Berlin' hoặc City=' Paris '
Trang 20SELECT * FROM Customers
WHERE City IN ('Berlin', 'London', 'Paris');
Kết quả:
♣ BETWEEN Operator
Đ/n: Chọn ra những giá trị nằm trong 1 khoảng nhất định, từ giá trị nhỏ nhất đến giá trị
lớn nhất được chỉ định Các giá trị có thể ở dạng số, văn bản, ngày tháng
Trang 211 Từ table products hãy xuất ra thông tin những sản phẩm có giá từ 10 đến 20.
SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20;
Kết quả:
Trang 222 Từ table products hãy xuất ra thông tin những sản phẩm có giá từ 30 đến 50
SELECT * FROM Products
WHERE Price BETWEEN 30 AND 50;
Trang 23Kết quả:
3 Từ table products hãy xuất ra thông tin những sản phẩm có giá nhỏ hơn 10 và lớn 20.
SELECT * FROM Products
WHERE Price NOT BETWEEN 10 AND 20;
Trang 25SELECT CustomerID as ID, CustomerName AS CustomerFROM Customers;
Kết quả:
Trang 262 Tong table Customer hãy xuất ra cột CustomerName và các cột Address + PostalCode + City + Country lấy tên là Address
Trang 27♣ INNER JOIN Keyword
Đ/n: Inner Join là từ khóa được dùng để chọn ra các record nằm trong vùng giao của 2
table
Syntax:
SELECT column_name(s)
FROM table1
INNER JOIN table2 ON table1.column_name = table2.column_name;
a INNER JOIN từ 2 tbale
SELECT column_name(s)
FROM table1
INNER JOIN table2 ON table1.column_name = table2.column_name;
Example 1: Từ table quan_ly_nv và quan_ly_kh hay lay ra danh sách khách hàng và danh sách nhân viên đảm nhận chăm sóc kèm theo số điện thoại liên hệ của 2 bên Table quan_ly_nv
Trang 29Table Customer
Table Order
Trang 30SELECT Orders.OrderID, Orders.OrderDate, Customers.CustomerName
INNER JOIN table2 ON table1.column_name = table2.column_name
INNER JOIN table3 ON table1.column_name = table2.column_name;
Example 1: Từ table Customers, table Orders và table Shippers hãy lấy ra OderID, CustomerName và ShipperName tương ứng với từng mãi OrderID
Trang 31Table Customer
Table Order
Trang 32Table Shippers
SELECT Orders.OrderID, Customers.CustomerName, Shippers.ShipperNameFROM ((Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID)
INNER JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID);
Kết quả:
Example 2: Từ table BAC_SI, BENH_NHAN, BENH_AN hãy xuất ra thông tin bệnh nhân gồm: TenBenhNhan, NgayNhapVien, TenBacsi
Trang 34c INNER JOIN kết hợp với WHERE.
INNER JOIN KHOA
ON SINHVIEN.MAKHOA = KHOA.MAKHOA
WHERE TENKHOA ='Cong Nghe Thong Tin' AND PHAI ='Nam';
Kết quả:
d INNER JOIN kết hợp ORDER BY
Trang 35INNER JOIN KHOA
ON SINHVIEN.MAKHOA = KHOA.MAKHOA
ORDER BY TENKHOA;
Kết quả:
Trang 36e INNER JOIN kết hợp WHERE và ORDER BY
INNER JOIN KHOA
ON SINHVIEN.MAKHOA = KHOA.MAKHOA
WHERE TENKHOA ='Cong Nghe Thong Tin' AND PHAI ='Nam'
ORDER BY TENSV;
Kết quả:
Trang 37♣ LEFT JOIN Keyword
Đ/n: Left Join là từ khóa cho phép chọn những record từ table bên trái (table 1) và các
record là giao của table 1 và 2
Table Customers
Trang 392 Từ table Customers, table Shippers và table Orders hãy lấy ra danh sách tên khách hàng (CustomerName), tên Shipper, OrderID và sắp xếp theo thứ tự tăng dần của tên khách hàng
Table Customers
Trang 40Table Shippers
Table Orders
SELECT Customers.CustomerName, Orders.OrderID, Shippers.ShipperNameFROM Customers
LEFT JOIN Orders ON Customers.CustomerID=Orders.CustomerID
LEFT JOIN Shippers ON Shippers.ShipperID = Orders.ShipperID
ORDER BY Customers.CustomerName;
Trang 41Kết quả:
3 Từ table SINHVIEN và table MUONSACH hãy đưa ra danh sách tên sinh viên và những sinh viên nào có mượn sách, số tiền bao nhiêu và mượn vào ngày nào.
Table SINHVIEN
Table MUONSACH
SELECT ID, TEN, SOTIEN, NGAY
FROM SINHVIEN
Trang 42LEFT JOIN MUONSACH ON SINHVIEN.ID = MUONSACH.SINHVIEN_ID;
Trang 43Table OrderDetails
Table Products
Trang 44SELECT Customers.CustomerName, Products.ProductName, Products.PriceFROM Customers
LEFT JOIN Orders ON Customers.CustomerID=Orders.CustomerID
LEFT JOIN OrderDetails ON Orders.OrderID = OrderDetails.OrderIDLEFT JOIN Products ON OrderDetails.ProductID = Products.ProductIDORDER BY Customers.CustomerName;
Kết quả:
Trang 45♣ RIGHT JOIN Keyword:
Đ/n: Right join là từ khóa cho phép xuất ra những record từ table bên phải (table 2) và các
record là giao của table 1 và 2
Trang 47Table Orders
Table Employees
SELECT Orders.OrderID, Employees.LastName, Employees.FirstName
Trang 49SELECT ID, NAME, AMOUNT, DATE
Trang 50SELECT COMPANY.COMPANY_ID, COMPANY.COMPANY_NAME,
COMPANY.COMPANY_CITY, FOODS.COMPANY_ID, FOODS.ITEM_NAMEFROM COMPANY
RIGHT JOIN FOODS
ON COMPANY.COMPANY_ID = FOODS.COMPANY_ID;
Kết quả:
Trang 51♣ FULL OUTER JOIN Keyword
Đ/n: Full outer join là từ khóa cho phép xuất ra tất cả các record là kết hợp (giao) của 2
table hay bên trái của table 1 hoặc bên phải của table 2
Trang 52SELECT ID, NAME, AMOUNT, DATE
Trang 561 Lấy tên khách hàng cùng thành phố nhưng khác CustomerID
Trang 57SELECT A.CustomerName AS CustomerName1, B.CustomerName AS CustomerName2, A.CityFROM Customers A, Customers B
WHERE A.CustomerID <> B.CustomerID
AND A.City = B.City
ORDER BY A.City;
Kết quả:
Trang 582 Lấy những khách hàng đến cùng từ 1 thành phố của 1 quốc gia Mexico trong table ‘Customers’
SELECT A.CustomerName AS CustomerName1, B.CustomerName AS
CustomerName2, A.City
FROM Customers A, Customers B
WHERE A.CustomerID <> B.CustomerID
AND A.City = B.City
AND A.Country = 'Mexico'
ORDER BY A.City;
Kết quả:
3 Lấy những khách hàng đến từ cùng thành phố của 1 quốc gia USA
Trang 59SELECT A.CustomerName AS CustomerName1, B.CustomerName AS
CustomerName2, A.City
FROM Customers A, Customers B
WHERE A.CustomerID <> B.CustomerID
AND A.City = B.City
AND A.Country= 'USA'
IdFirstNameLastNameCityCountryPhone
SELECT B.FirstName AS FirstName1, B.LastName AS LastName1,
A.FirstName AS FirstName2, A.LastName AS LastName2, B.City, B.CountryFROM Customer A, Customer B
WHERE A.Id <> B.Id
AND A.City = B.City
AND A.Country = B.Country
ORDER BY A.Country;
Trang 61Kết quả:
2 Từ table Customers hãy xuất ra tất cả các record được sắp xếp theo thứ tự giảm dần của Country
Table Customers:
SELECT * FROM Customers
ORDER BY Country DESC;
Kết quả:
Trang 623 Từ table Products hãy xuất ra tất cả các record được sắp xếp theo thứ tự tăng dần của Price
Trang 63SELECT * FROM [Products]
ORDER BY Price DESC;
Kết quả:
5 Từ table Products hãy xuất ra tất cả các record được sắp xếp theo thứ tự tăng dần của ProductName và giảm dần của Price
Table Products
Trang 64SELECT * FROM [Products]
ORDER BY ProducName ASC Price DESC;
- Dữ liệu trong 2 câu lệnh SELECT phải tương đồng nhau
+ Kiểu dữ liệu trong cột phải giống nhau
+ Các cột trong câu lệnh cũng phải giống nhau về thứ tự
+ Kết hợp ví trí của cột chứ không kết hợp theo tên cột
Trang 65SELECT column_name(s) FROM table2;
- UNION ALL dùng đề lấy tất cả các giá trị từ 2 hay nhiều bảng tương đồng ( bao gồm cả giá trị trùng lặp)
SELECT column_name(s) FROM table1 UNION ALL
SELECT column_name(s) FROM table2;
Example:
Có 2 table 1 Customer
Table “Customer”
Trang 68Table 2 Suppliers
Trang 691 Lấy tất cả các thành phố từ 2 bảng Customer và Suppliers
SELECT City FROM Customers
UNION
SELECT City FROM Suppliers
ORDER BY City;
Kết quả:
Trang 702 Lấy danh sách thông tin liên lạc gồm tên và thành phố từ 2 bảng trên
SELECT CustomerName AS SupplierName, ContactName, Address, City, CountryFROM Customers
Trang 714 Lấy tất cả danh sách liên hệ từ 2 bảng trên
SELECT 'Customers' As Type, CustomerName AS SupplierName, ContactName, Address City, PotslCode, Country
Trang 725 Lấy tất cả danh sách liên hệ của khách hàng từ bảng Customer và Suppliers CUSTOM
ContactName
CityCountryPhoneFaxSELECT 'Customer' As Type, FirstName + ' ' + LastName AS ContactName, City, Country, Phone
Trang 73GROUP BY
Đ/n: Dùng để kết hợp với các hàm chức năng (COUNT, MAX, MIN, SUM, AVG) để
nhóm kết quả truy vấn bởi 1 hoặc nhiều cột
- Lấy ra các bản ghi và nhóm lại thành 1 nhóm
Trang 741 Đếm số lượng khách hàng của từng đất nước
SELECT COUNT(CustomerID), Country
từ cao đến thấp
SELECT COUNT(CustomerID), Country
FROM Customers
Trang 76SELECT Shippers.ShipperName, COUNT(Orders.OrderID) AS NumberOfOrders FROM Orders
LEFT JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID
GROUP BY ShipperName;
Kết quả:
Trang 77SQL HAVING
Đ/n: Dùng để filter các record sau khi có kết quả của GROUP BY
Không thể dùng WHERE Vì WHERE dùng cho cá nhân, còn Having dùng cho nhóm (Saukhi đã dùng GROUP BY)
Chỉ những nhóm thỏa mãn điều kiện trong mệnh đề HAVING thì mới được lấy
Khi dùng HAVING thì bắt buộc có mặt của GROUP BY
WHERE và HAVING đều có thể dùng chung trong 1 câu lệnh nhưng thứ tự là: WHERE, GROUP BY, HAVING
Trang 793 Liệt kê ra số lượng khách hàng của từng đất nước khác USA, có tổng ID lớn hơn 5 và được sắp xếp thứ tự giảm dần
SELECT COUNT(CustomerID), Country
Trang 805 Liệt kê ra số lượng khách hàng của từng đất nước, có tổng ID lớn hơn 10 và được sắp xếp thứ tự giảm dần từ bảng Suppliers.
SELECT COUNT(SupplierID), Country
Trang 81SQL EXISTS
Đ/n: Dùng để test sự tồn tại của một vài record trong một truy vấn con
Thường được dùng trong truy vấn con
Trả về giá trị là TRUE kết quả của truy vấn con là 1 hoặc nhiều record
Table Products và table Sippliers
1 Liệt kê những nhà cung cấp sản phẩm có mức giá thấp hơn 20
Trang 822 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 trả về TRUE và Liệt kê ra những nhà cung cấp sản phẩm có mức giá = 22
Trang 83Đ/n: Dùng trong mệnh đề WHERE hoặc HAVING
ANY và ALL đều được sử dụng trong truy vấn con để trả về nhiều giá trị
ANY: Trả về TRUE nếu Bất kì giá trị của truy vấn con thỏa mãn điều kiện
ALL: Trả về TRUE nếu TẤT CẢ giá trị của truy vấn con thỏa mãn điều kiện
Syntax:
SELECT column_name(s)
FROM table_name
WHERE column_name operator ANY/ALL
(SELECT column_name FROM table_name WHERE condition);
Operator có thể là =, <, >, >=, <=, <> !=
Example:
Table Products và table Order Detais
1 Câu lệnh SQL sau trả về TRUE và liệt kê các tên sản phẩm nếu tìm thấy bất
kỳ record nào trong bảng OrderDetails với số lượng = 10: