| INSERT | INSERT INTO 테이블 VALUES (...); |
| UPDATE | UPDATE 테이블 SET 컬럼 = 값 WHERE 조건; |
| DELETE | DELETE FROM 테이블 WHERE 조건; |
| SELECT + ORDER | SELECT * FROM 테이블 ORDER BY 컬럼 DESC; |
| GROUP + HAVING | GROUP BY 컬럼 HAVING COUNT(*) >= 2; |
| LIMIT | ORDER BY 가격 DESC LIMIT 1; |
| 형변환 | CAST(컬럼 AS 타입) or CONVERT(컬럼, 타입) |
| INNER JOIN | FROM A INNER JOIN B ON A.id = B.id |
| VIEW | CREATE VIEW 뷰명 AS SELECT ... |
---
| 키가 문자형인데 숫자 비교해야 함 | WHERE CAST(height AS UNSIGNED) >= ... |
| 숫자를 문자로 바꿀 때 | CAST(price AS CHAR) |
| 날짜로 바꿀 때 | CAST('2024-01-01' AS DATE) |
--
SELECT 그룹기준, 집계함수(컬럼) AS 별명
FROM 테이블
GROUP BY 그룹기준
GROUP BY 만나면 *은 금지!
→ 대신 그룹 기준 컬럼, SUM(), COUNT() 같은 집계함수만
집계함수 종류:
- COUNT(*) ← 갯수
- SUM(price) ← 합계
- AVG(height) ← 평균
- MAX(date) ← 최대값
- MIN(qnt) ← 최소값
상황 1: "데이터를 조회/검색하시오."
무조건 SELECT
1-1. 그냥 테이블 전체를 보여달라고 할 때
- 문제 예시: "member 테이블의 모든 데이터를 조회하시오."
- 공식:
SELECT * FROM 테이블명; - 정답:
SELECT * FROM member;
1-2. 특정 조건에 맞는 데이터만 보여달라고 할 때
- 문제 예시: "buy 테이블에서 상품(product)이 '신발'인 데이터만 조회하시오."
- 공식:
SELECT * FROM 테이블명 WHERE 조건컬럼 = '값'; - 정답:
SELECT * FROM buy WHERE product = '신발';
1-3. 두 개 테이블을 합쳐서 보여달라고 할 때
- 문제 예시: "회원 이름(name)과 그 회원이 구매한 상품(product)을 함께 조회하시오."
- 핵심: 두 테이블을 연결하려면
INNER JOIN과ON이 짝꿍처럼 따라다닌다! - 공식:
SELECT 보고싶은거1, 보고싶은거2 FROM 테이블1 INNER JOIN 테이블2 ON 테이블1.연결고리 = 테이블2.연결고리;- 정답:
SELECT member.name, buy.product FROM member INNER JOIN buy ON member.id = buy.id;-- 두 테이블의 연결고리는 id 컬럼
상황 2: "데이터를 삽입/추가하시오."
이건 새로운 데이터 한 줄을 통째로 넣는 겁니다. 무조건 INSERT를 떠올리세요.
- 문제 예시: "member 테이블에 id는 'ddd', name은 'son'인 회원을 추가하시오."
- 핵심:
INSERT INTO와VALUES는 한 세트! - 공식:
INSERT INTO 테이블명 (컬럼1, 컬럼2) VALUES ('값1', '값2'); - 정답:
INSERT INTO member (id, name) VALUES ('ddd', 'son');
상황 3: "데이터를 수정/변경하시오."
이건 기존에 있던 데이터의 일부만 바꾸는 겁니다. UPDATE
- 문제 예시: "id가 'ddd'인 회원의 주소(address)를 'London'으로 변경하시오."
- 핵심:
UPDATE와SET은 한 세트!WHERE안 쓰면 큰일 남! - 공식:
UPDATE 테이블명 SET 바꿀컬럼 = '새로운값' WHERE 누구의_것인지_알려주는_조건; - 정답:
UPDATE member SET address = 'London' WHERE id = 'ddd';
상황 4: "데이터를 삭제하시오."
이건 기존에 있던 데이터 한 줄을 통째로 지움. DELETE.
- 문제 예시: "id가 'ddd'인 회원의 데이터를 삭제하시오."
- 핵심:
WHERE안 쓰면 큰일 남! - 공식:
DELETE FROM 테이블명 WHERE 누구의_것인지_알려주는_조건; - 정답:
DELETE FROM member WHERE id = 'ddd';
| 하고 싶은 것 | 명령어 (짝꿍 키워드) | 예시 |
|---|---|---|
| 데이터 찾기 | SELECT ... FROM |
SELECT * FROM member; |
| 조건 걸어 찾기 | SELECT ... FROM ... WHERE |
SELECT * FROM member WHERE name='kim'; |
| 연결해서 찾기 | SELECT ... FROM ... INNER JOIN ... ON |
SELECT * FROM member INNER JOIN buy ON member.id=buy.id; |
| 데이터 한 줄 넣기 | INSERT INTO ... VALUES |
INSERT INTO member (id) VALUES ('eee'); |
| 데이터 일부 바꾸기 | UPDATE ... SET ... WHERE |
UPDATE member SET name='park' WHERE id='eee'; |
| 데이터 한 줄 지우기 | DELETE FROM ... WHERE |
DELETE FROM member WHERE id='eee'; |
| (보너스) 컬럼(틀) 추가 | ALTER TABLE ... ADD COLUMN |
ALTER TABLE member ADD COLUMN gender VARCHAR(1); |
| (보너스) 컬럼(틀) 삭제 | ALTER TABLE ... DROP COLUMN |
ALTER TABLE member DROP COLUMN gender; |
"이름이 kim인 사람을 찾아라" -> SELECT 서랍을 열고 WHERE를 꺼낸다.
"새로운 회원을 가입시켜라" -> INSERT 서랍을 열고 VALUES를 꺼낸다.
"기존 회원의 주소를 바꿔라" -> UPDATE 서랍을 열고 SET과 WHERE를 꺼낸다.
--
SQL 짝꿍 공식 암기 세트 (10문제)
가정: member(id, name, address, tel, date) 테이블과 buy(no, id, product, price, qnt) 테이블을 사용합니다.
1. WHERE의 짝꿍: 컬럼명 = '값'
- member 테이블에서 address가 '서울'인 모든 회원의 name을 조회하려고 합니다. WHERE 뒤에 와야 할 조건식을 채우시오.
- SELECT name FROM member WHERE ________;
정답 보기**정답:** `address = '서울'`
2. SET의 짝꿍: 컬럼명 = '새로운 값'
- member 테이블에서 id가 'apple'인 회원의 tel 번호를 '010-1234-5678'로 변경하려고 합니다. SET 뒤에 와야 할 변경식을 채우시오.
- UPDATE member SET ________ WHERE id = 'apple';
정답 보기**정답:** `tel = '010-1234-5678'`
3. ORDER BY의 짝꿍: 컬럼명 [ASC|DESC]
- buy 테이블의 상품들을 price가 낮은 순서(오름차순)대로 정렬하려고 합니다. ORDER BY 뒤에 와야 할 정렬 기준을 채우시오.
- SELECT * FROM buy ORDER BY ________;
정답 보기**정답:** `price ASC` (또는 `price`만 써도 됩니다. ASC는 기본값이라 생략 가능)
4. GROUP BY의 짝꿍: 그룹화할 컬럼명
- buy 테이블에서 product별로 그룹을 묶어, 각 상품의 개수를 세려고 합니다. GROUP BY 뒤에 와야 할 그룹화 기준 컬럼을 채우시오.
- SELECT product, COUNT(*) FROM buy GROUP BY ________;
정답 보기**정답:** `product`
5. INNER JOIN의 짝꿍: ON 테이블1.컬럼 = 테이블2.컬럼
- member 테이블(별칭 m)과 buy 테이블(별칭 b)을 id 컬럼을 기준으로 조인하려고 합니다. ON 뒤에 와야 할 조인 연결 조건을 채우시오.
- SELECT * FROM member m INNER JOIN buy b ON ________;
정답 보기**정답:** `m.id = b.id`
6. HAVING의 짝꿍: 집계함수(컬럼) 조건
- product별로 그룹화한 뒤, 평균 가격(AVG(price))이 50,000원을 넘는 그룹만 남기려고 합니다. HAVING 뒤에 와야 할 그룹 조건을 채우시오.
- SELECT product, AVG(price) FROM buy GROUP BY product HAVING ________;
정답 보기**정답:** `AVG(price) > 50000`
7. LIKE의 짝꿍: '패턴'
- member 테이블에서 tel 번호가 '010'으로 시작하는 회원을 찾으려고 합니다. LIKE 뒤에 와야 할 검색 패턴을 채우시오.
- SELECT * FROM member WHERE tel LIKE ________;
정답 보기**정답:** `'010%'`
8. IN의 짝꿍: (값1, 값2, ...) 또는 (서브쿼리)
- member 테이블에서 address가 '서울' 또는 '경기'인 회원을 찾으려고 합니다. IN 뒤에 와야 할 값 목록을 채우시오.
- SELECT * FROM member WHERE address IN ________;
정답 보기**정답:** `('서울', '경기')`
9. CAST의 짝꿍: (컬럼 AS 데이터타입)
- buy 테이블의 price(숫자)를 정수형(SIGNED INTEGER)으로 타입을 변환하려고 합니다. CAST 뒤에 와야 할 변환 규칙을 채우시오.
- SELECT CAST________ FROM buy;
정답 보기**정답:** `(price AS SIGNED INTEGER)`
10. CREATE VIEW의 짝꿍: 뷰이름 AS SELECT ...
- v_top_price라는 이름의 뷰를 만들려고 합니다. 이 뷰는 buy 테이블에서 price가 100만원 이상인 상품만 보여줍니다. AS 뒤에 와야 할 SELECT 문을 채우시오.
- CREATE VIEW v_top_price AS ________;
정답 보기**정답:** `SELECT * FROM buy WHERE price >= 1000000`
SQL 핵심 구조 파악 문제 (10문제)
가정: member(id, name, address, tel, date) 테이블과 buy(no, id, product, price, qnt) 테이블을 사용합니다.
1. INNER JOIN 과 WHERE
- 목표: '서울'에 사는 회원의 이름(
name)과 그가 구매한 상품명(product)을 조회. SELECT m.name, b.product FROM member m ________ buy b ON m.id = b.id WHERE m.address = '서울';
정답 보기
**정답:** `INNER JOIN`2. WHERE LIKE
- 목표:
member테이블에서name이 '김'으로 시작하고 두 글자인 회원(예: 김씨)을 조회. SELECT * FROM member WHERE name ________ '김_';
정답 보기
**정답:** `LIKE`3. GROUP BY 와 ORDER BY
- 목표: 상품(
product)별로 평균 가격을 계산하고, 그 평균 가격이 높은 순으로 정렬하여 조회. SELECT product, AVG(price) AS avg_p FROM buy ________ BY product ORDER BY avg_p DESC;
정답 보기
**정답:** `GROUP`4. 서브쿼리 (IN 사용)
- 목표:
buy테이블에서 '노트북'을 구매한 기록이 있는 회원의id를 찾아서,member테이블에서 그 회원들의name을 조회. SELECT name FROM member WHERE id ________ (SELECT id FROM buy WHERE product = '노트북');
정답 보기
**정답:** `IN`5. VIEW 생성
- 목표:
buy테이블에서 수량(qnt)이 5개 이상인 구매 내역만 보여주는v_many_items뷰를 생성. CREATE ________ v_many_items AS SELECT * FROM buy WHERE qnt >= 5;
정답 보기
**정답:** `VIEW`6. GROUP BY 와 HAVING
- 목표: 회원(
id)별로 총 구매 금액을 계산하되, 총 구매 금액이 100만원 이상인 회원만 조회. SELECT id, SUM(price * qnt) FROM buy GROUP BY id ________ SUM(price *qnt) >= 1000000;
정답 보기
**정답:** `HAVING`7. ORDER BY (두 개 이상의 컬럼)
- 목표:
member테이블의 모든 회원을address오름차순으로 먼저 정렬하고, 같은address내에서는name내림차순으로 정렬. SELECT * FROM member ________ BY address ASC, name DESC;
정답 보기
**정답:** `ORDER`8. INNER JOIN (연결 조건 ON)
- 목표:
member(m) 테이블과buy(b) 테이블을 조인하여 회원의name과 구매한price조회. SELECT m.name, b.price FROM member m INNER JOIN buy b ________ m.id = b.id;
정답 보기
**정답:** `ON`9. 서브쿼리 (= 사용, 단일 값 반환)
- 목표:
buy테이블에서 가장 비싼(MAX) 상품의price를 알아내고, 그 가격과 동일한 가격의 상품을 조회. SELECT product, price FROM buy WHERE price = (________ MAX(price) FROM buy);
정답 보기
**정답:** `SELECT`10. VIEW 사용
- 목표: 위 5번에서 만든
v_many_items뷰에서product가 '볼펜'인 데이터를 조회. SELECT * ________ v_many_items WHERE product = '볼펜';
정답 보기
**정답:** `FROM`CREATE VIEW 집중 훈련 문제
가정: member(id, name, address, tel, date) 테이블과 buy(no, id, product, price, qnt) 테이블을 사용합니다.
1. CREATE VIEW (기본 구조)
- 목표:
buy테이블의 모든 정보를 담고 있는v_buy_all이라는 이름의 뷰를 생성. ________ VIEW v_buy_all ________ SELECT * FROM buy;
정답 보기
**정답:** `CREATE`, `AS`2. CREATE VIEW (WHERE 조건 포함)
- 목표:
member테이블에서address가 '부산'인 회원들의 정보만 보여주는v_busan_members뷰를 생성. CREATE VIEW v_busan_members AS ________ id, name, tel FROM member WHERE address = '부산';
정답 보기
**정답:** `SELECT`3. CREATE VIEW (JOIN 포함)
- 목표:
member와buy테이블을 조인하여, 회원의name, 구매한product,price정보를 보여주는v_purchase_info뷰를 생성. CREATE VIEW v_purchase_info AS SELECT m.name, b.product, b.price FROM member m ________ ________ buy b ON m.id = b.id;
정답 보기
**정답:** `INNER JOIN`4. CREATE VIEW (GROUP BY 포함)
- 목표:
buy테이블에서product별 총 판매액(price*qnt)을 계산하여 보여주는v_sales_by_product뷰를 생성. CREATE VIEW v_sales_by_product AS SELECT product, SUM(price*qnt) AS total_sales FROM buy ________ ________ product;
정답 보기
**정답:** `GROUP BY`5. CREATE VIEW (복합 쿼리 - 완성형 문제)
- 목표: 다음 요구사항을 만족하는
v_vip_customer_purchase뷰를 생성하는 전체 SQL 문을 작성하시오.member테이블과buy테이블을 조인.- 회원
name과 구매한product를 보여줌. - 단, 구매 가격(
price)이 50만원 이상인 구매 건만 포함.
정답 보기
**정답 SQL:** `CREATE VIEW v_vip_customer_purchase AS SELECT m.name, b.product FROM member m INNER JOIN buy b ON m.id = b.id WHERE b.price >= 500000;`데이터 형변환 핵심 개념 + 실전 문제
1. 숫자 -> 문자 변환 (가장 기본)
- 핵심 개념:
CAST함수를 사용하여 숫자 데이터를 문자열(CHAR 또는 VARCHAR) 데이터로 바꿀 수 있습니다. 이렇게 변환된 데이터는 문자열 함수(CONCAT등)와 함께 사용하거나, 특정 형식의 텍스트로 표현할 때 유용합니다. - 문제 시나리오:
buy테이블의price(숫자) 컬럼을 10자리 문자열(CHAR(10)) 타입으로 변환하여product명과 함께 조회하려고 합니다. - 문제:
SELECT product, ________(price AS CHAR(10)) FROM buy;
정답 보기
**정답:** `CAST`2. 실수 -> 정수 변환 (소수점 버리기)
- 핵심 개념:
CAST함수를 사용하여 실수(FLOAT, DOUBLE, DECIMAL) 데이터를 정수(INTEGER, SIGNED) 데이터로 바꿀 수 있습니다. 이 과정에서 소수점 이하의 값은 반올림 없이 버려집니다. - 문제 시나리오:
buy테이블에 있는 모든 상품 가격의 평균(AVG(price))을 구하고, 그 결과에서 소수점 이하를 버린 정수 부분만 조회하려고 합니다. - 문제:
SELECT ________(AVG(price) AS SIGNED INTEGER) FROM buy;
정답 보기
**정답:** `CAST`3. 문자열 -> 숫자 변환 (계산을 위해)
- 핵심 개념: 때로는 문자열로 저장된 숫자(예: '12345')를 실제 숫자 타입으로 변환하여 덧셈, 뺄셈 등의 산술 연산을 해야 할 때가 있습니다. 이때도
CAST를 사용합니다. - 문제 시나리오:
buy테이블의qnt(수량) 컬럼이 어떤 이유로 문자열(CHAR) 타입으로 저장되어 있다고 가정합니다. 이 문자열qnt를 숫자로 변환하여 1을 더한 값을 조회하려고 합니다. - 문제:
SELECT product, ________(qnt AS SIGNED INTEGER) + 1 FROM buy;
정답 보기
**정답:** `CAST`4. 날짜 -> 문자 변환 (출력 형식 변경)
- 핵심 개념: 날짜(DATE) 또는 날짜시간(DATETIME) 타입의 데이터를 특정 형식의 문자열로 바꿀 때 사용합니다.
CAST를 사용하면 'YYYY-MM-DD' 형태의 기본 문자열로 변환됩니다. - 문제 시나리오:
member테이블의date(날짜) 컬럼을 일반적인 문자열로 변환하여name과 함께 조회하려고 합니다. - 문제:
SELECT name, ________(date AS CHAR) FROM member;
정답 보기
**정답:** `CAST`SQL 실전 대비 문제 세트 1 (10문제)
가정: market 데이터베이스의 member(id, name, address, tel, date) 테이블과 buy(no, id, product, price, qnt) 테이블을 사용합니다.
1. [INSERT] 다음 요구사항에 맞는 데이터를 buy 테이블에 삽입하는 SQL 문을 작성하시오.
- 구매자 id: 'apple'
- 상품명(product): '노트북'
- 가격(price): 1200000
- 수량(qnt): 1
정답 및 해설 보기**정답 SQL:** INSERT INTO buy (id, product, price, qnt) VALUES ('apple', '노트북', 1200000, 1);
해설:
INSERT INTO 구문을 사용하여 buy 테이블에 새로운 구매 데이터를 추가합니다. 각 컬럼명에 맞는 값을 순서대로 VALUES 뒤에 명시합니다.
2. [UPDATE] member 테이블에서 address가 '서울'인 모든 회원의 tel 번호를 '미등록'이라는 문자열로 변경하는 SQL 문을 작성하시오.
정답 및 해설 보기**정답 SQL:** UPDATE member SET tel = '미등록' WHERE address = '서울';
해설:
UPDATE 구문과 WHERE 절을 사용하여 특정 조건(address가 '서울')을 만족하는 모든 행의 tel 컬럼 값을 '미등록'으로 일괄 변경합니다.
3. [DELETE] buy 테이블에서 구매 수량(qnt)이 10개 이상인 모든 구매 내역을 삭제하는 SQL 문을 작성하시오.
정답 및 해설 보기**정답 SQL:** DELETE FROM buy WHERE qnt >= 10;
해설:
DELETE 구문과 WHERE 절을 사용하여 qnt 컬럼의 값이 10 이상인 모든 행을 buy 테이블에서 삭제합니다.
4. [ORDER BY] buy 테이블에서 price가 비싼 순서대로 모든 구매 내역을 정렬하여 product, price 컬럼을 조회하는 SQL 문을 작성하시오.
정답 및 해설 보기**정답 SQL:** SELECT product, price FROM buy ORDER BY price DESC;
해설:
ORDER BY 절을 사용하여 결과를 정렬합니다. DESC는 내림차순(Descendant)을 의미하며, 큰 값부터 작은 값 순서로 정렬합니다. (오름차순은 ASC)
5. [GROUP BY] buy 테이블에서 상품(product)별로 총 판매된 수량(qnt의 합계)을 계산하여, 상품명과 총 판매 수량을 조회하는 SQL 문을 작성하시오.
정답 및 해설 보기**정답 SQL:** SELECT product, SUM(qnt) AS total_qnt FROM buy GROUP BY product;
해설:
GROUP BY product를 사용하여 데이터를 상품별로 그룹화하고, SUM(qnt) 집계 함수를 이용해 각 그룹의 수량 합계를 계산합니다. AS는 결과 컬럼의 이름을 지정합니다.
6. [INNER JOIN] member 테이블과 buy 테이블을 내부 조인하여, id가 'apple'인 회원의 name과 그 회원이 구매한 모든 product 목록을 조회하는 SQL 문을 작성하시오.
정답 및 해설 보기**정답 SQL:** SELECT m.name, b.product FROM member m INNER JOIN buy b ON m.id = b.id WHERE m.id = 'apple';
해설:
두 테이블을 id 컬럼으로 INNER JOIN한 후, WHERE 절을 이용해 member 테이블의 id가 'apple'인 데이터만 필터링하여 원하는 정보를 조회합니다.
7. [형변환] buy 테이블의 price 컬럼(숫자)을 '가격: 1200000원'과 같은 형식의 문자열로 만들어 product와 함께 조회하시오. (MySQL의 CONCAT 함수 활용)
정답 및 해설 보기**정답 SQL:** SELECT product, CONCAT('가격: ', price, '원') AS price_info FROM buy;
해설:
CONCAT 함수는 여러 문자열이나 컬럼 값을 하나로 합쳐줍니다. 숫자 타입인 price 컬럼은 문자열과 합쳐지는 과정에서 자동으로 문자열로 형변환됩니다. 이 문제는 암시적 형변환과 문자열 함수를 동시에 테스트합니다.
8. [서브쿼리] buy 테이블에서 한번이라도 '노트북'을 구매한 기록이 있는 모든 회원의 name을 member 테이블에서 조회하는 SQL 문을 작성하시오. (단, IN과 서브쿼리를 사용할 것)
정답 및 해설 보기**정답 SQL:** SELECT name FROM member WHERE id IN (SELECT id FROM buy WHERE product = '노트북');
해설:
서브쿼리 (SELECT id FROM buy WHERE product = '노트북')가 먼저 실행되어 '노트북'을 구매한 모든 회원의 id 목록을 만듭니다. 메인 쿼리는 이 id 목록에 포함된(IN) 회원의 name을 member 테이블에서 찾아냅니다.
9. [VIEW 생성] member 테이블에서 address가 '경기'인 회원들의 id, name, tel 정보만 담고 있는 v_gyeonggi_members라는 이름의 뷰(VIEW)를 생성하는 SQL 문을 작성하시오.
정답 및 해설 보기**정답 SQL:** CREATE VIEW v_gyeonggi_members AS SELECT id, name, tel FROM member WHERE address = '경기';
해설:
CREATE VIEW 구문을 사용하여 특정 SELECT 문을 가상의 테이블(뷰)로 저장합니다. 이렇게 하면 복잡한 쿼리를 단순하게 재사용할 수 있습니다.
10. [VIEW 사용] 위 9번에서 생성한 v_gyeonggi_members 뷰를 사용하여, tel 번호가 '미등록'인 회원의 name을 조회하는 SQL 문을 작성하시오.
정답 및 해설 보기**정답 SQL:** SELECT name FROM v_gyeonggi_members WHERE tel = '미등록';
해설:
뷰는 생성된 후 일반 테이블처럼 SELECT 문의 FROM 절에서 사용할 수 있습니다. 이미 '경기' 지역 회원으로 필터링된 뷰를 대상으로 추가 조건을 적용하여 데이터를 간단하게 조회합니다.
SQL 기초 다지기 문제 세트 1 (10문제)
가정: member(id, name, address, tel, date) 테이블과 buy(no, id, product, price, qnt) 테이블을 사용합니다.
1. INSERT (기본)
member테이블에id는 'apple',name은 '김사과'인 데이터를 삽입하려고 합니다. 빈칸을 채우시오.________ INTO member (id, name) ________ ('apple', '김사과');
정답 보기 **정답:** `INSERT INTO member (id, name) VALUES ('apple', '김사과');`
2. UPDATE (기본)
member테이블에서id가 'apple'인 회원의address를 '부산'으로 변경하려고 합니다. 빈칸을 채우시오.________ member ________ address = '부산' ________ id = 'apple';
정답 보기 **정답:** `UPDATE member SET address = '부산' WHERE id = 'apple';`
3. DELETE (기본)
buy테이블에서product가 '휴지'인 모든 구매 내역을 삭제하려고 합니다. 빈칸을 채우시오.________ FROM buy ________ product = '휴지';
정답 보기 **정답:** `DELETE FROM buy WHERE product = '휴지';`
4. SELECT 와 ORDER BY
member테이블의 모든 회원을name의 역순(내림차순)으로 정렬하여name과tel을 조회하려고 합니다. 빈칸을 채우시오.SELECT name, tel FROM member ________ ____ name ________;
정답 보기 **정답:** `SELECT name, tel FROM member ORDER BY name DESC;`
5. SELECT 와 GROUP BY
buy테이블에서 각id별로 총 몇 번 구매했는지(구매 건수)를 세려고 합니다.id와 구매 건수를 조회하시오. 빈칸을 채우시오.SELECT id, ________(*) AS '구매건수' FROM buy ________ ____ id;
정답 보기 **정답:** `SELECT id, COUNT(*) AS '구매건수' FROM buy GROUP BY id;`
6. INNER JOIN (기본)
member테이블(별칭 m)과buy테이블(별칭 b)을 내부 조인하여, 회원의name과 구매한product를 조회하려고 합니다. 두 테이블의 연결고리는id컬럼입니다. 빈칸을 채우시오.SELECT m.name, b.product FROM member m ________ ________ buy b ____ m.id = b.id;
정답 보기 **정답:** `SELECT m.name, b.product FROM member m INNER JOIN buy b ON m.id = b.id;`
7. 데이터 형 변환 (CAST)
buy테이블의price(숫자)를 문자열(CHAR)로 변환하여 조회하려고 합니다. 빈칸을 채우시오.SELECT ________(price ____ CHAR) FROM buy;
정답 보기 **정답:** `SELECT CAST(price AS CHAR) FROM buy;`
8. 서브쿼리 (WHERE 절)
- '김사과'라는 회원의
id를member테이블에서 찾고, 그id를 이용해buy테이블에서 해당 회원의 구매 내역을 조회하려고 합니다. 빈칸을 채우시오. SELECT * FROM buy WHERE id = (________ id FROM member ________ name = '김사과');
정답 보기 **정답:** `SELECT * FROM buy WHERE id = (SELECT id FROM member WHERE name = '김사과');`
9. VIEW 생성 (기본)
- '서울'에 사는 회원들만 보여주는
v_seoul_user라는 이름의 뷰를 생성하려고 합니다. 빈칸을 채우시오. ________ ________ v_seoul_user ____ SELECT * FROM member WHERE address = '서울';
정답 보기 **정답:** `CREATE VIEW v_seoul_user AS SELECT * FROM member WHERE address = '서울';`
10. GROUP BY 와 HAVING
- 각
id별로 구매한 총 금액(price의 합계)을 계산하되, 그 총 금액이 100,000원을 초과하는id만 조회하려고 합니다. 빈칸을 채우시오. SELECT id, SUM(price) FROM buy GROUP BY id ________ SUM(price) > 100000;
정답 보기 **정답:** `SELECT id, SUM(price) FROM buy GROUP BY id HAVING SUM(price) > 100000;`
SQL 공식 암기 세트 2 (10문제)
가정: member(id, name, address, tel, date) 테이블과 buy(no, id, product, price, qnt) 테이블을 사용합니다.
1. UPDATE (특정 값으로 변경)
buy테이블에서product가 '모니터'인 모든 상품의price를 200000으로 변경하려고 합니다.________ buy ________ price = 200000 ________ product = '모니터';
정답 보기 **정답:** `UPDATE buy SET price = 200000 WHERE product = '모니터';`
2. ORDER BY (두 가지 조건으로 정렬)
member테이블에서 모든 회원을address순으로 먼저 정렬하고, 같은address내에서는name의 역순으로 정렬하여 모든 정보를 조회하려고 합니다.SELECT * FROM member ________ ________ address ASC, name ________;
정답 보기 **정답:** `SELECT * FROM member ORDER BY address ASC, name DESC;`
3. GROUP BY 와 집계 함수 (AVG)
buy테이블에서 상품(product)별 평균 가격(price)을 계산하여 조회하려고 합니다.SELECT product, ________(price) FROM buy ________ ________ product;
정답 보기 **정답:** `SELECT product, AVG(price) FROM buy GROUP BY product;`
4. INNER JOIN (별칭 사용)
- 회원(
member, 별칭m)의name과, 그 회원이 구매한 상품의price를 조회하려고 합니다. SELECT m.name, b.price ________ member m ________ ________ buy b ________ m.id = b.id;
정답 보기 **정답:** `SELECT m.name, b.price FROM member m INNER JOIN buy b ON m.id = b.id;`
5. WHERE 와 LIKE
member테이블에서name이 '김'으로 시작하는 모든 회원의 정보를 조회하려고 합니다.SELECT * FROM member ________ name ________ '김%';
정답 보기 **정답:** `SELECT * FROM member WHERE name LIKE '김%';`
6. 서브쿼리 와 IN
buy테이블에서price가 100만원 이상인 상품을 구매한 회원의id목록을 먼저 찾고, 그 회원들의name을member테이블에서 조회하려고 합니다.SELECT name FROM member WHERE id ________ (________ id FROM buy ________ price >= 1000000);
정답 보기 **정답:** `SELECT name FROM member WHERE id IN (SELECT id FROM buy WHERE price >= 1000000);`
7. VIEW 사용
- 미리 만들어진
v_seoul_user라는 뷰에서name이 '박서울'인 사람의 정보를 조회하려고 합니다. ________ * ________ v_seoul_user ________ name = '박서울';
정답 보기 **정답:** `SELECT * FROM v_seoul_user WHERE name = '박서울';`
8. 데이터 형 변환 (CONVERT)
buy테이블의qnt(수량, 숫자)를 문자열(CHAR)로 변환하여 조회하려고 합니다.SELECT ________(qnt, ________) FROM buy;
정답 보기 **정답:** `SELECT CONVERT(qnt, CHAR) FROM buy;`
9. DELETE 와 WHERE
member테이블에서tel정보가 없는(NULL) 모든 회원을 삭제하려고 합니다.________ ________ member ________ tel IS ________;
정답 보기 **정답:** `DELETE FROM member WHERE tel IS NULL;`
10. GROUP BY, HAVING, ORDER BY 모두 사용
id별로 구매한 총 금액(price합계)을 계산하고, 그 총액이 50,000원 이상인id만 골라내어, 총액이 적은 순서대로 정렬하여 조회하려고 합니다.SELECT id, SUM(price) AS total FROM buy ________ ________ id ________ SUM(price) >= 50000 ________ ________ total ASC;
정답 보기 **정답:** `SELECT id, SUM(price) AS total FROM buy GROUP BY id HAVING SUM(price) >= 50000 ORDER BY total ASC;`
SQL 실전 대비 문제 세트 1 (10문제)
가정: market 데이터베이스의 member(id, name, address, tel, date) 테이블과 buy(no, id, product, price, qnt) 테이블을 사용합니다.
1. [INSERT] 다음 요구사항에 맞는 데이터를 buy 테이블에 삽입하는 SQL 문을 작성하시오.
- 구매자
id: 'apple' - 상품명(
product): '노트북' - 가격(
price): 1200000 - 수량(
qnt): 1
정답 및 해설 보기 **정답 SQL:** INSERT INTO buy (id, product, price, qnt) VALUES ('apple', '노트북', 1200000, 1);
해설:INSERT INTO 구문을 사용하여 buy 테이블에 새로운 구매 데이터를 추가합니다. 각 컬럼명에 맞는 값을 순서대로 VALUES 뒤에 명시합니다.
2. [UPDATE] member 테이블에서 address가 '서울'인 모든 회원의 tel 번호를 '미등록'이라는 문자열로 변경하는 SQL 문을 작성하시오.
정답 및 해설 보기 **정답 SQL:** UPDATE member SET tel = '미등록' WHERE address = '서울';
해설:UPDATE 구문과 WHERE 절을 사용하여 특정 조건(address가 '서울')을 만족하는 모든 행의 tel 컬럼 값을 '미등록'으로 일괄 변경합니다.
3. [DELETE] buy 테이블에서 구매 수량(qnt)이 10개 이상인 모든 구매 내역을 삭제하는 SQL 문을 작성하시오.
정답 및 해설 보기 **정답 SQL:** DELETE FROM buy WHERE qnt >= 10;
해설:DELETE 구문과 WHERE 절을 사용하여 qnt 컬럼의 값이 10 이상인 모든 행을 buy 테이블에서 삭제합니다.
4. [ORDER BY] buy 테이블에서 price가 비싼 순서대로 모든 구매 내역을 정렬하여 product, price 컬럼을 조회하는 SQL 문을 작성하시오.
정답 및 해설 보기 **정답 SQL:** SELECT product, price FROM buy ORDER BY price DESC;
해설:ORDER BY 절을 사용하여 결과를 정렬합니다. DESC는 내림차순(Descendant)을 의미하며, 큰 값부터 작은 값 순서로 정렬합니다. (오름차순은 ASC)
5. [GROUP BY] buy 테이블에서 상품(product)별로 총 판매된 수량(qnt의 합계)을 계산하여, 상품명과 총 판매 수량을 조회하는 SQL 문을 작성하시오.
정답 및 해설 보기 **정답 SQL:** SELECT product, SUM(qnt) AS total_qnt FROM buy GROUP BY product;
해설:GROUP BY product를 사용하여 데이터를 상품별로 그룹화하고, SUM(qnt) 집계 함수를 이용해 각 그룹의 수량 합계를 계산합니다. AS는 결과 컬럼의 이름을 지정합니다.
6. [INNER JOIN] member 테이블과 buy 테이블을 내부 조인하여, id가 'apple'인 회원의 name과 그 회원이 구매한 모든 product 목록을 조회하는 SQL 문을 작성하시오.
정답 및 해설 보기 **정답 SQL:** SELECT m.name, b.product FROM member m INNER JOIN buy b ON m.id = b.id WHERE m.id = 'apple';
해설:
두 테이블을 id 컬럼으로 INNER JOIN한 후, WHERE 절을 이용해 member 테이블의 id가 'apple'인 데이터만 필터링하여 원하는 정보를 조회합니다.
7. [형변환] buy 테이블의 price 컬럼(숫자)을 '가격: 1200000원'과 같은 형식의 문자열로 만들어 product와 함께 조회하시오. (MySQL의 CONCAT 함수 활용)
정답 및 해설 보기 **정답 SQL:** SELECT product, CONCAT('가격: ', price, '원') AS price_info FROM buy;
해설:CONCAT 함수는 여러 문자열이나 컬럼 값을 하나로 합쳐줍니다. 숫자 타입인 price 컬럼은 문자열과 합쳐지는 과정에서 자동으로 문자열로 형변환됩니다. 이 문제는 암시적 형변환과 문자열 함수를 동시에 테스트합니다.
8. [서브쿼리] buy 테이블에서 한번이라도 '노트북'을 구매한 기록이 있는 모든 회원의 name을 member 테이블에서 조회하는 SQL 문을 작성하시오. (단, IN과 서브쿼리를 사용할 것)
정답 및 해설 보기 **정답 SQL:** SELECT name FROM member WHERE id IN (SELECT id FROM buy WHERE product = '노트북');
해설:
서브쿼리 (SELECT id FROM buy WHERE product = '노트북')가 먼저 실행되어 '노트북'을 구매한 모든 회원의 id 목록을 만듭니다. 메인 쿼리는 이 id 목록에 포함된(IN) 회원의 name을 member 테이블에서 찾아냅니다.
9. [VIEW 생성] member 테이블에서 address가 '경기'인 회원들의 id, name, tel 정보만 담고 있는 v_gyeonggi_members라는 이름의 뷰(VIEW)를 생성하는 SQL 문을 작성하시오.
정답 및 해설 보기 **정답 SQL:** CREATE VIEW v_gyeonggi_members AS SELECT id, name, tel FROM member WHERE address = '경기';
해설:CREATE VIEW 구문을 사용하여 특정 SELECT 문을 가상의 테이블(뷰)로 저장합니다. 이렇게 하면 복잡한 쿼리를 단순하게 재사용할 수 있습니다.
10. [VIEW 사용] 위 9번에서 생성한 v_gyeonggi_members 뷰를 사용하여, tel 번호가 '미등록'인 회원의 name을 조회하는 SQL 문을 작성하시오.
정답 및 해설 보기 **정답 SQL:** SELECT name FROM v_gyeonggi_members WHERE tel = '미등록';
해설:
뷰는 생성된 후 일반 테이블처럼 SELECT 문의 FROM 절에서 사용할 수 있습니다. 이미 '경기' 지역 회원으로 필터링된 뷰를 대상으로 추가 조건을 적용하여 데이터를 간단하게 조회합니다.
'SQL' 카테고리의 다른 글
| [문제] 스토어드 프로시저 (0) | 2025.06.30 |
|---|---|
| 세번째 시험준비 (0) | 2025.06.30 |
| SQL 시험 범위 정리 노트 (0) | 2025.06.20 |
| *두 번째 시험 예상 문제 (0) | 2025.06.20 |
| 공부용 시험문제 (0) | 2025.06.18 |