

















SET 연산은 두 SELECT 결과를 집합 연산자처럼 다루는 SQL 문법입니다.
| UNION | 중복 제거 합집합 | ✅ 지원 |
| UNION ALL | 중복 포함 합집합 | ✅ 지원 |
| INTERSECT | 교집합 | ❌ 미지원 (우회 가능) |
| MINUS 또는 EXCEPT | 차집합 | ❌ 미지원 (우회 가능) |
-- UNION
SELECT emp_name FROM employees
UNION
SELECT emp_name FROM retired_employees;
-- UNION ALL
SELECT emp_name FROM employees
UNION ALL
SELECT emp_name FROM retired_employees;
MySQL은 전통적으로 성능 최적화를 위해 집합 연산을 단순화하여 UNION과 UNION ALL만을 공식 지원합니다.
INTERSECT, EXCEPT(MINUS)는 ANSI SQL 표준이지만 MySQL에서는 명시적으로 구현되어 있지 않으며, 아래처럼 우회해야 합니다.
-- INTERSECT 우회 방법 (교집합)
-- MINUS (EXCEPT) 우회 방법 (차집합)
JOIN은 둘 이상의 테이블을 공통 컬럼(키)을 기준으로 결합하여 데이터를 조회하는 SQL 문입니다.
| INNER JOIN | SELECT ... FROM A INNER JOIN B ON A.id = B.id; | A와 B 모두에 존재하는 데이터만 |
| LEFT JOIN | SELECT ... FROM A LEFT JOIN B ON A.id = B.id; | A는 모두 포함, B는 일치하는 것만 |
| RIGHT JOIN | SELECT ... FROM A RIGHT JOIN B ON A.id = B.id; | B는 모두 포함, A는 일치하는 것만 |
| FULL OUTER JOIN | ❌ MySQL 기본 미지원 (대신 UNION으로 우회 가능) | A와 B 모든 데이터 포함 |
| 항목 | Oracle | MySQL |
| FULL OUTER JOIN | 지원 | ❌ 직접 지원 안함 |
| INTERSECT, MINUS | 공식 지원 | ❌ 직접 미지원 (우회 필요) |
| 집합 연산 최적화 | 고급 기능 많음 | 기본적인 UNION 중심 |
| 서브쿼리 최적화 | 매우 발달 | 비교적 단순함 |
제약조건은 테이블에 저장되는 데이터의 정확성 및 일관성을 보장하기 위한 규칙입니다.
| PRIMARY KEY | 테이블의 고유 식별자, 중복 불가 & NULL 불가 | 학생번호, 주민번호 등 |
| FOREIGN KEY | 다른 테이블의 기본키를 참조 | 주문 → 고객 |
| UNIQUE | 중복 불가 (NULL 허용) | 이메일 주소 |
| NOT NULL | NULL 입력 금지 | 이름, 연락처 |
| CHECK | 특정 조건을 만족해야 함 | 나이 > 0 |
| DEFAULT | 기본값 지정 | 상태 → '대기' |
MySQL은 Oracle과 달리 USER_CONSTRAINTS 같은 뷰는 없지만, information_schema 데이터베이스의 여러 테이블을 통해 확인할 수 있습니다.
| 제약조건 확인용 주요 시스템 테이블 | 설명 |
| information_schema.TABLE_CONSTRAINTS | 테이블별 제약조건 목록 |
| information_schema.KEY_COLUMN_USAGE | 제약조건에 포함된 컬럼 정보 |
| information_schema.REFERENTIAL_CONSTRAINTS | 외래 키(FK) 제약조건 정보 |
| information_schema.COLUMNS | 각 컬럼의 NOT NULL 여부, DEFAULT 등 |
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
emp_name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
dept_id INT,
salary DECIMAL(10,2) CHECK (salary >= 0),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT fk_dept FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);
# 예시 1: 테이블의 제약조건 목록 보기
# 예시 2: 특정 제약조건의 컬럼 확인
# 예시 3: 외래키 상세 정보
# 예시 4: 제약조건 추가 및 삭제 (ALTER TABLE)
-- 제약조건 추가
| 항목 | Oracle | MySQL |
| CHECK 제약조건 | 기본 지원 | MySQL 8.0.16 이후부터 지원 |
| USER_CONSTRAINTS, ALL_CONSTRAINTS | 사용 가능 | ❌ 없음 (information_schema 사용) |
| 제약조건 이름 자동생성 | O | O |
| 제약조건 삭제 방식 | DROP CONSTRAINT | DROP FOREIGN KEY, DROP INDEX |
| 5. MySQL-DDL 명령어 (0) | 2025.06.04 |
|---|---|
| 3. MySQL 함수 - 다행(그룹)함수 (0) | 2025.06.04 |
| 2. MySQL 함수-단일행 함수 (0) | 2024.05.08 |
댓글 영역