문제 1. sandwich 테이블에서 가계 이름은 대문자, 메뉴 이름은 소문자로 조회하세요.
mysql> select ucase(cafe), lcase(menu) from sandwich;
+---------------------------------+----------------------------------+
| ucase(cafe) | lcase(menu) |
+---------------------------------+----------------------------------+
| OLD OAK TAP | blt |
| AU CHEVAL | fried bologna |
| XOCO | woodland mushroom |
| AL’S DELI | roast beef |
| PUBLICAN QUALITY MEATS | pb&l |
| HENDRICKX BELGIAN BREAD CRAFTER | belgian chicken curry salad |
| ACADIA | lobster roll |
| BIRCHWOOD KITCHEN | smoked salmon salad |
| CEMITAS PUEBLA | atomica cemitas |
| NANA | grilled laughing bird shrimp and |
| LULA CAFE | ham and raclette panino |
| RICOBENE’S | breaded steak |
| FROG N SNAIL | the hawkeye |
| CROSBY’S KITCHEN | chicken dip |
| LONGMAN & EAGLE | wild boar sloppy joe |
| BARI | meatball sub |
| MANNY’S | corned beef |
| EGGY’S | turkey club |
| OLD JERUSALEM | falafel |
| MINDY’S HOTCHOCOLATE | crab cake |
| OLGA’S DELICATESSEN | chicken schnitzel |
| DAWALI MEDITERRANEAN KITCHEN | shawarma |
| BIG JONES | toasted pimiento cheese |
| LA PANE | vegetarian panino |
| PASTORAL | cali chèvre |
| MAX’S DELI | pastrami |
| LUCKY’S SANDWICH CO. | the fredo |
| CITY PROVISIONS | smoked ham |
| PAPA’S CACHE SABROSO | jibarito |
| BAVETTE’S BAR & BOEUF | shaved prime rib |
| HANNAH’S BRETZEL | serrano ham and manchego cheese |
| LA FOURNETTE | tuna salad |
| PARAMOUNT ROOM | paramount reuben |
| MELT SANDWICH SHOPPE | the istanbul |
| FLORIOLE CAFE & BAKERY | b.a.d. |
| FIRST SLICE PIE CAFÉ | duck confit and mozzarella |
| TROQUET | croque monsieur |
| GRAHAMWICH | green garbanzo |
| SAIGON SISTERS | the hen house |
| ROSALIA’S DELI | tuscan chicken |
| Z&H MARKETCAFE | the marty |
| MARKET HOUSE ON THE SQUARE | whitefish |
| ELAINE’S COFFEE CALL | oat bread, pecan butter, and fru |
| MARION STREET CHEESE MARKET | cauliflower melt |
| CAFECITO | cubana |
| CHICKPEA | kufta |
| THE GODDESS AND GROCER | debbie’s egg salad |
| ZENWICH | beef curry |
| TONI PATISSERIE | le végétarien |
| PHOEBE’S BAKERY | the gatsby |
+---------------------------------+----------------------------------+
50 rows in set (0.30 sec)
2. sandwich 테이블에서 10위 메뉴의 마지막 단어를 조회해라.
mysql> select ranking, cafe, mid(menu, -3, 3) from sandwich where ranking=10;
+---------+------+------------------+
| ranking | cafe | mid(menu, -3, 3) |
+---------+------+------------------+
| 10 | Nana | and |
+---------+------+------------------+
1 row in set (0.23 sec)
3. sandwich 테이블에서 메뉴 이름의 평균 길이를 조회하라.
mysql> select avg(length(menu)) from sandwich ;
+-------------------+
| avg(length(menu)) |
+-------------------+
| 13.9600 |
+-------------------+
1 row in set (0.23 sec)
4. oil_price 테이블에서 가격을 십원 단위에서 반올림해서 조회하라.
mysql> select 가격 , round(가격, -2) from oil_price;
+--------+-------------------+
| 가격 | round(가격, -2) |
+--------+-------------------+
| 1484 | 1500 |
| 1485 | 1500 |
| 1498 | 1500 |
| 1498 | 1500 |
| 1509 | 1500 |
| 1598 | 1600 |
| 1635 | 1600 |
| 2160 | 2200 |
| 1498 | 1500 |
+--------+-------------------+
9 rows in set (0.27 sec)
5. oil_price 테이블에서 가격이 십원 단위에서 반올림 했을 때 2000 원 이상인 경우, 천단위에 콤마를 넣어 조회하세요.
mysql> select 가격, format(가격, 0) from oil_price where round(가격, -2) >= 2000;
+--------+-------------------+
| 가격 | format(가격, 0) |
+--------+-------------------+
| 2160 | 2,160 |
+--------+-------------------+
1 row in set (0.29 sec)
0111danye
오전 11:49
SQL 서브 쿼리
3가지
scalar 서브쿼리 - select 절에 사용, 결과는 하나의 컬럼이어야 한다.
inline view - from 절에 사용하는 서브 쿼리, 메인 쿼리에서는 인라인 뷰에서 조회한 컬럼만 사용이 가능.
nested 서브쿼리 - where 절에 사용하는 서브 쿼리, 종류가 세 가지 / 서브 쿼리가 비교 연산자와 사용되는 경우, 서브 쿼리의 검색 결과는 한 개 행의 결과 값을 가져야 한다.
nested 서브 쿼리에는 또 다시 세 종류로 나뉜다.
0111danye
오후 4:43
문제 1.
oil_price 테이블에서 셀프 주유의 평균 가격과 SK에너지의 가장 비싼 가격을 Scalar Subquery를 사용하려 조회하라.
oil_price 테이블에서 셀프 주유의 평균 가격 / SK에너지의 가장 비싼 가격
이렇게 나눠서?
mysql> select avg(가격) from oil_price where 셀프= 'Y';
+-------------+
| avg(가격) |
+-------------+
| 1517.6000 |
+-------------+
1 row in set (0.19 sec)
mysql> select max(가격) from oil_price where 상표 like 'SK%';
+-------------+
| max(가격) |
+-------------+
| 2160 |
+-------------+
1 row in set (0.19 sec)
mysql> select max(가격), (select avg(가격) from oil_price where 셀프= 'Y')
-> from oil_price where 상표 like 'SK%';
+-------------+-------------------------------------------------------+
| max(가격) | (select avg(가격) from oil_price where 셀프= 'Y') |
+-------------+-------------------------------------------------------+
| 2160 | 1517.6000 |
+-------------+-------------------------------------------------------+
1 row in set (0.19 sec)
mysql> select avg(가격), (select max(가격) from oil_price where 상표 like 'SK%') from oil_price where 셀프= 'Y';
+-------------+-------------------------------------------------------------+
| avg(가격) | (select max(가격) from oil_price where 상표 like 'SK%') |
+-------------+-------------------------------------------------------------+
| 1517.6000 | 2160 |
+-------------+-------------------------------------------------------------+
1 row in set (0.19 sec)
문제 2.
oil_price 테이블에서 상표별로 가장 비싼 가격과 상호를 Inline View 를 사용하여 조회하세요.
oil_price 테이블에서 상표별로 가장 비싼 가격, oil_price 테이블에서 상표별로 가장 비싼 상호
mysql> select 상표, max(가격) from oil_price group by 상표;
+--------------------+-------------+
| 상표 | max(가격) |
+--------------------+-------------+
| SK에너지 | 2160 |
| 현대오일뱅크 | 1498 |
| S-OIL | 1509 |
| GS칼텍스 | 1498 |
+--------------------+-------------+
4 rows in set (0.19 sec)
mysql> select o.상호, o.상표, s.max_price
-> from oil_price as o,
-> (select 상표, max(가격) max_price from oil_price group by 상표) as s
-> where o.상표 = s.상표 and o.가격 = s.max_price;
+-------------------+--------------------+-----------+
| 상호 | 상표 | max_price |
+-------------------+--------------------+-----------+
| (주)MS주유소 | 현대오일뱅크 | 1498 |
| 쌍문주유소 | S-OIL | 1509 |
| 뉴서울(강남) | SK에너지 | 2160 |
| 신길주유소 | GS칼텍스 | 1498 |
+-------------------+--------------------+-----------+
4 rows in set (0.19 sec)
문제 3.
평균 가격보다 높은 주유소 상호와 가격을 Nested Subquery를 사용하여 조회하세요.
mysql> select avg(가격) from oil_price;
+-------------+
| avg(가격) |
+-------------+
| 1596.1111 |
+-------------+
1 row in set (0.19 sec)
mysql> select 상호, 가격 from oil_price where 가격 > (select avg(가격) from oil_price);
+--------------------+--------+
| 상호 | 가격 |
+--------------------+--------+
| 21세기주유소 | 1598 |
| 살피재주유소 | 1635 |
| 뉴서울(강남) | 2160 |
+--------------------+--------+
3 rows in set (0.19 sec)
문제 4.
3번에서 조회한 주유소에서 주유한 연예인의 이름과 주유소, 주유일을 Nested Subquery를 사용하여 조회하세요. (refueling 테이블)
mysql> select from refueling;
+------+-----------+--------------------+------------+--------+
| ID | NAME | GAS_STATION | OIL_DAY | PRICE |
+------+-----------+--------------------+------------+--------+
| 1 | 유재석 | 뉴서울(강남) | 2021-10-01 | 50000 |
| 2 | 이미주 | 뉴서울(강남) | 2021-10-01 | 120000 |
| 3 | 이효리 | 제주주유소 | 2021-10-03 | 80000 |
| 4 | 아이유 | 타이거주유소 | 2021-10-03 | 80000 |
| 5 | 유재석 | 뉴서울(강남) | 2021-10-03 | 60000 |
| 6 | 강동원 | 타이거주유소 | 2021-10-10 | 50000 |
| 7 | 유재석 | 쌍문주유소 | 2021-10-10 | 60000 |
| 8 | 이미주 | 타이거주유소 | 2021-10-10 | 50000 |
| 9 | 아이유 | 뉴서울(강남) | 2021-10-14 | 150000 |
| 10 | 아이유 | 뉴서울(강남) | 2021-10-14 | 120000 |
| 11 | 유재석 | 쌍문주유소 | 2021-10-14 | 80000 |
| 12 | 유재석 | 뉴서울(강남) | 2021-10-16 | 110000 |
| 13 | 이미주 | 타이거주유소 | 2021-10-16 | 50000 |
| 14 | 이효리 | 제주주유소 | 2021-10-20 | 80000 |
| 15 | 이상순 | 제주주유소 | 2021-10-20 | 50000 |
| 16 | 이상순 | 타이거주유소 | 2021-10-20 | 140000 |
+------+-----------+--------------------+------------+--------+
16 rows in set (0.22 sec)
mysql> select name, gas_station, oil_day from refueling where gas_station in (select 상호 from oil_price where 가격 > (select avg(가격) from oil_price)) ;
+-----------+-------------------+------------+
| name | gas_station | oil_day |
+-----------+-------------------+------------+
| 유재석 | 뉴서울(강남) | 2021-10-01 |
| 이미주 | 뉴서울(강남) | 2021-10-01 |
| 유재석 | 뉴서울(강남) | 2021-10-03 |
| 아이유 | 뉴서울(강남) | 2021-10-14 |
| 아이유 | 뉴서울(강남) | 2021-10-14 |
| 유재석 | 뉴서울(강남) | 2021-10-16 |
+-----------+-------------------+------------+
6 rows in set (0.20 sec)
문제 5.
refueling 테이블과 oil_price 테이블에서 10만원 이상 주유한 연예인 이름, 상호, 상표, 주유 금액, 가격을 Inline View 를 사용하여 조회하세요.
mysql> select from refueling limit 3;
+------+-----------+-------------------+------------+--------+
| ID | NAME | GAS_STATION | OIL_DAY | PRICE |
+------+-----------+-------------------+------------+--------+
| 1 | 유재석 | 뉴서울(강남) | 2021-10-01 | 50000 |
| 2 | 이미주 | 뉴서울(강남) | 2021-10-01 | 120000 |
| 3 | 이효리 | 제주주유소 | 2021-10-03 | 80000 |
+------+-----------+-------------------+------------+--------+
3 rows in set (0.19 sec)
mysql> select * from oil_price limit 3;
+------+----------------------+-------------------------------------------------+--------+--------+--------------------+--------------+
| ID | 상호 | 주소 | 가격 | 셀프 | 상표 | 구 |
+------+----------------------+-------------------------------------------------+--------+--------+--------------------+--------------+
| 1 | 타이거주유소 | 서울 은평구 수색로 188(중산동) | 1484 | N | SK에너지 | 은평구 |
| 2 | (주)명연에너지 | 서울 은평구 수색로 236(수색동) | 1485 | Y | 현대오일뱅크 | 은평구 |
| 3 | 성락주유소 | 서울 영등포구 가마산로 414(신길동) | 1498 | Y | S-OIL | 영등포구 |
+------+----------------------+-------------------------------------------------+--------+--------+--------------------+--------------+
3 rows in set (0.19 sec)
mysql> select r.name, o.상호, o.상표, r.price, o.가격
-> from oil_price o,
-> (select name, gas_station, price from refueling where price >= 100000) r
-> where o.상호 = r.gas_station;
+-----------+--------------------+-------------+--------+--------+
| name | 상호 | 상표 | price | 가격 |
+-----------+--------------------+-------------+--------+--------+
| 이상순 | 타이거주유소 | SK에너지 | 140000 | 1484 |
| 유재석 | 뉴서울(강남) | SK에너지 | 110000 | 2160 |
| 아이유 | 뉴서울(강남) | SK에너지 | 120000 | 2160 |
| 아이유 | 뉴서울(강남) | SK에너지 | 150000 | 2160 |
| 이미주 | 뉴서울(강남) | SK에너지 | 120000 | 2160 |
+-----------+--------------------+-------------+--------+--------+
5 rows in set (0.19 sec)