MySQL 100단계코드 먼저 학습 → 5지선다(옳은 것 3개) → 자동채점·TXT 저장
OneCompiler 열기
응답 0 / 100

OneCompiler MySQL
100예제 코드이해 자동평가

각 예제의 MySQL 코드를 먼저 읽고 OneCompiler에서 실행한 뒤, 바로 아래의 5지선다형 문항에서 옳은 설명 3개를 선택하세요. 100문항 채점 후 문항별 정오답과 상세 풀이가 포함된 TXT 결과 파일이 자동 생성됩니다.

1. 학번·이름 입력
2. 코드 먼저 읽고 실행
3. 옳은 보기 정확히 3개 선택
4. 채점·상세풀이·TXT 저장
100개 예제 표시 중기초 → 중급 → 고급
#001기초SELECT

첫 SELECT

OneCompiler에 복사하여 실행
SELECT 'Hello, MySQL!' AS message;
상세 설명

테이블 없이도 SELECT로 문자열을 출력할 수 있습니다. AS는 결과 열의 별칭입니다.

예상 결과: Hello, MySQL!
문항 001 · 실행 결과 분석형 · 옳은 것 3개를 고르시오.

위 '첫 SELECT' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#002기초SELECT

숫자 계산

OneCompiler에 복사하여 실행
SELECT 10+20 AS sum_value, 10*20 AS product_value, 20/4 AS quotient_value;
상세 설명

SELECT 안에서 산술 연산을 수행할 수 있습니다. 쉼표로 여러 계산 결과를 한 행에 표시합니다.

예상 결과: 30 / 200 / 5
문항 002 · 구문 역할 판별형 · 옳은 것 3개를 고르시오.

위 '숫자 계산' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#003기초함수

CONCAT 문자열 결합

OneCompiler에 복사하여 실행
SELECT CONCAT('My','SQL') AS word, CONCAT('안녕',' ','데이터베이스') AS greeting;
상세 설명

CONCAT()은 여러 문자열을 순서대로 이어 붙입니다.

예상 결과: MySQL / 안녕 데이터베이스
문항 003 · 오류 예방형 · 옳은 것 3개를 고르시오.

위 'CONCAT 문자열 결합' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#004기초함수

대소문자 변환

OneCompiler에 복사하여 실행
SELECT UPPER('mysql') AS upper_text, LOWER('DATABASE') AS lower_text;
상세 설명

UPPER()는 대문자, LOWER()는 소문자로 바꿉니다.

예상 결과: MYSQL / database
문항 004 · 코드 추론형 · 옳은 것 3개를 고르시오.

위 '대소문자 변환' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#005기초함수

문자열 길이

OneCompiler에 복사하여 실행
SELECT CHAR_LENGTH('데이터베이스') AS chars, LENGTH('MySQL') AS bytes;
상세 설명

CHAR_LENGTH()는 문자 수를, LENGTH()는 바이트 수를 반환합니다. 한글에서는 두 개념의 차이를 관찰하기 좋습니다.

문항 005 · 개념 연결형 · 옳은 것 3개를 고르시오.

위 '문자열 길이' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#006기초함수

ROUND CEIL FLOOR

OneCompiler에 복사하여 실행
SELECT ROUND(3.141592,2) AS r, CEIL(3.14) AS c, FLOOR(3.99) AS f;
상세 설명

ROUND()는 반올림, CEIL()은 올림, FLOOR()는 내림입니다.

예상 결과: 3.14 / 4 / 3
문항 006 · 조건 변화 예측형 · 옳은 것 3개를 고르시오.

위 'ROUND CEIL FLOOR' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#007기초연산자

나머지 MOD

OneCompiler에 복사하여 실행
SELECT MOD(17,5) AS r1, 17 % 5 AS r2;
상세 설명

MOD(a,b)와 %는 모두 나머지를 구합니다.

예상 결과: 2 / 2
문항 007 · 데이터 흐름 분석형 · 옳은 것 3개를 고르시오.

위 '나머지 MOD' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#008기초날짜

현재 날짜와 시간

OneCompiler에 복사하여 실행
SELECT CURDATE() AS today, CURTIME() AS current_time, NOW() AS current_datetime;
상세 설명

CURDATE(), CURTIME(), NOW()를 이용해 실행 시점의 날짜와 시간을 확인합니다.

학습 포인트: 실행할 때마다 값이 달라질 수 있습니다.
문항 008 · SQL 의미 판별형 · 옳은 것 3개를 고르시오.

위 '현재 날짜와 시간' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#009기초조건

IF 조건식

OneCompiler에 복사하여 실행
SELECT IF(85>=60,'PASS','FAIL') AS result;
상세 설명

IF(조건, 참값, 거짓값)는 간단한 조건 분기를 표현합니다.

예상 결과: PASS
문항 009 · 실행 순서 분석형 · 옳은 것 3개를 고르시오.

위 'IF 조건식' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#010기초조건

CASE 다중 조건

OneCompiler에 복사하여 실행
SELECT CASE WHEN 92>=90 THEN 'A' WHEN 92>=80 THEN 'B' ELSE 'C' END AS grade;
상세 설명

CASE는 여러 WHEN 조건을 위에서부터 검사해 첫 번째 참인 결과를 반환합니다.

예상 결과: A
문항 010 · 응용 판단형 · 옳은 것 3개를 고르시오.

위 'CASE 다중 조건' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#011기초DDL

학생 테이블 만들기

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student; CREATE TABLE student(id INT PRIMARY KEY,name VARCHAR(20) NOT NULL,grade INT,score INT); SHOW TABLES;
상세 설명

CREATE TABLE로 열과 자료형을 정의합니다. PRIMARY KEY는 행을 유일하게 식별하고 NOT NULL은 필수 입력을 뜻합니다.

문항 011 · 실행 결과 분석형 · 옳은 것 3개를 고르시오.

위 '학생 테이블 만들기' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#012기초INSERT

한 행 INSERT

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student; CREATE TABLE student(id INT PRIMARY KEY,name VARCHAR(20),score INT); INSERT INTO student(id,name,score) VALUES(1,'홍길동',95); SELECT * FROM student;
상세 설명

INSERT INTO ... VALUES로 한 행을 삽입합니다. 열 이름을 명시하면 값의 의미가 분명합니다.

문항 012 · 구문 역할 판별형 · 옳은 것 3개를 고르시오.

위 '한 행 INSERT' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#013기초INSERT

여러 행 INSERT

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student; CREATE TABLE student(id INT PRIMARY KEY,name VARCHAR(20),score INT); INSERT INTO student VALUES (1,'홍길동',95),(2,'김철수',88),(3,'이영희',76); SELECT * FROM student;
상세 설명

VALUES 뒤에 여러 괄호를 쉼표로 이어 여러 행을 한 번에 삽입합니다.

문항 013 · 오류 예방형 · 옳은 것 3개를 고르시오.

위 '여러 행 INSERT' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#014기초DDL

AUTO_INCREMENT

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS book; CREATE TABLE book(id INT AUTO_INCREMENT PRIMARY KEY,title VARCHAR(50) NOT NULL); INSERT INTO book(title) VALUES('데이터베이스 입문'),('SQL 실습'); SELECT * FROM book;
상세 설명

AUTO_INCREMENT는 행 삽입 시 자동 증가 번호를 생성합니다.

문항 014 · 코드 추론형 · 옳은 것 3개를 고르시오.

위 'AUTO_INCREMENT' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#015기초DDL

DEFAULT 값

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS member; CREATE TABLE member(id INT PRIMARY KEY,name VARCHAR(20),active BOOLEAN DEFAULT TRUE); INSERT INTO member(id,name) VALUES(1,'민수'); SELECT * FROM member;
상세 설명

DEFAULT는 값을 생략했을 때 자동으로 사용할 기본값입니다.

학습 포인트: MySQL의 BOOLEAN은 보통 TINYINT(1) 형태로 다뤄집니다.
문항 015 · 개념 연결형 · 옳은 것 3개를 고르시오.

위 'DEFAULT 값' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#016기초NULL

NULL 저장

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS member; CREATE TABLE member(id INT PRIMARY KEY,name VARCHAR(20),email VARCHAR(50)); INSERT INTO member VALUES(1,'민수',NULL),(2,'서연','seo@example.com'); SELECT * FROM member;
상세 설명

NULL은 값이 없거나 알 수 없음을 나타냅니다. 빈 문자열이나 숫자 0과 다릅니다.

문항 016 · 조건 변화 예측형 · 옳은 것 3개를 고르시오.

위 'NULL 저장' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#017기초DDL

UNIQUE 제약조건

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS account; CREATE TABLE account(id INT PRIMARY KEY,username VARCHAR(30) UNIQUE); INSERT INTO account VALUES(1,'alpha'),(2,'beta'); SELECT * FROM account;
상세 설명

UNIQUE는 지정한 열에 중복값이 들어가는 것을 막습니다.

문항 017 · 데이터 흐름 분석형 · 옳은 것 3개를 고르시오.

위 'UNIQUE 제약조건' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#018기초DDL

CHECK 제약조건

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student; CREATE TABLE student(id INT PRIMARY KEY,name VARCHAR(20),score INT CHECK(score BETWEEN 0 AND 100)); INSERT INTO student VALUES(1,'홍길동',95); SELECT * FROM student;
상세 설명

CHECK는 허용할 값의 조건을 테이블 정의에 포함합니다. 여기서는 점수를 0~100으로 제한합니다.

문항 018 · SQL 의미 판별형 · 옳은 것 3개를 고르시오.

위 'CHECK 제약조건' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#019기초DDL

DESC 테이블 구조

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student; CREATE TABLE student(id INT PRIMARY KEY,name VARCHAR(20),score INT); DESC student;
상세 설명

DESC 또는 DESCRIBE는 열 이름, 자료형, NULL 허용 여부, 키 정보를 보여 줍니다.

문항 019 · 실행 순서 분석형 · 옳은 것 3개를 고르시오.

위 'DESC 테이블 구조' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#020기초DDL

ALTER TABLE 열 추가

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student; CREATE TABLE student(id INT PRIMARY KEY,name VARCHAR(20)); ALTER TABLE student ADD score INT; DESC student;
상세 설명

ALTER TABLE ... ADD로 기존 테이블에 새 열을 추가합니다.

문항 020 · 응용 판단형 · 옳은 것 3개를 고르시오.

위 'ALTER TABLE 열 추가' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#021기초SELECT

전체 행 조회

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
SELECT * FROM student;
상세 설명

SELECT *는 모든 열을 조회합니다.

문항 021 · 실행 결과 분석형 · 옳은 것 3개를 고르시오.

위 '전체 행 조회' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#022기초SELECT

필요한 열만 조회

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
SELECT name,score FROM student;
상세 설명

필요한 열만 지정하면 결과가 간결하고 의도가 분명합니다.

문항 022 · 구문 역할 판별형 · 옳은 것 3개를 고르시오.

위 '필요한 열만 조회' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#023기초SELECT

열 별칭 AS

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
SELECT name AS 학생이름,score AS 점수 FROM student;
상세 설명

AS는 결과에 표시될 열 이름을 바꿉니다. 원본 열 이름은 그대로입니다.

문항 023 · 오류 예방형 · 옳은 것 3개를 고르시오.

위 '열 별칭 AS' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#024기초WHERE

WHERE 90점 이상

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
SELECT * FROM student WHERE score>=90;
상세 설명

WHERE는 조건을 만족하는 행만 선택합니다.

문항 024 · 코드 추론형 · 옳은 것 3개를 고르시오.

위 'WHERE 90점 이상' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#025기초WHERE

AND 조건

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
SELECT * FROM student WHERE grade=2 AND score>=85;
상세 설명

AND는 모든 조건이 참이어야 합니다.

문항 025 · 개념 연결형 · 옳은 것 3개를 고르시오.

위 'AND 조건' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#026기초WHERE

OR 조건

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
SELECT * FROM student WHERE club='과학' OR club='로봇';
상세 설명

OR는 하나 이상의 조건이 참이면 선택합니다.

문항 026 · 조건 변화 예측형 · 옳은 것 3개를 고르시오.

위 'OR 조건' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#027기초WHERE

NOT 조건

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
SELECT * FROM student WHERE NOT club='코딩';
상세 설명

NOT은 조건의 결과를 반대로 만듭니다.

문항 027 · 데이터 흐름 분석형 · 옳은 것 3개를 고르시오.

위 'NOT 조건' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#028기초WHERE

BETWEEN 범위

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
SELECT name,score FROM student WHERE score BETWEEN 70 AND 90;
상세 설명

BETWEEN은 양 끝값을 포함하는 범위를 검사합니다.

문항 028 · SQL 의미 판별형 · 옳은 것 3개를 고르시오.

위 'BETWEEN 범위' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#029기초WHERE

IN 여러 후보

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
SELECT * FROM student WHERE club IN('과학','로봇');
상세 설명

IN은 여러 후보값 중 하나와 일치하는지 검사합니다.

문항 029 · 실행 순서 분석형 · 옳은 것 3개를 고르시오.

위 'IN 여러 후보' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#030기초WHERE

LIKE 패턴 검색

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
SELECT * FROM student WHERE name LIKE '김%';
상세 설명

%는 길이에 상관없이 임의의 문자열을 뜻합니다.

문항 030 · 응용 판단형 · 옳은 것 3개를 고르시오.

위 'LIKE 패턴 검색' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#031기초정렬

ORDER BY 오름차순

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
SELECT name,score FROM student ORDER BY score ASC;
상세 설명

ASC는 작은 값부터 큰 값 순입니다.

문항 031 · 실행 결과 분석형 · 옳은 것 3개를 고르시오.

위 'ORDER BY 오름차순' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#032기초정렬

ORDER BY 내림차순

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
SELECT name,score FROM student ORDER BY score DESC;
상세 설명

DESC는 큰 값부터 작은 값 순입니다.

문항 032 · 구문 역할 판별형 · 옳은 것 3개를 고르시오.

위 'ORDER BY 내림차순' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#033기초정렬

여러 열 정렬

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
SELECT grade,name,score FROM student ORDER BY grade ASC,score DESC;
상세 설명

앞 열부터 정렬하고 동률일 때 다음 열을 사용합니다.

문항 033 · 오류 예방형 · 옳은 것 3개를 고르시오.

위 '여러 열 정렬' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#034기초정렬

LIMIT 상위 3명

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
SELECT name,score FROM student ORDER BY score DESC LIMIT 3;
상세 설명

ORDER BY와 LIMIT를 결합해 상위 N개 행을 얻습니다.

문항 034 · 코드 추론형 · 옳은 것 3개를 고르시오.

위 'LIMIT 상위 3명' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#035기초SELECT

DISTINCT 중복 제거

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
SELECT DISTINCT club FROM student;
상세 설명

DISTINCT는 중복 결과를 제거합니다.

문항 035 · 개념 연결형 · 옳은 것 3개를 고르시오.

위 'DISTINCT 중복 제거' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#036기초UPDATE

UPDATE 한 행

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
UPDATE student SET score=90 WHERE id=2; SELECT * FROM student WHERE id=2;
상세 설명

UPDATE는 기존 값을 수정합니다. WHERE가 없으면 모든 행이 바뀔 수 있습니다.

문항 036 · 조건 변화 예측형 · 옳은 것 3개를 고르시오.

위 'UPDATE 한 행' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#037기초UPDATE

UPDATE 여러 열

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
UPDATE student SET grade=2,score=80 WHERE id=3; SELECT * FROM student WHERE id=3;
상세 설명

SET에서 쉼표로 여러 열을 동시에 수정할 수 있습니다.

문항 037 · 데이터 흐름 분석형 · 옳은 것 3개를 고르시오.

위 'UPDATE 여러 열' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#038기초DELETE

DELETE 조건 삭제

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
DELETE FROM student WHERE score<70; SELECT * FROM student;
상세 설명

DELETE는 조건에 맞는 행을 삭제합니다. WHERE 생략에 특히 주의합니다.

문항 038 · SQL 의미 판별형 · 옳은 것 3개를 고르시오.

위 'DELETE 조건 삭제' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#039기초NULL

IS NULL 검사

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS member; CREATE TABLE member(id INT PRIMARY KEY,name VARCHAR(20),phone VARCHAR(20)); INSERT INTO member VALUES(1,'민수',NULL),(2,'서연','010-1234'); SELECT * FROM member WHERE phone IS NULL;
상세 설명

NULL은 = NULL이 아니라 IS NULL로 검사합니다.

문항 039 · 실행 순서 분석형 · 옳은 것 3개를 고르시오.

위 'IS NULL 검사' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#040기초NULL

COALESCE NULL 대체

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS member; CREATE TABLE member(id INT PRIMARY KEY,name VARCHAR(20),phone VARCHAR(20)); INSERT INTO member VALUES(1,'민수',NULL),(2,'서연','010-1234'); SELECT name,COALESCE(phone,'미등록') AS phone FROM member;
상세 설명

COALESCE는 왼쪽부터 첫 번째 NULL이 아닌 값을 반환합니다.

문항 040 · 응용 판단형 · 옳은 것 3개를 고르시오.

위 'COALESCE NULL 대체' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#041중급집계

COUNT 행 개수

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
SELECT COUNT(*) AS student_count FROM student;
상세 설명

COUNT(*)는 전체 행 수를 셉니다.

문항 041 · 실행 결과 분석형 · 옳은 것 3개를 고르시오.

위 'COUNT 행 개수' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#042중급집계

SUM AVG

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
SELECT SUM(score) AS total,AVG(score) AS average FROM student;
상세 설명

SUM은 합계, AVG는 평균입니다.

문항 042 · 구문 역할 판별형 · 옳은 것 3개를 고르시오.

위 'SUM AVG' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#043중급집계

MIN MAX

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
SELECT MIN(score) AS min_score,MAX(score) AS max_score FROM student;
상세 설명

MIN과 MAX는 최솟값과 최댓값입니다.

문항 043 · 오류 예방형 · 옳은 것 3개를 고르시오.

위 'MIN MAX' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#044중급GROUP BY

학년별 평균

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
SELECT grade,ROUND(AVG(score),1) AS avg_score FROM student GROUP BY grade;
상세 설명

GROUP BY로 학년별 그룹을 만들고 각 그룹 평균을 계산합니다.

문항 044 · 코드 추론형 · 옳은 것 3개를 고르시오.

위 '학년별 평균' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#045중급GROUP BY

동아리별 인원

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
SELECT club,COUNT(*) AS people FROM student GROUP BY club;
상세 설명

같은 동아리를 그룹으로 묶어 인원 수를 계산합니다.

문항 045 · 개념 연결형 · 옳은 것 3개를 고르시오.

위 '동아리별 인원' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#046중급GROUP BY

HAVING 그룹 조건

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
SELECT club,AVG(score) AS avg_score FROM student GROUP BY club HAVING AVG(score)>=80;
상세 설명

HAVING은 GROUP BY 결과 그룹을 조건으로 거릅니다.

문항 046 · 조건 변화 예측형 · 옳은 것 3개를 고르시오.

위 'HAVING 그룹 조건' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#047중급GROUP BY

WHERE 후 GROUP BY

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
SELECT grade,COUNT(*) AS people,AVG(score) AS avg_score FROM student WHERE score>=70 GROUP BY grade;
상세 설명

WHERE가 먼저 행을 거른 뒤 GROUP BY가 실행됩니다.

문항 047 · 데이터 흐름 분석형 · 옳은 것 3개를 고르시오.

위 'WHERE 후 GROUP BY' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#048중급GROUP BY

집계 결과 정렬

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
SELECT club,ROUND(AVG(score),1) AS avg_score FROM student GROUP BY club ORDER BY avg_score DESC;
상세 설명

집계 별칭을 ORDER BY에서 사용할 수 있습니다.

문항 048 · SQL 의미 판별형 · 옳은 것 3개를 고르시오.

위 '집계 결과 정렬' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#049중급집계

COUNT DISTINCT

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
SELECT COUNT(DISTINCT club) AS club_types FROM student;
상세 설명

중복을 제거한 값의 개수를 셉니다.

문항 049 · 실행 순서 분석형 · 옳은 것 3개를 고르시오.

위 'COUNT DISTINCT' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#050중급집계

조건부 집계

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
SELECT SUM(CASE WHEN score>=90 THEN 1 ELSE 0 END) AS high_count,SUM(CASE WHEN score<70 THEN 1 ELSE 0 END) AS low_count FROM student;
상세 설명

CASE를 SUM 안에 넣으면 여러 조건별 개수를 한 번에 셀 수 있습니다.

문항 050 · 응용 판단형 · 옳은 것 3개를 고르시오.

위 '조건부 집계' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#051중급JOIN

INNER JOIN

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS enrollment;
DROP TABLE IF EXISTS course;
DROP TABLE IF EXISTS student;
CREATE TABLE student(id INT PRIMARY KEY,name VARCHAR(20));
CREATE TABLE course(course_id INT PRIMARY KEY,course_name VARCHAR(30));
CREATE TABLE enrollment(student_id INT,course_id INT,score INT);
INSERT INTO student VALUES (1,'홍길동'),(2,'김철수'),(3,'이영희'),(4,'박민수');
INSERT INTO course VALUES (101,'데이터베이스'),(102,'파이썬'),(103,'인공지능');
INSERT INTO enrollment VALUES (1,101,95),(1,102,90),(2,101,85),(3,103,88);
SELECT s.name,c.course_name,e.score FROM enrollment e INNER JOIN student s ON e.student_id=s.id INNER JOIN course c ON e.course_id=c.course_id;
상세 설명

INNER JOIN은 양쪽에서 조건이 일치하는 행만 결합합니다.

문항 051 · 실행 결과 분석형 · 옳은 것 3개를 고르시오.

위 'INNER JOIN' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#052중급JOIN

LEFT JOIN

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS enrollment;
DROP TABLE IF EXISTS course;
DROP TABLE IF EXISTS student;
CREATE TABLE student(id INT PRIMARY KEY,name VARCHAR(20));
CREATE TABLE course(course_id INT PRIMARY KEY,course_name VARCHAR(30));
CREATE TABLE enrollment(student_id INT,course_id INT,score INT);
INSERT INTO student VALUES (1,'홍길동'),(2,'김철수'),(3,'이영희'),(4,'박민수');
INSERT INTO course VALUES (101,'데이터베이스'),(102,'파이썬'),(103,'인공지능');
INSERT INTO enrollment VALUES (1,101,95),(1,102,90),(2,101,85),(3,103,88);
SELECT s.name,e.course_id,e.score FROM student s LEFT JOIN enrollment e ON s.id=e.student_id ORDER BY s.id;
상세 설명

LEFT JOIN은 왼쪽의 모든 행을 유지하므로 수강 기록이 없는 학생도 나타납니다.

문항 052 · 구문 역할 판별형 · 옳은 것 3개를 고르시오.

위 'LEFT JOIN' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#053중급JOIN

RIGHT JOIN

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS enrollment;
DROP TABLE IF EXISTS course;
DROP TABLE IF EXISTS student;
CREATE TABLE student(id INT PRIMARY KEY,name VARCHAR(20));
CREATE TABLE course(course_id INT PRIMARY KEY,course_name VARCHAR(30));
CREATE TABLE enrollment(student_id INT,course_id INT,score INT);
INSERT INTO student VALUES (1,'홍길동'),(2,'김철수'),(3,'이영희'),(4,'박민수');
INSERT INTO course VALUES (101,'데이터베이스'),(102,'파이썬'),(103,'인공지능');
INSERT INTO enrollment VALUES (1,101,95),(1,102,90),(2,101,85),(3,103,88);
SELECT c.course_name,e.student_id FROM enrollment e RIGHT JOIN course c ON e.course_id=c.course_id;
상세 설명

RIGHT JOIN은 오른쪽 테이블의 모든 행을 유지합니다.

문항 053 · 오류 예방형 · 옳은 것 3개를 고르시오.

위 'RIGHT JOIN' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#054중급JOIN

JOIN 후 WHERE

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS enrollment;
DROP TABLE IF EXISTS course;
DROP TABLE IF EXISTS student;
CREATE TABLE student(id INT PRIMARY KEY,name VARCHAR(20));
CREATE TABLE course(course_id INT PRIMARY KEY,course_name VARCHAR(30));
CREATE TABLE enrollment(student_id INT,course_id INT,score INT);
INSERT INTO student VALUES (1,'홍길동'),(2,'김철수'),(3,'이영희'),(4,'박민수');
INSERT INTO course VALUES (101,'데이터베이스'),(102,'파이썬'),(103,'인공지능');
INSERT INTO enrollment VALUES (1,101,95),(1,102,90),(2,101,85),(3,103,88);
SELECT s.name,c.course_name,e.score FROM enrollment e JOIN student s ON e.student_id=s.id JOIN course c ON e.course_id=c.course_id WHERE e.score>=90;
상세 설명

JOIN으로 결합한 뒤 WHERE로 필요한 행만 고릅니다.

문항 054 · 코드 추론형 · 옳은 것 3개를 고르시오.

위 'JOIN 후 WHERE' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#055중급JOIN

JOIN + GROUP BY

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS enrollment;
DROP TABLE IF EXISTS course;
DROP TABLE IF EXISTS student;
CREATE TABLE student(id INT PRIMARY KEY,name VARCHAR(20));
CREATE TABLE course(course_id INT PRIMARY KEY,course_name VARCHAR(30));
CREATE TABLE enrollment(student_id INT,course_id INT,score INT);
INSERT INTO student VALUES (1,'홍길동'),(2,'김철수'),(3,'이영희'),(4,'박민수');
INSERT INTO course VALUES (101,'데이터베이스'),(102,'파이썬'),(103,'인공지능');
INSERT INTO enrollment VALUES (1,101,95),(1,102,90),(2,101,85),(3,103,88);
SELECT c.course_name,COUNT(*) AS people,ROUND(AVG(e.score),1) AS avg_score FROM enrollment e JOIN course c ON e.course_id=c.course_id GROUP BY c.course_id,c.course_name;
상세 설명

결합한 결과를 과목별로 다시 그룹화합니다.

문항 055 · 개념 연결형 · 옳은 것 3개를 고르시오.

위 'JOIN + GROUP BY' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#056중급JOIN

수강하지 않은 학생

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS enrollment;
DROP TABLE IF EXISTS course;
DROP TABLE IF EXISTS student;
CREATE TABLE student(id INT PRIMARY KEY,name VARCHAR(20));
CREATE TABLE course(course_id INT PRIMARY KEY,course_name VARCHAR(30));
CREATE TABLE enrollment(student_id INT,course_id INT,score INT);
INSERT INTO student VALUES (1,'홍길동'),(2,'김철수'),(3,'이영희'),(4,'박민수');
INSERT INTO course VALUES (101,'데이터베이스'),(102,'파이썬'),(103,'인공지능');
INSERT INTO enrollment VALUES (1,101,95),(1,102,90),(2,101,85),(3,103,88);
SELECT s.id,s.name FROM student s LEFT JOIN enrollment e ON s.id=e.student_id WHERE e.student_id IS NULL;
상세 설명

LEFT JOIN 뒤 오른쪽 키가 NULL인 행을 찾으면 대응 데이터가 없는 왼쪽 행을 찾을 수 있습니다.

문항 056 · 조건 변화 예측형 · 옳은 것 3개를 고르시오.

위 '수강하지 않은 학생' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#057중급JOIN

과목별 최고점

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS enrollment;
DROP TABLE IF EXISTS course;
DROP TABLE IF EXISTS student;
CREATE TABLE student(id INT PRIMARY KEY,name VARCHAR(20));
CREATE TABLE course(course_id INT PRIMARY KEY,course_name VARCHAR(30));
CREATE TABLE enrollment(student_id INT,course_id INT,score INT);
INSERT INTO student VALUES (1,'홍길동'),(2,'김철수'),(3,'이영희'),(4,'박민수');
INSERT INTO course VALUES (101,'데이터베이스'),(102,'파이썬'),(103,'인공지능');
INSERT INTO enrollment VALUES (1,101,95),(1,102,90),(2,101,85),(3,103,88);
SELECT c.course_name,MAX(e.score) AS max_score FROM course c LEFT JOIN enrollment e ON c.course_id=e.course_id GROUP BY c.course_id,c.course_name;
상세 설명

LEFT JOIN을 쓰면 수강생이 없는 과목도 남길 수 있습니다.

문항 057 · 데이터 흐름 분석형 · 옳은 것 3개를 고르시오.

위 '과목별 최고점' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#058중급JOIN

세 테이블 JOIN

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS enrollment;
DROP TABLE IF EXISTS course;
DROP TABLE IF EXISTS student;
CREATE TABLE student(id INT PRIMARY KEY,name VARCHAR(20));
CREATE TABLE course(course_id INT PRIMARY KEY,course_name VARCHAR(30));
CREATE TABLE enrollment(student_id INT,course_id INT,score INT);
INSERT INTO student VALUES (1,'홍길동'),(2,'김철수'),(3,'이영희'),(4,'박민수');
INSERT INTO course VALUES (101,'데이터베이스'),(102,'파이썬'),(103,'인공지능');
INSERT INTO enrollment VALUES (1,101,95),(1,102,90),(2,101,85),(3,103,88);
SELECT s.name,c.course_name,e.score FROM student s JOIN enrollment e ON s.id=e.student_id JOIN course c ON e.course_id=c.course_id ORDER BY s.name,c.course_name;
상세 설명

연결 테이블을 통해 학생·수강·과목 정보를 하나로 합칩니다.

문항 058 · SQL 의미 판별형 · 옳은 것 3개를 고르시오.

위 '세 테이블 JOIN' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#059중급JOIN

CROSS JOIN

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS size_tbl; DROP TABLE IF EXISTS color_tbl; CREATE TABLE color_tbl(color VARCHAR(10)); CREATE TABLE size_tbl(size VARCHAR(10)); INSERT INTO color_tbl VALUES('Red'),('Blue'); INSERT INTO size_tbl VALUES('S'),('M'),('L'); SELECT * FROM color_tbl CROSS JOIN size_tbl;
상세 설명

CROSS JOIN은 가능한 모든 조합을 만들어 2×3=6행을 만듭니다.

문항 059 · 실행 순서 분석형 · 옳은 것 3개를 고르시오.

위 'CROSS JOIN' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#060중급JOIN

Self JOIN

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS employee; CREATE TABLE employee(id INT PRIMARY KEY,name VARCHAR(20),manager_id INT); INSERT INTO employee VALUES(1,'대표',NULL),(2,'팀장',1),(3,'사원A',2),(4,'사원B',2); SELECT e.name AS employee,m.name AS manager FROM employee e LEFT JOIN employee m ON e.manager_id=m.id;
상세 설명

Self JOIN은 같은 테이블에 서로 다른 별칭을 붙여 자기 자신과 결합합니다.

문항 060 · 응용 판단형 · 옳은 것 3개를 고르시오.

위 'Self JOIN' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#061중급서브쿼리

평균보다 높은 점수

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
SELECT name,score FROM student WHERE score>(SELECT AVG(score) FROM student);
상세 설명

서브쿼리가 전체 평균을 먼저 계산하고 바깥 쿼리가 그보다 높은 학생을 찾습니다.

문항 061 · 실행 결과 분석형 · 옳은 것 3개를 고르시오.

위 '평균보다 높은 점수' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#062중급서브쿼리

최고 점수 학생

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
SELECT name,score FROM student WHERE score=(SELECT MAX(score) FROM student);
상세 설명

서브쿼리의 단일 값과 바깥 행을 비교합니다.

문항 062 · 구문 역할 판별형 · 옳은 것 3개를 고르시오.

위 '최고 점수 학생' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#063중급서브쿼리

IN 서브쿼리

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS enrollment;
DROP TABLE IF EXISTS course;
DROP TABLE IF EXISTS student;
CREATE TABLE student(id INT PRIMARY KEY,name VARCHAR(20));
CREATE TABLE course(course_id INT PRIMARY KEY,course_name VARCHAR(30));
CREATE TABLE enrollment(student_id INT,course_id INT,score INT);
INSERT INTO student VALUES (1,'홍길동'),(2,'김철수'),(3,'이영희'),(4,'박민수');
INSERT INTO course VALUES (101,'데이터베이스'),(102,'파이썬'),(103,'인공지능');
INSERT INTO enrollment VALUES (1,101,95),(1,102,90),(2,101,85),(3,103,88);
SELECT name FROM student WHERE id IN(SELECT student_id FROM enrollment WHERE score>=90);
상세 설명

여러 id가 반환되므로 IN으로 비교합니다.

문항 063 · 오류 예방형 · 옳은 것 3개를 고르시오.

위 'IN 서브쿼리' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#064중급서브쿼리

EXISTS

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS enrollment;
DROP TABLE IF EXISTS course;
DROP TABLE IF EXISTS student;
CREATE TABLE student(id INT PRIMARY KEY,name VARCHAR(20));
CREATE TABLE course(course_id INT PRIMARY KEY,course_name VARCHAR(30));
CREATE TABLE enrollment(student_id INT,course_id INT,score INT);
INSERT INTO student VALUES (1,'홍길동'),(2,'김철수'),(3,'이영희'),(4,'박민수');
INSERT INTO course VALUES (101,'데이터베이스'),(102,'파이썬'),(103,'인공지능');
INSERT INTO enrollment VALUES (1,101,95),(1,102,90),(2,101,85),(3,103,88);
SELECT s.id,s.name FROM student s WHERE EXISTS(SELECT 1 FROM enrollment e WHERE e.student_id=s.id);
상세 설명

EXISTS는 관련 행의 존재 여부만 검사합니다.

문항 064 · 코드 추론형 · 옳은 것 3개를 고르시오.

위 'EXISTS' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#065중급서브쿼리

NOT EXISTS

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS enrollment;
DROP TABLE IF EXISTS course;
DROP TABLE IF EXISTS student;
CREATE TABLE student(id INT PRIMARY KEY,name VARCHAR(20));
CREATE TABLE course(course_id INT PRIMARY KEY,course_name VARCHAR(30));
CREATE TABLE enrollment(student_id INT,course_id INT,score INT);
INSERT INTO student VALUES (1,'홍길동'),(2,'김철수'),(3,'이영희'),(4,'박민수');
INSERT INTO course VALUES (101,'데이터베이스'),(102,'파이썬'),(103,'인공지능');
INSERT INTO enrollment VALUES (1,101,95),(1,102,90),(2,101,85),(3,103,88);
SELECT s.id,s.name FROM student s WHERE NOT EXISTS(SELECT 1 FROM enrollment e WHERE e.student_id=s.id);
상세 설명

NOT EXISTS는 관련 데이터가 하나도 없는 행을 찾습니다.

문항 065 · 개념 연결형 · 옳은 것 3개를 고르시오.

위 'NOT EXISTS' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#066중급서브쿼리

상관 서브쿼리

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS enrollment;
DROP TABLE IF EXISTS course;
DROP TABLE IF EXISTS student;
CREATE TABLE student(id INT PRIMARY KEY,name VARCHAR(20));
CREATE TABLE course(course_id INT PRIMARY KEY,course_name VARCHAR(30));
CREATE TABLE enrollment(student_id INT,course_id INT,score INT);
INSERT INTO student VALUES (1,'홍길동'),(2,'김철수'),(3,'이영희'),(4,'박민수');
INSERT INTO course VALUES (101,'데이터베이스'),(102,'파이썬'),(103,'인공지능');
INSERT INTO enrollment VALUES (1,101,95),(1,102,90),(2,101,85),(3,103,88);
SELECT e.student_id,e.course_id,e.score FROM enrollment e WHERE e.score>(SELECT AVG(e2.score) FROM enrollment e2 WHERE e2.course_id=e.course_id);
상세 설명

바깥 행의 course_id를 안쪽 쿼리가 참조해 같은 과목 평균과 비교합니다.

문항 066 · 조건 변화 예측형 · 옳은 것 3개를 고르시오.

위 '상관 서브쿼리' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#067중급서브쿼리

FROM 안 서브쿼리

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
SELECT grade,avg_score FROM (SELECT grade,AVG(score) AS avg_score FROM student GROUP BY grade) AS g WHERE avg_score>=80;
상세 설명

FROM 안의 파생 테이블은 임시 결과처럼 사용할 수 있으며 MySQL에서는 별칭이 필요합니다.

문항 067 · 데이터 흐름 분석형 · 옳은 것 3개를 고르시오.

위 'FROM 안 서브쿼리' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#068중급서브쿼리

스칼라 서브쿼리

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
SELECT name,score,(SELECT ROUND(AVG(score),1) FROM student) AS overall_avg FROM student;
상세 설명

한 값만 반환하는 서브쿼리를 SELECT 목록에 넣을 수 있습니다.

문항 068 · SQL 의미 판별형 · 옳은 것 3개를 고르시오.

위 '스칼라 서브쿼리' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#069중급서브쿼리

두 번째 높은 점수

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
SELECT MAX(score) AS second_highest FROM student WHERE score<(SELECT MAX(score) FROM student);
상세 설명

최고점보다 작은 값 중 최댓값을 다시 구합니다.

문항 069 · 실행 순서 분석형 · 옳은 것 3개를 고르시오.

위 '두 번째 높은 점수' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#070중급서브쿼리

서브쿼리 UPDATE

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
UPDATE student SET score=score+2 WHERE id IN(SELECT id FROM (SELECT id FROM student WHERE score<80) AS x); SELECT * FROM student;
상세 설명

같은 테이블을 읽어 갱신할 때 파생 테이블을 한 단계 두는 MySQL 실습 예제입니다.

문항 070 · 응용 판단형 · 옳은 것 3개를 고르시오.

위 '서브쿼리 UPDATE' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#071중급문자열 함수

SUBSTRING

OneCompiler에 복사하여 실행
SELECT SUBSTRING('DATABASE',1,4) AS p1,SUBSTRING('DATABASE',5) AS p2;
상세 설명

문자열의 일부를 추출합니다. 위치는 1부터 시작합니다.

예상 결과: DATA / BASE
문항 071 · 실행 결과 분석형 · 옳은 것 3개를 고르시오.

위 'SUBSTRING' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#072중급문자열 함수

TRIM

OneCompiler에 복사하여 실행
SELECT CONCAT('[',TRIM('   MySQL   '),']') AS trimmed;
상세 설명

양끝 공백을 제거합니다.

예상 결과: [MySQL]
문항 072 · 구문 역할 판별형 · 옳은 것 3개를 고르시오.

위 'TRIM' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#073중급문자열 함수

REPLACE

OneCompiler에 복사하여 실행
SELECT REPLACE('I like Java','Java','MySQL') AS result;
상세 설명

특정 문자열을 다른 문자열로 치환합니다.

예상 결과: I like MySQL
문항 073 · 오류 예방형 · 옳은 것 3개를 고르시오.

위 'REPLACE' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#074중급문자열 함수

LPAD RPAD

OneCompiler에 복사하여 실행
SELECT LPAD('25',5,'0') AS left_pad,RPAD('SQL',6,'.') AS right_pad;
상세 설명

정해진 길이가 될 때까지 왼쪽 또는 오른쪽을 채웁니다.

예상 결과: 00025 / SQL...
문항 074 · 코드 추론형 · 옳은 것 3개를 고르시오.

위 'LPAD RPAD' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#075중급날짜 함수

DATE_ADD DATE_SUB

OneCompiler에 복사하여 실행
SELECT DATE_ADD('2026-08-13',INTERVAL 7 DAY) AS after7,DATE_SUB('2026-08-13',INTERVAL 1 MONTH) AS before1m;
상세 설명

날짜에 지정 기간을 더하거나 뺍니다.

문항 075 · 개념 연결형 · 옳은 것 3개를 고르시오.

위 'DATE_ADD DATE_SUB' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#076중급날짜 함수

DATEDIFF

OneCompiler에 복사하여 실행
SELECT DATEDIFF('2026-08-20','2026-08-13') AS days;
상세 설명

두 날짜 사이의 일수 차이를 반환합니다.

예상 결과: 7
문항 076 · 조건 변화 예측형 · 옳은 것 3개를 고르시오.

위 'DATEDIFF' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#077중급날짜 함수

YEAR MONTH DAY

OneCompiler에 복사하여 실행
SELECT YEAR('2026-08-13') AS y,MONTH('2026-08-13') AS m,DAY('2026-08-13') AS d;
상세 설명

날짜에서 연·월·일을 추출합니다.

예상 결과: 2026 / 8 / 13
문항 077 · 데이터 흐름 분석형 · 옳은 것 3개를 고르시오.

위 'YEAR MONTH DAY' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#078중급날짜 함수

DATE_FORMAT

OneCompiler에 복사하여 실행
SELECT DATE_FORMAT('2026-08-13','%Y년 %m월 %d일') AS formatted;
상세 설명

날짜를 원하는 문자열 형식으로 표시합니다.

문항 078 · SQL 의미 판별형 · 옳은 것 3개를 고르시오.

위 'DATE_FORMAT' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#079중급날짜 함수

TIMESTAMPDIFF

OneCompiler에 복사하여 실행
SELECT TIMESTAMPDIFF(YEAR,'2008-03-15','2026-08-13') AS years;
상세 설명

지정 단위로 두 날짜/시각의 차이를 계산합니다.

문항 079 · 실행 순서 분석형 · 옳은 것 3개를 고르시오.

위 'TIMESTAMPDIFF' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#080중급NULL

IFNULL

OneCompiler에 복사하여 실행
SELECT IFNULL(NULL,'대체값') AS r1,IFNULL('MySQL','대체값') AS r2;
상세 설명

첫 인수가 NULL이면 두 번째 값을 반환합니다.

예상 결과: 대체값 / MySQL
문항 080 · 응용 판단형 · 옳은 것 3개를 고르시오.

위 'IFNULL' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#081고급VIEW

VIEW 만들기

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
DROP VIEW IF EXISTS high_score_student; CREATE VIEW high_score_student AS SELECT id,name,score FROM student WHERE score>=90; SELECT * FROM high_score_student;
상세 설명

VIEW는 SELECT 결과에 이름을 붙여 가상 테이블처럼 사용합니다.

문항 081 · 실행 결과 분석형 · 옳은 것 3개를 고르시오.

위 'VIEW 만들기' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#082고급VIEW

VIEW 교체

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
DROP VIEW IF EXISTS student_summary; CREATE VIEW student_summary AS SELECT id,name,score FROM student; CREATE OR REPLACE VIEW student_summary AS SELECT id,name,grade,score FROM student; SELECT * FROM student_summary;
상세 설명

CREATE OR REPLACE VIEW는 기존 뷰 정의를 새 쿼리로 바꿉니다.

문항 082 · 구문 역할 판별형 · 옳은 것 3개를 고르시오.

위 'VIEW 교체' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#083고급INDEX

INDEX 생성

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
CREATE INDEX idx_student_score ON student(score); SHOW INDEX FROM student;
상세 설명

인덱스는 검색을 빠르게 할 수 있지만 저장 공간과 쓰기 비용이 추가됩니다.

문항 083 · 오류 예방형 · 옳은 것 3개를 고르시오.

위 'INDEX 생성' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#084고급INDEX

복합 INDEX

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
CREATE INDEX idx_grade_score ON student(grade,score); SHOW INDEX FROM student;
상세 설명

복합 인덱스는 여러 열을 함께 인덱싱하며 열 순서가 중요합니다.

문항 084 · 코드 추론형 · 옳은 것 3개를 고르시오.

위 '복합 INDEX' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#085고급제약조건

FOREIGN KEY

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS enrollment_fk; DROP TABLE IF EXISTS student_fk; CREATE TABLE student_fk(id INT PRIMARY KEY,name VARCHAR(20)); CREATE TABLE enrollment_fk(id INT PRIMARY KEY,student_id INT,subject VARCHAR(20),FOREIGN KEY(student_id) REFERENCES student_fk(id)); INSERT INTO student_fk VALUES(1,'홍길동'); INSERT INTO enrollment_fk VALUES(1,1,'MySQL'); SELECT * FROM enrollment_fk;
상세 설명

FOREIGN KEY는 다른 테이블의 키를 참조해 관계 무결성을 유지합니다.

문항 085 · 개념 연결형 · 옳은 것 3개를 고르시오.

위 'FOREIGN KEY' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#086고급제약조건

ON DELETE CASCADE

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS child_tbl; DROP TABLE IF EXISTS parent_tbl; CREATE TABLE parent_tbl(id INT PRIMARY KEY,name VARCHAR(20)); CREATE TABLE child_tbl(id INT PRIMARY KEY,parent_id INT,FOREIGN KEY(parent_id) REFERENCES parent_tbl(id) ON DELETE CASCADE); INSERT INTO parent_tbl VALUES(1,'부모'); INSERT INTO child_tbl VALUES(10,1); DELETE FROM parent_tbl WHERE id=1; SELECT * FROM child_tbl;
상세 설명

부모 행 삭제 시 참조하는 자식 행도 함께 삭제됩니다.

문항 086 · 조건 변화 예측형 · 옳은 것 3개를 고르시오.

위 'ON DELETE CASCADE' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#087고급트랜잭션

트랜잭션 COMMIT

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS bank_account; CREATE TABLE bank_account(id INT PRIMARY KEY,balance INT); INSERT INTO bank_account VALUES(1,10000),(2,5000); START TRANSACTION; UPDATE bank_account SET balance=balance-1000 WHERE id=1; UPDATE bank_account SET balance=balance+1000 WHERE id=2; COMMIT; SELECT * FROM bank_account;
상세 설명

여러 SQL을 하나의 논리 작업 단위로 묶고 COMMIT으로 확정합니다.

문항 087 · 데이터 흐름 분석형 · 옳은 것 3개를 고르시오.

위 '트랜잭션 COMMIT' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#088고급트랜잭션

트랜잭션 ROLLBACK

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS bank_account; CREATE TABLE bank_account(id INT PRIMARY KEY,balance INT); INSERT INTO bank_account VALUES(1,10000); START TRANSACTION; UPDATE bank_account SET balance=balance-3000 WHERE id=1; ROLLBACK; SELECT * FROM bank_account;
상세 설명

ROLLBACK은 아직 확정하지 않은 변경을 취소합니다.

문항 088 · SQL 의미 판별형 · 옳은 것 3개를 고르시오.

위 '트랜잭션 ROLLBACK' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#089고급트랜잭션

SAVEPOINT

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS t; CREATE TABLE t(id INT PRIMARY KEY,value INT); INSERT INTO t VALUES(1,10); START TRANSACTION; UPDATE t SET value=20 WHERE id=1; SAVEPOINT s1; UPDATE t SET value=30 WHERE id=1; ROLLBACK TO s1; COMMIT; SELECT * FROM t;
상세 설명

SAVEPOINT를 이용하면 트랜잭션 전체가 아니라 특정 지점 이후만 되돌릴 수 있습니다.

문항 089 · 실행 순서 분석형 · 옳은 것 3개를 고르시오.

위 'SAVEPOINT' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#090고급DDL

TRUNCATE

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS temp_data; CREATE TABLE temp_data(id INT); INSERT INTO temp_data VALUES(1),(2),(3); TRUNCATE TABLE temp_data; SELECT COUNT(*) AS row_count FROM temp_data;
상세 설명

테이블 구조는 유지하면서 모든 행을 제거합니다.

예상 결과: 0
문항 090 · 응용 판단형 · 옳은 것 3개를 고르시오.

위 'TRUNCATE' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#091고급CTE

WITH CTE

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
WITH high_score AS(SELECT id,name,score FROM student WHERE score>=90) SELECT * FROM high_score ORDER BY score DESC;
상세 설명

WITH로 이름 붙인 임시 결과를 만들어 복잡한 쿼리를 단계적으로 읽기 쉽게 합니다.

문항 091 · 실행 결과 분석형 · 옳은 것 3개를 고르시오.

위 'WITH CTE' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#092고급CTE

CTE + 집계

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
WITH grade_avg AS(SELECT grade,AVG(score) AS avg_score FROM student GROUP BY grade) SELECT grade,ROUND(avg_score,1) AS avg_score FROM grade_avg WHERE avg_score>=80;
상세 설명

집계 결과를 CTE에 넣은 뒤 바깥 쿼리에서 다시 조건을 적용합니다.

문항 092 · 구문 역할 판별형 · 옳은 것 3개를 고르시오.

위 'CTE + 집계' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#093고급윈도 함수

ROW_NUMBER

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
SELECT name,score,ROW_NUMBER() OVER(ORDER BY score DESC) AS row_num FROM student;
상세 설명

정렬 기준에 따라 각 행에 고유 순번을 부여합니다.

문항 093 · 오류 예방형 · 옳은 것 3개를 고르시오.

위 'ROW_NUMBER' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#094고급윈도 함수

RANK

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS score_tbl; CREATE TABLE score_tbl(name VARCHAR(20),score INT); INSERT INTO score_tbl VALUES('A',100),('B',90),('C',90),('D',80); SELECT name,score,RANK() OVER(ORDER BY score DESC) AS rank_no FROM score_tbl;
상세 설명

동점자에게 같은 순위를 주고 다음 순위를 건너뜁니다. 예: 1,2,2,4.

문항 094 · 코드 추론형 · 옳은 것 3개를 고르시오.

위 'RANK' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#095고급윈도 함수

DENSE_RANK

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS score_tbl; CREATE TABLE score_tbl(name VARCHAR(20),score INT); INSERT INTO score_tbl VALUES('A',100),('B',90),('C',90),('D',80); SELECT name,score,DENSE_RANK() OVER(ORDER BY score DESC) AS rank_no FROM score_tbl;
상세 설명

동점 다음 순위를 건너뛰지 않습니다. 예: 1,2,2,3.

문항 095 · 개념 연결형 · 옳은 것 3개를 고르시오.

위 'DENSE_RANK' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#096고급윈도 함수

PARTITION BY

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
SELECT grade,name,score,RANK() OVER(PARTITION BY grade ORDER BY score DESC) AS grade_rank FROM student;
상세 설명

PARTITION BY를 쓰면 학년별로 순위를 따로 계산합니다.

문항 096 · 조건 변화 예측형 · 옳은 것 3개를 고르시오.

위 'PARTITION BY' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#097고급윈도 함수

누적 합계

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
SELECT name,score,SUM(score) OVER(ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS running_total FROM student;
상세 설명

윈도 SUM은 원래 행을 유지하면서 누적 합계를 계산합니다.

문항 097 · 데이터 흐름 분석형 · 옳은 것 3개를 고르시오.

위 '누적 합계' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#098고급윈도 함수

LAG 이전 행

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS student;
CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  grade INT,
  score INT,
  club VARCHAR(20)
);
INSERT INTO student VALUES
(1,'홍길동',1,95,'과학'),
(2,'김철수',2,88,'코딩'),
(3,'이영희',1,76,'과학'),
(4,'박민수',3,64,'로봇'),
(5,'최서연',2,91,'코딩');
SELECT id,name,score,LAG(score) OVER(ORDER BY id) AS previous_score FROM student;
상세 설명

LAG는 이전 행 값을 가져와 전후 비교에 사용합니다.

문항 098 · SQL 의미 판별형 · 옳은 것 3개를 고르시오.

위 'LAG 이전 행' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#099고급재귀 CTE

재귀 CTE 1~10

OneCompiler에 복사하여 실행
WITH RECURSIVE numbers AS(SELECT 1 AS n UNION ALL SELECT n+1 FROM numbers WHERE n<10) SELECT * FROM numbers;
상세 설명

재귀 CTE는 이전 단계 결과를 다시 참조합니다. 종료 조건이 반드시 필요합니다.

예상 결과: 1부터 10까지
문항 099 · 실행 순서 분석형 · 옳은 것 3개를 고르시오.

위 '재귀 CTE 1~10' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)

#100고급재귀 CTE

재귀 CTE 조직도

OneCompiler에 복사하여 실행
DROP TABLE IF EXISTS employee_tree; CREATE TABLE employee_tree(id INT PRIMARY KEY,name VARCHAR(20),manager_id INT); INSERT INTO employee_tree VALUES(1,'대표',NULL),(2,'개발팀장',1),(3,'연구팀장',1),(4,'개발자A',2),(5,'개발자B',2); WITH RECURSIVE org AS(SELECT id,name,manager_id,0 AS depth FROM employee_tree WHERE manager_id IS NULL UNION ALL SELECT e.id,e.name,e.manager_id,org.depth+1 FROM employee_tree e JOIN org ON e.manager_id=org.id) SELECT * FROM org ORDER BY depth,id;
상세 설명

루트에서 시작해 manager_id 관계를 따라 자식 노드를 반복 탐색합니다. 트리 구조를 SQL로 학습하기 좋은 예입니다.

문항 100 · 응용 판단형 · 옳은 것 3개를 고르시오.

위 '재귀 CTE 조직도' 코드를 실행한다고 할 때, 코드의 기능·결과·SQL 의미에 관한 설명으로 옳은 것을 모두 고르시오. (정답 3개)