Bài giảng Cơ sở dữ liệu (Database) - SQL Nâng cao - Vũ Hải
IFNULL, NVL, ISNULL • IFNULL(var1,var2): MySQL, • ISNULL(var1,var2): SQL Server • NVL(var1,var2): Oracle.
Bạn đang xem trước 20 trang tài liệu Bài giảng Cơ sở dữ liệu (Database) - SQL Nâng cao - Vũ Hải, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Cơ sở dữ liệu – Database
EE4253
Vũ Hải
2016
International Research Institute MICA,
Hanoi University of Science and Technology
1
SQL Nâng cao
2Resource:
IFNULL, NVL, ISNULL
• IFNULL(var1,var2): MySQL,
• ISNULL(var1,var2): SQL Server
• NVL(var1,var2): Oracle.
3
COALESCE
• COALESCE ("expression 1", "expressions
2", ...)
• Trả về biểu thức khác NULL đầu tiên trong số
các tham số đầu vào.
4
NULLIF
• NULLIF ("expression 1", "expressions 2")
– If "expression 1 = expression 2 " THEN return "NULL"
ELSE return "expression 1"
5
LIMIT
• LIMIT: MySQL
• [SQL Statement ] LIMIT [N];
6
TOP
• Microsoft SQL Server
• TOP [N]
• TOP [M] PERCENT
7
CASE
• CASE ("column_name")
WHEN "value1"/"condition1" THEN "result1"
WHEN "value2"/"condition1" THEN "result2"
...
[ELSE "resultN"]
END
8
• Subquery đơn giản
• Subquery có tương quan
Subquery
9
Find the sales of all stores in the
West region
Division in SQL
• Sailors, Boats, Reserves
• Find names of sailors who’ve reserved all
boats
• SELECT S.sname
FROM Sailors S
WHERE NOT EXISTS (SELECT B.bid
FROM Boats B
WHERE NOT EXISTS (
SELECT R.bid
FROM Reserves R
WHERE R.bid=B.bid
AND R.sid=S.sid)) 10
Sailors S such that .
there is no boat B
that doesn’t have
a Reserves tuple showing S reserved B
SQL Quiz
11
SQL Quiz
1. Which SQL statement would you use to
select all columns from the
BOOK_INFORMATION table?
• a) SELECT BOOK_ID + PRICE FROM
BOOK_INFORMATION;
b) SELECT * FROM BOOK_INFORMATION;
c) SELECT ALL FROM BOOK_INFORMATION;
d) SELECT ALL COLUMNS FROM
BOOK_INFORMATION;
12
SQL Quiz
• 2. Which SQL statement would you use to select
all books that has a price higher than 20?
• a) SELECT BOOK_ID FROM BOOK_INFORMATION
HAVING PRICE > 20;
b) SELECT BOOK_ID FROM BOOK_INFORMATION
ONLY PRICE > 20;
c) SELECT BOOK_ID FROM BOOK_INFORMATION
WHERE BOOK_ID > 20;
d) SELECT BOOK_ID FROM BOOK_INFORMATION
WHERE PRICE > 20;
13
SQL Quiz
• 3. Which SQL statement would you use to select
all books whose title starts with 'A'?
• a) SELECT BOOK_ID, BOOK_TITLE FROM
BOOK_INFORMATION WHERE BOOK_TITLE LIKE 'A';
b) SELECT BOOK_ID, BOOK_TITLE FROM
BOOK_INFORMATION WHERE BOOK_TITLE IN 'A';
c) SELECT BOOK_ID, BOOK_TITLE FROM
BOOK_INFORMATION WHERE BOOK_TITLE LIKE
'A%';
d) SELECT BOOK_ID, BOOK_TITLE FROM
BOOK_INFORMATION WHERE BOOK_TITLE LIKE
'%A';
14
SQL Quiz
• 4. Which SQL statement allows you to sort all
books by price, from the highest price to lowest
price?
• a) SELECT BOOK_ID, BOOK_TITLE, PRICE FROM
BOOK_INFORMATION ORDER BY PRICE DESC;
b) SELECT BOOK_ID, BOOK_TITLE, PRICE FROM
BOOK_INFORMATION SORT BY PRICE DESC;
c) SELECT BOOK_ID, BOOK_TITLE, PRICE FROM
BOOK_INFORMATION SORT BY PRICE ASC;
d) SELECT BOOK_ID, BOOK_TITLE, PRICE FROM
BOOK_INFORMATION ORDER BY PRICE ASC;
15
SQL Quiz
• 5. Which SQL statement allows you to insert the
following piece of data into BOOK_INFORMATION?
BOOK_ID=20
BOOK_TITLE='1KEYDATA SQL TUTORIAL'
PRICE=15
• a) ADD INTO BOOK_INFORMATION WITH
(20,'1KEYDATA SQL TUTORIAL',15);
b) INSERT INTO BOOK_INFORMATION USING
(20,'1KEYDATA SQL TUTORIAL',15);
c) INSERT INTO BOOK_INFORMATION VALUES
(20,'1KEYDATA SQL TUTORIAL',15);
d) ADD INTO BOOK_INFORMATION VALUES
(20,'1KEYDATA SQL TUTORIAL',15); 16
SQL Quiz
• 6. Which SQL statement lets you remove the
table BOOK_INFORMATION from the
database?
• a) DROP BOOK_INFORMATION;
b) DELETE TABLE BOOK_INFORMATION;
c) TRUNCATE TABLE BOOK_INFORMATION;
d) DROP TABLE BOOK_INFORMATION;
17
SQL Quiz
• 7. Which SQL statement would you use to delete
the row for BOOK_ID=15?
• a) TRUNCATE TABLE BOOK_INFORMATION WHERE
BOOK_ID = 15;
b) DELETE FROM BOOK_INFORMATION WHERE
BOOK_ID = 15;
c) DROP BOOK_INFORMATION WHERE BOOK_ID =
15;
d) TRUNCATE BOOK_INFORMATION WHERE
BOOK_ID = 15;
18
SQL Quiz
• 8. Which SQL statement will you use to change
the price for the BOOK titled 'ELEMENTARY
SCHOOL GUIDE' to 20?
• a) UPDATE BOOK_INFORMATION SET PRICE = 20 WHERE
BOOK_TITLE = 'ELEMENTARY SCHOOL GUIDE';
b) UPDATE TABLE BOOK_INFORMATION SET PRICE = 20
WHERE BOOK_TITLE = 'ELEMENTARY SCHOOL GUIDE';
c) UPDATE BOOK_INFORMATION CHANGE PRICE = 20 WHERE
BOOK_TITLE = 'ELEMENTARY SCHOOL GUIDE';
d) UPDATE TABLE BOOK_INFORMATION SET PRICE = 20
WHERE BOOK_ID = 'ELEMENTARY SCHOOL GUIDE';
19
SQL Quiz
• 9. Which SQL statement allows you to find the
highest price from the table
BOOK_INFORMATION?
• a) SELECT BOOK_ID, BOOK_TITLE, MAX(PRICE)
FROM BOOK_INFORMATION;
b) SELECT MAX(PRICE) FROM
BOOK_INFORMATION;
c) SELECT MAXIMUM(PRICE) FROM
BOOK_INFORMATION;
d) SELECT PRICE FROM BOOK_INFORMATION
ORDER BY PRICE DESC;
20
SQL Quiz
• 10. Which SQL statement allows you to find all
books priced between 15 and 20?
• a) SELECT BOOK_ID, BOOK_TITLE, PRICE FROM
BOOK_INFORMATION WHERE PRICE IS BETWEEN 15 AND 20;
b) SELECT BOOK_ID, BOOK_TITLE, PRICE FROM
BOOK_INFORMATION HAVING PRICE IS BETWEEN 15 AND 20;
c) SELECT BOOK_ID, BOOK_TITLE, PRICE FROM
BOOK_INFORMATION WHERE PRICE BETWEEN 15 AND 20;
d) SELECT BOOK_ID, BOOK_TITLE, PRICE FROM
BOOK_INFORMATION HAVING PRICE BETWEEN 15 AND 20;
21
SQL Quiz
• 11. Which SQL statement lets you find the sales
amount for each store?
• a) SELECT STORE_ID, SUM(SALES_AMOUNT) FROM
SALES;
b) SELECT STORE_ID, SUM(SALES_AMOUNT) FROM
SALES ORDER BY STORE_ID;
c) SELECT STORE_ID, SUM(SALES_AMOUNT) FROM
SALES GROUP BY STORE_ID;
d) SELECT STORE_ID, SUM(SALES_AMOUNT) FROM
SALES HAVING UNIQUE STORE_ID;
22
SQL Quiz
• 12. Which SQL statement lets you list all stores
whose total sales amount is over 5000?
• a) SELECT STORE_ID, SUM(SALES_AMOUNT) FROM
SALES GROUP BY STORE_ID HAVING
SUM(SALES_AMOUNT) > 5000;
b) SELECT STORE_ID, SUM(SALES_AMOUNT) FROM
SALES GROUP BY STORE_ID HAVING SALES_AMOUNT >
5000;
c) SELECT STORE_ID, SUM(SALES_AMOUNT) FROM
SALES WHERE SUM(SALES_AMOUNT) > 5000 GROUP BY
STORE_ID;
d) SELECT STORE_ID, SUM(SALES_AMOUNT) FROM
SALES WHERE SALES_AMOUNT > 5000 GROUP BY
STORE_ID;
23
SQL Quiz
• 13. Which SQL statement is the correct one to
use to find the earliest date STORE_ID 10 had a
sales amount greater than 0?
• a) SELECT MAX(SALES_DATE) FROM SALES
WHERE STORE_ID = 10 AND SALES_AMOUNT > 0;
b) SELECT SALES_DATE FROM SALES WHERE
STORE_ID = 10 AND SALES_AMOUNT > 0;
c) SELECT MIN(SALES_DATE) FROM SALES WHERE
STORE_ID = 10 OR SALES_AMOUNT > 0;
d) SELECT MIN(SALES_DATE) FROM SALES WHERE
STORE_ID = 10 AND SALES_AMOUNT > 0;
24
SQL Quiz
• 14. Which SQL statement lets you find the total
number of stores in the SALES table?
• a) SELECT COUNT(STORE_ID) FROM SALES;
b) SELECT COUNT(DISTINCT STORE_ID) FROM
SALES;
c) SELECT DISTINCT STORE_ID FROM SALES;
d) SELECT COUNT(STORE_ID) FROM SALES GROUP
BY STORE_ID;
25
SQL Quiz
• 15. Which SQL statement allows you to find the
total sales amount for Store ID 25 and the total
sales amount for Store ID 45?
• a) SELECT STORE_ID, SUM(SALES_AMOUNT) FROM
SALES WHERE STORE_ID IN (25,45) GROUP BY
STORE_ID;
b) SELECT STORE_ID, SUM(SALES_AMOUNT) FROM
SALES GROUP BY STORE_ID HAVING STORE_ID IN
(25,45);
c) SELECT STORE_ID, SUM(SALES_AMOUNT) FROM
SALES WHERE STORE_ID IN (25,45);
d) SELECT STORE_ID, SUM(SALES_AMOUNT) FROM
SALES WHERE STORE_ID = 25 AND STORE_ID = 45
GROUP BY STORE_ID;
26
SQL Quiz
• 16. What is the result of the following SQL statement:
SELECT COUNT(DISTINCT STUDENT_ID) FROM
EXAM_RESULTS;
• a) 3
b) 4
c) 5
d) 6
27
SQL Quiz
• 17. What SQL statement do we use to find the average
exam score for EXAM_ID = 1?
• a) SELECT AVG(EXAM_SCORE) FROM EXAM_RESULTS;
b) SELECT AVG(EXAM_SCORE) FROM EXAM_RESULTS
WHERE EXAM_ID = 1;
c) SELECT AVG(EXAM_SCORE) FROM EXAM_RESULTS
GROUP BY EXAM_ID;
d) SELECT COUNT(EXAM_SCORE) FROM EXAM_RESULTS
WHERE EXAM_ID = 1; 28
SQL Quiz
• 18. Which SQL statement do we use to find out how
many students took each exam?
• a) SELECT COUNT(DISTINCT Stduetn_ID) FROM
EXAM_RESULTS GROUP BY EXAM_ID;
b) SELECT EXAM_ID, MAX(STUDENT_ID) FROM
EXAM_RESULTS GROUP BY EXAM_ID;
c) SELECT EXAM_ID, COUNT(DISTINCT STUDENT_ID) FROM
EXAM_RESULTS GROUP BY EXAM_ID;
d) SELECT EXAM_ID, MIN(STUDENT_ID) FROM
EXAM_RESULTS GROUP BY EXAM_ID;
29
SQL Quiz
• 19. What SQL statement do we use to print out the
record of all students whose last name starts with 'L'?
• a) SELECT * FROM EXAM_RESULTS WHERE LAST_NAME LIKE
'L%';
b) SELECT * FROM EXAM_RESULTS WHERE LAST_NAME LIKE
'L';
c) SELECT * FROM EXAM_RESULTS WHERE LAST_NAME = 'L';
d) SELECT * FROM EXAM_RESULTS WHERE LAST_NAME
'L'; 30
SQL Quiz
• 20. What is the result of the following SQL statement:
SELECT MAX(EXAM_SCORE) FROM
EXAM_RESULTS WHERE EXAM_ID = 1 AND
FIRST_NAME LIKE '%E%';
• a) 90
b) 85
c) 100
d) 78 31
SQL Quiz
• 21. What SQL statement do we use to print out the records
of all students whose first name or last name ends in 'A'?
• a) SELECT * FROM EXAM_RESULTS WHERE FIRST_NAME LIKE
'%A' OR LAST_NAME LIKE '%A';
b) SELECT * FROM EXAM_RESULTS WHERE FIRST_NAME LIKE 'A'
OR LAST_NAME LIKE 'A';
c) SELECT * FROM EXAM_RESULTS WHERE FIRST_NAME LIKE
'A%' OR LAST_NAME LIKE 'A%';
d) SELECT * FROM EXAM_RESULTS WHERE FIRST_NAME LIKE
'%A%' OR LAST_NAME LIKE '%A%'; 32
SQL Quiz
• 22. What SQL statement do we use to find the name of all students who
scored better than 90 on the second exam (EXAM_ID = 2)?
• a) SELECT FIRST_NAME, LAST_NAME FROM EXAM_RESULTS
WHERE EXAM_ID = 2 OR Exam_SCORE > 90;
b) SELECT FIRST_NAME, LAST_NAME FROM EXAM_RESULTS
WHERE EXAM_ID = 2 AND Exam_SCORE > 90;
c) SELECT FIRST_NAME, LAST_NAME FROM EXAM_RESULTS
WHERE Exam_SCORE > 90;
d) SELECT FIRST_NAME, LAST_NAME FROM EXAM_RESULTS
WHERE EXAM_ID = 2 HAVING Exam_SCORE > 90; 33
SQL Quiz
• 23. What SQL statement do we use to find the name of all students who
scored better than 180 on all the Exams?
• a) SELECT FIRST_NAME, LAST_NAME, SUM(EXAM_SCORE) FROM
EXAM_RESULTS GROUP BY FIRST_NAME, LAST_NAME;
b) SELECT FIRST_NAME, LAST_NAME, SUM(EXAM_SCORE) FROM
EXAM_RESULTS HAVING SUM(EXAM_SCORE) > 180;
c) SELECT FIRST_NAME, LAST_NAME, SUM(EXAM_SCORE) FROM
EXAM_RESULTS GROUP BY FIRST_NAME, LAST_NAME HAVING
SUM(EXAM_SCORE) > 180;
d) SELECT FIRST_NAME, LAST_NAME, SUM(EXAM_SCORE) FROM
EXAM_RESULTS WHERE EXAM_SCORE > 180 GROUP BY FIRST_NAME,
LAST_NAME;
34
SQL Quiz
• 24. How many records does the following SQL statement generate?
SELECT * FROM EXAM_RESULTS WHERE LAST_NAME LIKE '%N%'
AND EXAM_SCORE > 88;
• a) 4
b) 3
c) 1
d) No Result
35
SQL Quiz
• 25. How many records does the following SQL statement return?
SELECT * FROM EXAM_RESULTS WHERE STUDENT_ID <= 12 AND
EXAM_SCORE > 85;
• a) 5
b) 4
c) 3
d) 2
36
37