공부용 시험문제


가상 테이블 구조

이 문제들은 아래와 같은 가상의 테이블을 사용한다고 가정합니다.

  • members (회원 테이블)

    • member_id (회원 아이디, CHAR(8), 기본 키)
    • member_name (회원 이름, VARCHAR(10))
    • join_date (가입일, DATE)
    • city (거주 도시, VARCHAR(10))
    • points (보유 포인트, INT)
  • products (상품 테이블)

    • product_id (상품 번호, INT, 자동 증가, 기본 키)
    • product_name (상품명, VARCHAR(50))
    • category (상품 분류, VARCHAR(20))
    • price (가격, INT)
    • stock (재고, INT)
  • orders (주문 테이블)

    • order_id (주문 번호, INT, 자동 증가, 기본 키)
    • member_id (주문한 회원 아이디, CHAR(8))
    • product_id (주문된 상품 번호, INT)
    • order_quantity (주문 수량, INT)
    • order_date (주문일, DATETIME)

DDL (데이터 정의어) 예상 문제

문제 1: CREATE TABLE 기본

요구사항:products 테이블 명세에 맞게 테이블을 생성하는 SQL문을 완성하세요.

  • product_id는 자동 증가하는 기본 키입니다.
  • product_name은 빈 값을 허용하지 않습니다.
  • price는 값을 입력하지 않으면 기본값으로 0이 들어가야 합니다.
CREATE TABLE products (
    product_id   INT            [___] [___],
    product_name VARCHAR(50)    [___],
    category     VARCHAR(20)    NULL,
    price        INT            [___] 0,
    stock        INT
);
정답 및 해설 보기

정답:

CREATE TABLE products (
    product_id   INT            [AUTO_INCREMENT] [PRIMARY KEY],
    product_name VARCHAR(50)    [NOT NULL],
    category     VARCHAR(20)    NULL,
    price        INT            [DEFAULT] 0,
    stock        INT
);

핵심 개념:

  • AUTO_INCREMENT: 새로운 행이 추가될 때마다 자동으로 1씩 증가하는 값을 생성합니다. PRIMARY KEY와 함께 자주 사용됩니다.
  • PRIMARY KEY: 테이블의 각 행을 고유하게 식별하는 기본 키 제약조건입니다.
  • NOT NULL: 해당 컬럼에 반드시 값이 있어야 함을 의미합니다.
  • DEFAULT: 값을 명시적으로 지정하지 않았을 때 자동으로 입력될 기본값을 설정합니다.

문제 2: CREATE TABLE (FOREIGN KEY 포함)

요구사항:orders 테이블 명세에 맞게 테이블을 생성하세요. member_idmembers 테이블의 member_id를 참조하는 외래 키(Foreign Key)입니다.

CREATE TABLE orders (
    order_id         INT          AUTO_INCREMENT PRIMARY KEY,
    member_id        CHAR(8)      NOT NULL,
    product_id       INT          NOT NULL,
    order_quantity   INT          NOT NULL,
    order_date       DATETIME,
    [___] KEY (member_id) [___] members(member_id)
);
정답 및 해설 보기

정답:

CREATE TABLE orders (
    order_id         INT          AUTO_INCREMENT PRIMARY KEY,
    member_id        CHAR(8)      NOT NULL,
    product_id       INT          NOT NULL,
    order_quantity   INT          NOT NULL,
    order_date       DATETIME,
    [FOREIGN] KEY (member_id) [REFERENCES] members(member_id)
);

핵심 개념:

  • FOREIGN KEY ... REFERENCES ...: 한 테이블의 컬럼이 다른 테이블의 키(주로 기본 키)를 참조하도록 하여 데이터의 무결성을 보장하는 외래 키 제약조건을 설정합니다.

문제 3: ALTER TABLE (컬럼 추가 및 제약조건)

요구사항: 기존 members 테이블에 email이라는 컬럼을 추가하려고 합니다. 이메일은 최대 50자의 가변 길이 문자열이며, 값은 중복될 수 없습니다.

[___] TABLE members
[___] COLUMN email VARCHAR(50) [___];
정답 및 해설 보기

정답:

[ALTER] TABLE members
[ADD] COLUMN email VARCHAR(50) [UNIQUE];

참고: ADD COLUMN에서 COLUMN 키워드는 생략 가능할 때도 있습니다. ADD email ...

핵심 개념:

  • ALTER TABLE ... ADD COLUMN: 기존 테이블의 구조를 변경하여 새로운 컬럼을 추가하는 명령어입니다.
  • UNIQUE: 해당 컬럼의 모든 값이 고유해야 한다는 제약조건입니다.


DML (데이터 조작어) 예상 문제

문제 4: INSERT

요구사항: members 테이블에 'apple'이라는 아이디의 '김사과' 회원을 '서울' 거주자로 추가하세요. (가입일과 포인트는 지정하지 않음)

[___] INTO members (member_id, member_name, city)
[___] ('apple', '김사과', '서울');
정답 및 해설 보기

정답:

[INSERT] INTO members (member_id, member_name, city)
[VALUES] ('apple', '김사과', '서울');

핵심 개념:

  • INSERT INTO ... VALUES: 테이블에 새로운 데이터를 한 행씩 추가하는 가장 기본적인 구문입니다. 컬럼 목록을 지정하고, VALUES 뒤에 그 순서에 맞는 값들을 넣어줍니다.

문제 5: UPDATE

요구사항: members 테이블에서 member_id가 'apple'인 회원의 거주 도시를 '부산'으로, 포인트를 1000점으로 수정하세요.

[___] members
[___] city = '부산', points = 1000
[___] member_id = 'apple';
정답 및 해설 보기

정답:

[UPDATE] members
[SET] city = '부산', points = 1000
[WHERE] member_id = 'apple';

핵심 개념:

  • UPDATE ... SET ... WHERE: WHERE 절의 조건을 만족하는 행의 데이터를 SET 절에 명시된 값으로 변경합니다. WHERE를 생략하면 모든 행이 변경되므로 매우 주의해야 합니다.

문제 6: SELECT (WHERE 조건 - AND, 비교 연산자)

요구사항: products 테이블에서 category가 '전자제품'이면서 price가 1,000,000원 이상인 상품의 이름과 가격을 조회하세요.

SELECT product_name, price
FROM products
WHERE category = '전자제품' [___] price [___] 1000000;
정답 및 해설 보기

정답:

SELECT product_name, price
FROM products
WHERE category = '전자제품' [AND] price [>=] 1000000;

핵심 개념:

  • WHERE [조건1] AND [조건2]: 두 조건을 모두 만족하는 데이터를 필터링합니다.
  • >=: '크거나 같다'는 의미의 비교 연산자입니다.

문제 7: SELECT (WHERE 조건 - IN, LIKE)

요구사항: members 테이블에서 거주 도시(city)가 '서울' 또는 '경기' 또는 '인천'에 해당하고, 이름(member_name)이 '이'씨인 회원의 모든 정보를 조회하세요.

SELECT *
FROM members
WHERE city [___] ('서울', '경기', '인천') AND member_name [___] '이%';
정답 및 해설 보기

정답:

SELECT *
FROM members
WHERE city [IN] ('서울', '경기', '인천') AND member_name [LIKE] '이%';

핵심 개념:

  • IN: OR 연산을 여러 번 사용하는 것보다 간결하게 목록에 포함된 값들 중 하나와 일치하는 데이터를 찾습니다.
  • LIKE: 문자열의 패턴 매칭에 사용됩니다. %는 0개 이상의 모든 문자를 의미하므로 '이%'는 '이'로 시작하는 모든 이름을 찾습니다.

문제 8: SELECT (ORDER BY, LIMIT)

요구사항: products 테이블에서 상품을 가격(price)이 비싼 순서대로 정렬하여 상위 5개만 조회하세요.

SELECT product_name, price
FROM products
[___] BY price [___]
[___] 5;
정답 및 해설 보기

정답:

SELECT product_name, price
FROM products
[ORDER] BY price [DESC]
[LIMIT] 5;

핵심 개념:

  • ORDER BY: 조회된 결과를 특정 컬럼 기준으로 정렬합니다.
  • DESC: 내림차순(큰 값부터 작은 값 순)으로 정렬합니다. (오름차순은 ASC)
  • LIMIT: 조회 결과의 행 수를 제한합니다. ORDER BY와 함께 사용하면 상위 N개를 가져오는 데 유용합니다.

문제 9: SELECT (GROUP BY, 집계 함수)

요구사항: orders 테이블에서 각 회원(member_id)별로 총 주문 수량(order_quantity의 합계)을 계산하여 조회하세요.

SELECT member_id, [___](order_quantity)
FROM orders
[___] BY member_id;
정답 및 해설 보기

정답:

SELECT member_id, [SUM](order_quantity)
FROM orders
[GROUP] BY member_id;

핵심 개념:

  • GROUP BY: 지정된 컬럼을 기준으로 데이터를 그룹화합니다.
  • SUM(): 그룹화된 각 그룹에 대해 지정된 컬럼의 합계를 계산하는 집계 함수입니다.

문제 10: SELECT (GROUP BY, HAVING)

요구사항: 각 회원(member_id)별로 총 주문 수량이 10개를 초과하는 회원들만 찾아서, 그 회원의 아이디와 총 주문 수량을 조회하세요.

SELECT member_id, SUM(order_quantity)
FROM orders
GROUP BY member_id
[___] [___](order_quantity) > 10;
정답 및 해설 보기

정답:

SELECT member_id, SUM(order_quantity)
FROM orders
GROUP BY member_id
[HAVING] [SUM](order_quantity) > 10;

핵심 개념:

  • HAVING: GROUP BY로 그룹화된 결과에 대해 조건을 적용하여 필터링합니다. WHERE는 그룹화 이전에 개별 행에 대한 조건을, HAVING은 그룹화 이후에 그룹 자체에 대한 조건을 적용한다는 차이점이 매우 중요합니다.


'SQL' 카테고리의 다른 글

SQL 시험 범위 정리 노트  (0) 2025.06.20
*두 번째 시험 예상 문제  (0) 2025.06.20
6/18 SQL 시험 범위 요약표  (0) 2025.06.16
스토어드 프로시저  (0) 2025.06.13
[SQL][25.06.12] 176p 내부 조인 ~ 312p  (0) 2025.06.12