본문 바로가기

Study/SQL

[sql-practice] SQL 문제 풀이 (1)

개요

  • SQL 문법 체득을 위해 sql-practice의 각 문제 풀이 과정을 기록함

출처

난이도

  •  EASY 

스키마

schema of hospital.db from https://www.sql-practice.com/

목차

  • 문제 #1
    • 지문
    • 난이도
    • 현황
    • 풀이
    • 정답
    • 개선할 점
  • 문제 #2
    • 지문
    • 난이도
    • 현황
    • 풀이
    • 정답
    • 개선할 점
  • 분석
    • 문법
    • 실행 순서
    • 개선할 점
    • 기타

문제 #1

  • 지문
    • Show first name, last name, and gender of patients whose gender is 'M'
  • 현황
    •  COMPLETED 
  • 풀이
SELECT first_name, last_name, gender FROM patients
WHERE gender == 'M'
  • 정답
SELECT
    first_name,
    last_name,
    gender
FROM patients
WHERE gender = 'M';
  • 개선할 점
    • = (equals)
      • 표준 SQL 동등 비교 연산자는 =
      • MySQL / PostgreSQL / SQL server / Oracle에서 == 는 대부분 오류
      • 이식성/표준성을 고려하여 비권장
    • ; (semicolon)
      • 스크립트 파일로 여러 쿼리 실행 및 배치/마이그레이션/리포트 자동화에서 실행 시 쿼리 종결 명확히 하는 습관이 실무 안정성을 높임
    • 줄바꿈 및 들여쓰기
      • 컬럼 추가/삭제 용이성 및 SQL 키워드 구조 파악 등 유지보수를 위해 포맷팅을 준수해야 함

문제 #2

  • 지문
    • Show first name, last name of patients who does not have allergies. (null)
  • 현황
    •  COMPLETED 
  • 풀이
SELECT
    first_name,
    last_name
FROM patients
WHERE allergies IS null;
  • 정답
SELECT
  first_name,
  last_name
FROM patients
WHERE allergies IS NULL;
  • 개선할 점
    • NULL
      • 실무에서는 예약어(키워드)는 대문자로 두는 컨벤션
      • 리뷰 및 유지보수, 코드 스타일 통일 측면에서 용이
      • 독자/리뷰어로 하여금 해당 코드가 값인지 키워드인지 즉시 인지 가능
      • 특히  = NULL 은 SQL 3-valued loigc으로 인해 제대로 동작하지 않으므로 NULL 비교는 항상  IS  IS NOT  사용해야 함

문제 #3

  • 지문
    • Show first name of patients that start with the letter 'C'
  • 풀이
SELECT
     first_name
FROM patients
WHERE first_name LIKE 'C%';
  • 정답
-- Solutions (1/2)
SELECT
  first_name
FROM
  patients
WHERE
  first_name LIKE 'C%';
  
-- Solutions (2/2)
SELECT first_name
FROM patients
WHERE substring(first_name, 1, 1) = 'C'

문제 #4

  • 지문
    • Show first name and last name of patients that weight within the range of 100 to 120 (inclusive)
  • 풀이
SELECT
    first_name,
    last_name
FROM patients
WHERE weight >= 100 AND weight <= 120;
  • 정답
-- Solutions (1/2)
SELECT
  first_name,
  last_name
FROM patients
WHERE weight BETWEEN 100 AND 120;

-- Solutions (2/2)
SELECT
  first_name,
  last_name
FROM patients
WHERE weight >= 100 AND weight <= 120;

문제 #5

  • 지문
    • Update the patients table for the allergies column. If the patient's allergies is null then replace it with 'NKA'
  • 풀이
UPDATE
    patients
    SET allergies = 'NKA'
WHERE allergies IS NULL;
  • 정답
UPDATE patients
SET allergies = 'NKA'
WHERE allergies IS NULL;

문제 #6

  • 지문
    • Show first name and last name concatinated into one column to show their full name.
  • 풀이
select
	CONCAT(first_name, ' ', last_name) AS full_name
FROM
	patients;
  • 정답
-- Solutions (1/2)
SELECT
  CONCAT(first_name, ' ', last_name) AS full_name
FROM patients;

-- Solutions (2/2)
SELECT first_name || ' ' || last_name
FROM patients;

문제 #7

  • 지문
    • Show first name, last name, and the full province name of each patient.
    • Example: 'Ontario' instead of 'ON'
  • 풀이
select
    patients.first_name,
    patients.last_name,
    province_names.province_name
FROM
    patients
LEFT JOIN
    province_names
ON patients.province_id = province_names.province_id;
  • 정답
SELECT
  first_name,
  last_name,
  province_name
FROM patients
  JOIN province_names ON province_names.province_id = patients.province_id;

분석

  • 문법
    • SELECT
      • 데이터베이스에서 데이터 조회 시 사용
      • 특정 컬럼명 대신 *로써 모든 컬럼 조회 가능
    • FROM
      • 참조할 데이터베이스 가져오기
    • WHERE
      • 조회 조건을 설정함으로써 조회할 데이터 필터링
    • -- ...(texts)...
      • 단일 행 주석
    • /* ...(texts)... */
      • 다중 행 주석
  • 실행 순서
    • FROM
      • 데이터베이스에서 데이터를 가져올 테이블 지정
      • 해당 단계에서 조인 (Join) 연산 수행됨
    • WHERE
      • 지정 테이블에서 선택된 데이터에 대해 조건 적용하여 필터링
      • 해당 단계에서 조건 만족 데이터만 선택됨
    • GROUP BY
      • 데이터 그룹화
      • 같은 값을 가진 데이터들을 하나의 그룹으로 묶어 집계 함수 사용 가능하게 함
    • HAVING
      • 생성된 그룹에 대해 조건 적용
      • 그룹화된 데이터 중 조건 만족하는 그룹만 선택됨
    • SELECT
      • 최종적으로 조회할 열을 지정
    • ORDER BY
      • 최종 결과 정렬
      • 지정 열을 기준으로 오름차순 / 내림차순으로 정렬됨
    • LIMIT (또는 ROWNUM)
      • 최종 결과에서 반환할 행의 개수를 제한함
      • Oracle에서는 ROWNUM 사용하여 결과 개수 조절 가능
  • 기타
    • SQL은 대소문자 구별하지 않는 언어이나, 일반적으로 키워드는 가독성 향상을 위해 대문자 작성이 관례 → 쿼리 구조의 명확성 확보 및 의도 전달 용이
    • 테이블명, 컬럼명 등 식별자는 대소문자 구분
    • Oracle SQL에서는 기본적으로 식별자를 대문자로 변환하여 저장
    • 식별자를 대소문자 혼합하여 사용 시 큰따옴표로 감싸야 함
    • 주석은 SQL 쿼리 실행에 영향을 미치지 않으며, 코드의 특정 부분에 설명을 추가하여 가독성을 높이고 의도나 기능 설명을 통해 코드 이해에 도움을 줌
    • 주석 내용은 간결하고 명확하게 작성해야 함

 

반응형

'Study > SQL' 카테고리의 다른 글

[sql-practice] SQL 문제 풀이 (6)  (0) 2026.04.03
[sql-practice] SQL 문제 풀이 (5)  (0) 2026.04.03
[sql-practice] SQL 문제 풀이 (4)  (0) 2026.01.31
[sql-practice] SQL 문제 풀이 (3)  (0) 2026.01.31
[sql-practice] SQL 문제 풀이 (2)  (0) 2026.01.25