๐ ๋๋ณด๊ธฐ ๋์ ์ด๊ธฐ ์ ๋จผ์ ๋ฌธ์ ๋ฅผ ํ์ด๋ณด์.
3-18. ๋ง๋น์์ ์ ๋์ ํ๋งค ๊ฑด์๋ฅผ ๊ตฌํ์์ค
code)
SELECT COUNT(*) AS "๋์ ํ๋งค ๊ฑด์"
FROM Orders;
result)

3-19. ๊ณ ๊ฐ๋ณ๋ก ์ฃผ๋ฌธํ ๋์์ ์ด ์๋๊ณผ ์ด ํ๋งค์ก์ ๊ตฌํ์์ค.
code)
SELECT custid AS "๊ณ ๊ฐ ์์ด๋", COUNT(*) AS "๋์ ์๋", SUM(saleprice) AS "์ด์ก"
FROM Orders
GROUP BY custid;
result)

3-20. ๊ฐ๊ฒฉ์ด 8,000์ ์ด์์ธ ๋์๋ฅผ ๊ตฌ๋งคํ ๊ณ ๊ฐ์ ๋ํ์ฌ ๊ณ ๊ฐ๋ณ ์ฃผ๋ฌธ ๋์์ ์ด ์๋์ ๊ตฌํ์์ค. ๋จ, ๋ ๊ถ ์ด์ ๊ตฌ๋งคํ ๊ณ ๊ฐ๋ง ๊ตฌํ์์ค.
code)
SELECT custid AS "๊ณ ๊ฐ ์์ด๋", COUNT(*) AS "๋์ ์๋"
FROM Orders
WHERE saleprice >= 8000
GROUP BY custid
HAVING COUNT(*) >= 2;
result)

3-21. ๊ณ ๊ฐ๊ณผ ๊ณ ๊ฐ์ ์ฃผ๋ฌธ์ ๊ดํ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๋ณด์ด์์ค.
code)
SELECT *
FROM Customer, Orders
WHERE Customer.custid = Orders.custid;
result)

3-22. ๊ณ ๊ฐ๊ณผ ๊ณ ๊ฐ์ ์ฃผ๋ฌธ์ ๊ดํ ๋ฐ์ดํฐ๋ฅผ ๊ณ ๊ฐ๋ณ๋ก ์ ๋ ฌํ์ฌ ๋ณด์ด์์ค.
code)
SELECT *
FROM Customer, Orders
WHERE Customer.custid = Orders.custid
ORDER BY Customer.custid;
result)

3-23. ๊ณ ๊ฐ์ ์ด๋ฆ๊ณผ ๊ณ ๊ฐ์ด ์ฃผ๋ฌธํ ๋์์ ํ๋งค๊ฐ๊ฒฉ์ ๊ฒ์ํ์์ค.
code)
SELECT name, saleprice
FROM Customer, Orders
WHERE Customer.custid = Orders.custid;
result)

3-24. ๊ณ ๊ฐ๋ณ๋ก ์ฃผ๋ฌธํ ๋ชจ๋ ๋์์ ์ด ํ๋งค์ก์ ๊ตฌํ๊ณ , ๊ณ ๊ฐ๋ณ๋ก ์ ๋ ฌํ์์ค.
code)
SELECT Customer.custid, name, SUM(saleprice) AS "์ด์ก"
FROM Customer, Orders
WHERE Customer.custid = Orders.custid
GROUP BY Customer.custid
ORDER BY Customer.custid;
result)

3-25. ๊ณ ๊ฐ์ ์ด๋ฆ๊ณผ ๊ณ ๊ฐ์ด ์ฃผ๋ฌธํ ๋์์ ์ด๋ฆ์ ๊ตฌํ์์ค.
code)
SELECT Customer.name, Book.bookname
FROM Customer, Orders, Book
WHERE Customer.custid = Orders.custid AND
Orders.bookid = Book.bookid;
result)

3-26. ๊ฐ๊ฒฉ์ด 20,000์์ธ ๋์๋ฅผ ์ฃผ๋ฌธํ ๊ณ ๊ฐ์ ์ด๋ฆ๊ณผ ๋์์ ์ด๋ฆ์ ๊ตฌํ์์ค.
code)
SELECT Customer.name, Book.bookname
FROM Customer, Book, Orders
WHERE Customer.custid = Orders.custid AND
Orders.bookid = Book.bookid AND
Book.price = 20000;
result)

โญ3-27. ๋์๋ฅผ ๊ตฌ๋งคํ์ง ์์ ๊ณ ๊ฐ์ ํฌํจํ์ฌ ๊ณ ๊ฐ์ ์ด๋ฆ๊ณผ ๊ณ ๊ฐ์ด ์ฃผ๋ฌธํ ๋์์ ํ๋งค๊ฐ๊ฒฉ์ ๊ตฌํ์์ค.
code)
SELECT Customer.name, saleprice
FROM Customer LEFT OUTER JOIN Orders
ON Customer.custid = Orders.custid;
result)

reff)

A : Customer
B : Orders
3-28. ๊ฐ์ฅ ๋น์ผ ๋์์ ์ด๋ฆ์ ๋ณด์ด์์ค.
code)
SELECT bookname AS "์ต๊ณ ๊ฐ ๋์"
FROM Book
WHERE price = (SELECT MAX(price)
FROM Book);
result)

3-29. ๋์๋ฅผ ๊ตฌ๋งคํ ์ ์ด ์๋ ๊ณ ๊ฐ์ ์ด๋ฆ์ ๊ฒ์ํ์์ค.
code)
- solution 1 : ์ถ์ฝํ
SELECT DISTINCT name
FROM Customer, Orders
WHERE Customer.custid IN (Orders.custid);
- solution 2
SELECT DISTINCT name
FROM Customer, Orders
WHERE Customer.custid IN (SELECT custid
FROM Orders);
result)

3-30. ๋ํ๋ฏธ๋์ด์์ ์ถํํ ๋์๋ฅผ ๊ตฌ๋งคํ ๊ณ ๊ฐ์ ์ด๋ฆ์ ๋ณด์ด์์ค.
code)
- solution 1 : ์ถ์ฝํ
SELECT name
FROM Customer, Orders, Book
WHERE Customer.custid = Orders.custid AND
Orders.bookid = Book.bookid AND
Book.publisher LIKE '๋ํ๋ฏธ๋์ด';
-solution 2
SELECT name
FROM Customer
WHERE Customer.custid IN (SELECT custid
FROM Orders
WHERE bookid IN (SELECT bookid
FROM Book
WHERE publisher LIKE '๋ํ๋ฏธ๋์ด'));
result)

โญ3-31. ์ถํ์ฌ๋ณ๋ก ์ถํ์ฌ์ ํ๊ท ๋์ ๊ฐ๊ฒฉ๋ณด๋ค ๋น์ผ ๋์๋ฅผ ๊ตฌํ์์ค.
code)
SELECT b1.bookname
FROM Book b1
WHERE b1.price > (SELECT AVG(b2.price)
FROM Book b2
WHERE b2.publisher = b1.publisher);
result)

reff)
- ์ถํ์ฌ๋ณ ํ๊ท ๋์ ๊ฐ๊ฒฉ
- ์ด๋ณด๋ค ๋น์ผ ๋์
๋ ๊ฐ์ง ๋ฐ์ดํฐ ๋ชจ๋ Book ํ ์ด๋ธ์์ ๋์ค๊ฒ ๋๋ค. ๐ก๋ณ์นญ ์ฌ์ฉ
โSubquery ์์ฑ์ด ์ด๋ ต๋ค๋ฉด ํ์ ๋ถ์์ง์๋ฅผ ๋จผ์ ์์ฑํด๋ณด์.
1. ์ถํ์ฌ๋ณ ํ๊ท ๋์ ๊ฐ๊ฒฉ์ ๊ตฌํ๋ ์ฟผ๋ฆฌ
SELECT AVG(b2.price)
FROM Book b2
GROUP BY b2.publisher;
2. ์ด๋ณด๋ค ๋น์ผ ๋์๋ฅผ ๊ตฌํ๋ ์ฟผ๋ฆฌ
SELECT b1.bookname
FROM Book b1
WHERE b1.price > -- ์ถํ์ฌ๋ณ ํ๊ท ๊ฐ๊ฒฉ --
3. ๋ถ์์ง์ ์์ฑ ์ ์ถํ์ฌ๋ณ ๊ฒฐํฉ์ GROUP BY๋ก ๋ ๊ฒฝ์ฐ 1 ์ด์์ ํ์ ๋ฐํํ๊ธฐ ๋๋ฌธ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. ๋ฐ๋ผ์, ํ๋์ฉ ์ดํด๋ณด๊ธฐ ์ํด b1.publisher์ b2.publisher๊ฐ ๊ฐ์ ๋๋ก ์กฐ๊ฑด์ ๋ณ๊ฒฝํ๋ค.
SELECT b1.bookname
FROM Book b1
WHERE b1.price > (SELECT AVG(b2.price)
FROM Book b2
WHERE b2.publisher = b1.publisher);
3-32. ๋ํ๋ฏผ๊ตญ์์ ๊ฑฐ์ฃผํ๋ ๊ณ ๊ฐ์ ์ด๋ฆ๊ณผ ๋์๋ฅผ ์ฃผ๋ฌธํ ๊ณ ๊ฐ์ ์ด๋ฆ์ ๋ณด์ด์์ค. (UNION ์ฐ์ฐ)
code)
SELECT name
FROM Customer
WHERE address LIKE '๋ํ๋ฏผ๊ตญ%'
UNION
SELECT name
FROM Customer, Orders
WHERE Customer.custid IN (Orders.custid);
result)

3-32-(1). ๋ํ๋ฏผ๊ตญ์์ ๊ฑฐ์ฃผํ๋ ๊ณ ๊ฐ์ ์ด๋ฆ๊ณผ ๋์๋ฅผ ์ฃผ๋ฌธํ ๊ณ ๊ฐ์ ์ด๋ฆ์ ์ค๋ณต์ ํฌํจํด ๋ณด์ด์์ค.
code)
SELECT name
FROM Customer
WHERE address LIKE '๋ํ๋ฏผ๊ตญ%'
UNION ALL
SELECT name
FROM Customer, Orders
WHERE Customer.custid IN (Orders.custid);
result)

3-32-(2). ๋ํ๋ฏผ๊ตญ์์ ๊ฑฐ์ฃผํ๋ ๊ณ ๊ฐ์ ์ด๋ฆ์์ ๋์๋ฅผ ์ฃผ๋ฌธํ ๊ณ ๊ฐ์ ์ด๋ฆ์ ๋นผ๊ณ ๋ณด์ด์์ค. (MINUS ์ฐ์ฐ)
code)
- solution 1 : ์ถ์ฝํ
SELECT DISTINCT name
FROM Customer, Orders
WHERE address LIKE '๋ํ๋ฏผ๊ตญ%' AND
Customer.custid NOT IN (SELECT custid
FROM Orders
WHERE Customer.custid = Orders.custid);
- solution 2
SELECT name
FROM Customer
WHERE address LIKE '๋ํ๋ฏผ๊ตญ%' AND
name NOT IN (SELECT name
FROM Customer
WHERE custid IN (SELECT custid
FROM Orders));
result)

-- ์ค๋ฅ ๋ฐ์ : ์ด์ ๋ฏธ์...
-- SELECT DISTINCT name
-- FROM Customer, Orders
-- WHERE address LIKE '๋ํ๋ฏผ๊ตญ%' AND
-- Customer.custid NOT IN (Orders.custid);
3-32-(3). ๋ํ๋ฏผ๊ตญ์์ ๊ฑฐ์ฃผํ๋ ๊ณ ๊ฐ ์ค ๋์๋ฅผ ์ฃผ๋ฌธํ ๊ณ ๊ฐ์ ์ด๋ฆ์ ๋ณด์ด์์ค. (INTERSECT ์ฐ์ฐ)
code)
- solution 1 : ์ถ์ฝํ
SELECT DISTINCT name
FROM Customer, Orders
WHERE address LIKE '๋ํ๋ฏผ๊ตญ%' AND
Customer.custid = Orders.custid AND
Customer.custid IN (Orders.custid);
- solution 2
SELECT name
FROM Customer
WHERE address LIKE '๋ํ๋ฏผ๊ตญ%' AND
name IN (SELECT name
FROM Customer
WHERE custid IN (SELECT custid
FROM Orders));
result)

3-33. ์ฃผ๋ฌธ์ด ์๋ ๊ณ ๊ฐ์ ์ด๋ฆ๊ณผ ์ฃผ์๋ฅผ ๋ณด์ด์์ค.
code)
- solution 1 : IN ์ฐ์ฐ
SELECT DISTINCT name, address
FROM Customer, Orders
WHERE Customer.custid IN (Orders.custid);
-solution 2 : EXISTS ์ฐ์ฐ
SELECT name, address
FROM Customer
WHERE EXISTS(SELECT *
FROM Orders
WHERE Customer.custid = Orders.custid);
result)
