MySQL 문법 연습문제|결과를 보고 SQL을 추리해보기
SQL을 처음 배우면 문법 자체보다 더 어려운 것이 있습니다.
“이 결과를 만들려면 어떤 SQL을 작성해야 하지?” 라는 생각입니다.
이번 연습에서는 강의 자료의 예문을 그대로 따라 하지 않고, 배운 MySQL 문법을 다른 상황에 적용해 보겠습니다.
각 문제는 먼저 최종 결과물을 확인합니다. 그다음 연상하기를 펼쳐 필요한 문법을 떠올리고, 마지막으로 정답 확인하기를 펼쳐 완성된 SQL을 확인합니다.
연습 방법
| 순서 | 할 일 |
|---|---|
| ① 결과 확인 | 문제에서 원하는 최종 결과를 먼저 봅니다. |
| ② 연상하기 | 어떤 SQL 문법이 필요한지 생각합니다. |
| ③ 정답 확인 | 완성된 SQL과 비교합니다. |
| ④ 직접 실행 | MySQL에서 직접 실행해 결과를 확인합니다. |
문제 1. 데이터베이스 목록 확인하기
현재 MySQL 서버에 존재하는 데이터베이스의 목록을 확인하고 싶습니다.
최종적으로 데이터베이스 이름들이 화면에 표시되어야 합니다.
```연상하기
```데이터를 조회하기 전에 먼저 서버에 어떤 데이터베이스가 있는지 확인할 수 있습니다.
SHOWDATABASES
정답 확인하기
```SHOW DATABASES;```
문제 2. 사용할 데이터베이스 선택하기
cafe_db라는 데이터베이스에서 작업하려고 합니다.
이후 작성하는 SQL이 해당 데이터베이스를 기준으로 실행되도록 설정합니다.
```연상하기
```USE- 사용할 데이터베이스 이름
정답 확인하기
```USE cafe_db;```
문제 3. 테이블 만들기
카페에서 판매하는 메뉴를 저장할 menu 테이블을 만들려고 합니다.
메뉴 번호, 메뉴 이름, 가격, 등록일을 저장할 수 있어야 합니다.
메뉴 번호는 자동으로 증가하고 기본키로 사용합니다. 메뉴 이름과 가격은 반드시 입력되어야 합니다.
```연상하기
```CREATE TABLEINTVARCHARDECIMALDATETIMEPRIMARY KEYNOT NULLAUTO_INCREMENT
정답 확인하기
```CREATE TABLE menu (
menu_id INT AUTO_INCREMENT PRIMARY KEY,
menu_name VARCHAR(100) NOT NULL,
price DECIMAL(10,2) NOT NULL,
created_at DATETIME
);
```
문제 4. 메뉴 데이터 입력하기
menu 테이블에 다음 메뉴를 입력합니다.
- 아메리카노 / 4500원
- 카페라떼 / 5000원
- 바닐라라떼 / 5500원
연상하기
```INSERT INTOVALUES- 문자열은 작은따옴표 사용
정답 확인하기
```INSERT INTO menu (menu_name, price)
VALUES
('아메리카노', 4500),
('카페라떼', 5000),
('바닐라라떼', 5500);
```
문제 5. 전체 데이터 조회하기
menu 테이블에 들어 있는 모든 데이터를 확인합니다.
메뉴 번호, 메뉴 이름, 가격 등 모든 컬럼이 화면에 표시되어야 합니다.
```연상하기
```SELECT*FROM
정답 확인하기
```SELECT * FROM menu;```
*는 모든 컬럼을 의미합니다.
문제 6. 필요한 컬럼만 조회하기
메뉴 전체 정보가 아니라 메뉴 이름과 가격만 확인하고 싶습니다.
```연상하기
```SELECT- 조회할 컬럼명
FROM
정답 확인하기
```SELECT menu_name, price FROM menu;```
문제 7. 가격이 5000원 이상인 메뉴 찾기
메뉴 중 가격이 5000원 이상인 메뉴만 조회합니다.
```연상하기
```SELECTFROMWHERE>=
정답 확인하기
```SELECT * FROM menu WHERE price >= 5000;```
WHERE를 사용합니다.
문제 8. 가격 범위로 조회하기
가격이 4500원 이상 5500원 이하인 메뉴만 조회합니다.
```연상하기
```WHEREBETWEEN- 최솟값과 최댓값
정답 확인하기
```SELECT * FROM menu WHERE price BETWEEN 4500 AND 5500;```
BETWEEN은 지정한 두 값의 범위를 조건으로 사용할 수 있습니다.
문제 9. 여러 조건을 동시에 적용하기
가격이 5000원 이상이면서 메뉴 이름에 “라떼”가 포함된 메뉴를 찾습니다.
```연상하기
```WHERE>=ANDLIKE%
정답 확인하기
```SELECT * FROM menu WHERE price >= 5000 AND menu_name LIKE '%라떼%';```
AND를 사용합니다.
문제 10. 여러 메뉴 중 특정 메뉴만 찾기
메뉴 이름이 아메리카노 또는 카페라떼인 데이터만 조회합니다.
```연상하기
```WHEREIN- 괄호 안에 여러 값 지정
정답 확인하기
```SELECT *
FROM menu
WHERE menu_name IN ('아메리카노', '카페라떼');
```
IN을 사용할 수 있습니다.
문제 11. 가격이 낮은 순서로 정렬하기
메뉴를 가격이 낮은 순서부터 높은 순서로 표시합니다.
```연상하기
```ORDER BYASC
정답 확인하기
```SELECT * FROM menu ORDER BY price ASC;```
ASC는 오름차순입니다.
문제 12. 가격이 높은 순서로 정렬하기
메뉴를 가격이 높은 순서부터 낮은 순서로 표시합니다.
```연상하기
```ORDER BYDESC
정답 확인하기
```SELECT * FROM menu ORDER BY price DESC;```
DESC는 내림차순입니다.
문제 13. 가장 비싼 메뉴 하나만 찾기
메뉴를 가격이 높은 순서로 정렬한 뒤 첫 번째 데이터 하나만 확인합니다.
```연상하기
```ORDER BYDESCLIMIT
정답 확인하기
```SELECT * FROM menu ORDER BY price DESC LIMIT 1;```
LIMIT을 조합하면 특정 순위의 데이터를 제한해서 확인할 수 있습니다.
문제 14. 원하는 조건의 데이터를 수정하기
현재 아메리카노 가격이 4500원입니다.
아메리카노 가격을 4800원으로 변경합니다.
다른 메뉴의 가격은 변경되면 안 됩니다.
```연상하기
```UPDATESETWHERE
특정 데이터만 수정하려면 어떤 조건이 필요한지도 생각해 보세요.
정답 확인하기
```UPDATE menu SET price = 4800 WHERE menu_name = '아메리카노';```
UPDATE에서는 WHERE 조건을 빠뜨리지 않는 것이 중요합니다.
이번 연습에서 연결한 MySQL 문법
| 하고 싶은 일 | 사용한 문법 |
|---|---|
| 데이터베이스 목록 확인 | SHOW DATABASES |
| 데이터베이스 선택 | USE |
| 테이블 생성 | CREATE TABLE |
| 데이터 입력 | INSERT INTO |
| 데이터 조회 | SELECT |
| 조건 조회 | WHERE |
| 여러 조건 | AND, OR, NOT |
| 범위 조회 | BETWEEN |
| 여러 값 중 선택 | IN |
| 문자열 검색 | LIKE |
| 오름차순 정렬 | ORDER BY ... ASC |
| 내림차순 정렬 | ORDER BY ... DESC |
| 조회 개수 제한 | LIMIT |
| 데이터 수정 | UPDATE ... SET ... WHERE |
SQL 문제를 보면 바로 코드를 작성하려고 하지 말고, 먼저 “무엇을 하고 싶은가?”를 생각해 보세요.
예를 들어,
- 새로운 데이터를 넣는다 →
INSERT - 데이터를 확인한다 →
SELECT - 조건을 붙인다 →
WHERE - 순서를 바꾼다 →
ORDER BY - 몇 개만 가져온다 →
LIMIT - 기존 데이터를 바꾼다 →
UPDATE
이렇게 문제의 의도 → 필요한 문법 → SQL 완성 순서로 생각하면 긴 문제 설명을 봐도 필요한 SQL을 조금씩 추리할 수 있습니다.
마무리
이번 연습의 목적은 SQL을 외우는 것이 아니라 결과를 보고 필요한 문법을 떠올리는 연습입니다.
처음에는 정답을 바로 보고 따라 해도 괜찮습니다. 중요한 것은 같은 유형의 문제를 만났을 때 “아, 이 상황에서는 WHERE를 쓰는구나.” 라고 연결하는 것입니다.
다음에는 직접 조건을 바꿔 보면서 실행 결과가 어떻게 달라지는지 확인해 보세요.
※ 이 글은 MySQL 학습 과정에서 배운 내용을 바탕으로 작성한 개인 학습 기록입니다. 실습 환경이나 MySQL 버전에 따라 일부 동작이나 결과가 달라질 수 있습니다.
📌 함께 보면 좋은 글
MySQL 기본 명령어 정리 →
https://proprocess-manager.tistory.com/entry/mysql-basic-commands