Database/MySQL

[MySQL๋กœ ๋ฐฐ์šฐ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐœ๋ก ๊ณผ ์‹ค์Šต] Chapter 3. ์‹ค์Šต๋ฌธ์ œ ํ’€์ด - 2 (์งˆ์˜ 3-18 ~ 3-33)

Ariella 2022. 10. 19. 21:46
๋ฐ˜์‘ํ˜•

 

 

 

๐Ÿ™Œ ๋”๋ณด๊ธฐ ๋ž€์„ ์—ด๊ธฐ ์ „ ๋จผ์ € ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด์ž.

 

 

 


 

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)

 

 

 

 

 

๋ฐ˜์‘ํ˜•