SQL - DDL
DB를 구축하거나 수정할 목적으로 사용하는 언어
대표적인 3 명령어
CREATE, ALTER, DROP
개체 정의하는 명령어 - CREATE
개체 정의를 변경하는 명령어 - ALTER
개체를 삭제하는 명령어 - DROP
여기서 헷갈리는 점!
추가하는 문제가 나왔을 때 CREATE와 ALTER ADD 의 차이를 알아야한다.
테이블을 다시 정의하거나, 테이블을 생성할때는 CREATE 사용!
이미 있는 테이블에 "A" 속성을 추가할때는 ALTER ADD를 적용한다!
ex) <학생> 테이블에 20자의 가변길이를 가진 '주소' 속성을 추가하는 SQL문을 완성하시오.
ALTER TABLE 학생 ADD 주소 VARCHAR(20); 이 된다.
DDL문 작성 팁
2. 자주 쓰는 데이터 타입(VARCHAR)
3. 제약조건
중복을 허용하지 않도록! = UNIQUE
기본키는 - PRIMARY KEY
외래키는 FOREIGN KEY
문제에서 나온다.
문제에서 나오는 제약조건들을 외웠지만 순서가 헷갈린다.
대체적으로 이렇게 외우자
일반 인덱스
CREATE INDEX 인덱스명
ON 테이블 명 (컬럼명 ASC | DESC)
중복 허용 X
CREATE UNIQUE INDEX 인덱스명
ON 테이블 명 (컬럼명 ASC | DESC)
💡 순서: CREATE → UNIQUE (선택) → INDEX → 이름 → ON 테이블(컬럼)
ASC는 기본값이지만 명시 가능.
ALTER TABLE은?
ALTER TABLE 테이블명
ADD 컬럼명 데이터타입
또는
★ ★ ★ ★ ★ ★
ALTER TABLE 테이블명
ADD CONSTRAINT 제약조건명 UNIQUE (컬럼명);
CASCADE =
문제에서 <학생> 테이블을 참조하는 모든 데이터도 함께 제거한다. / <학생> 테이블을 제거한다. 라고 했을때
참조하는 모든 데이터도 함께 제거한다니까
DROP TABLE 학생 CASCADE가 된다.
SQL 주요 제약조건 정리

CHECK = 조건 검사(지정한 조건을 만족해야함)
CHECK + IN 이 주로 많이 쓰임
성별 CHAR(1) CHECK ( 성별 IN(M , F))
성별이 M인지 F인지 체크(검사해라)
DCL(데이터 제어어)
DCL 데이터의 보안, 무결성, 회복, 병행 제어 등을 정의하는 데 사용하는 언어이다.
DCL은 데이터베이스 관리자(DBA)가 데이터 관리를 목적으로 사용한다.
★ 주요 명령어 4가지 ★
COMMIT : 명령에 의해 수행된 결과를 물리적 디스크로 저장 / DB 조작 작업이 정상적으로 완료
ROLLBACK : DB 조작 작업이 비정상적으로 종료되었을떄 원래 상태고 복구
GRANT : DB 사용자에게 사용 권한을 부여함
REVOKE : DB 사용자의 사용 권한을 취소함
삭제 = DELETE
DELETE FROM 테이블명 WHERE 속성 = ;
이 구절은 암기하도록하자.
SAVEPOINT 트랜잭션 내에 ROLLBACK 할 위치인 저장점을 지정하는 명령어.
약간 게임에서 나오는 세이브 포인트 느낌이다.
예시 .
1. <사원>테이블에서 '사원번호'가 30인 사원의 정보를 삭제하시오.
:
DELETE FROM 사원 WHERE 사원번호 = 30;
2. SAVEPOINT 'S1'을 설정하고 <사원>테이블에서 '사원번호'가 20인 사원의 정보를 삭제하시오.
:
SAVEPOINT S1;
DELETE FORM 사원 WHERE 사원번호 = 20;
3. SAVEPOINT 'S2' 를 설정하고 <사원> 테이블에서 사원번호가 10인 사원의 정보를 삭제하시오.
:
SAVEPOINT S2;
DELETE FORM 사원 WHERE 사원번호 = 10;
4. SAVEPOINT 'S2'까지 ROLLBACK을 수행하시오.
:
ROLLBACK TO S2
GRANT는 사용자에 권한을 부여
REVOKE는 사용자에게 권한을 취소하는 명령어인데
여기서 TO, ON 등등 다른 명령어를 쓰는데 어떨 때 사용하는지 모르겠다.
결론은.
✅ 기억 꿀팁
- ON: 무엇에 대해 권한을 줄지 (테이블/뷰/시퀀스 등)
- TO: 누구에게 권한을 줄지 (사용자/역할 등)
- GRANT: 권한 부여 시작 키워드
이거다.
테이블과 같은 객체에게 줄 때는 ON , 사용자같은 것에게는 TO를 쓴다.
GRANT SELECT, INSERT
ON 학생
TO 사용자1;
🟢 해석:
→ 사용자1에게 학생 테이블에 대한 SELECT와 INSERT 권한을 부여한다.
김하늘에게 <학생> 테이블에 대한 접근 및 조작에 관한 모든 권한을 부여하는 SQL문은?
김하늘 > 사용자
<학생> > 테이블
접근 및 조작에 관한 모든 > ALL
권한을 부여하는 SQL 문 > GRANT
즉 : GRANT ALL ON 학생 TO 김하늘; 이 된다.
이제 살짝 감이 잡힌다.
SQL문은 DDL , DCL , DML에서 오는 모든 구조를 이해하고 암기해야될거같다.
★ 가끔 문제에서 ~하는 권한을 다른 사람에게 부여할 수 있는 권한을 부여하는 SQL문 어쩌구 이런 이상한 문제가있는데 이것은
WITH GRANT OPTION이다.
자신이 부여받은 권한을, 다른 사용자에게도 부여할 수 있는 권한입니다.
( 즉, 권한을 상속 가능하게 만들어주는 옵션이에요.)
GRANT SELECT
ON 학생
TO 사용자1
WITH GRANT OPTION;
- 사용자1은 학생 테이블에 대해 SELECT 권한을 가지게 됩니다.
- 그리고 그 권한을 다른 사용자에게도 줄 수 있는 자격이 생깁니다
간단하고도 이상하다.
다른사람에게 UPDATE 권한을 부여할 수 있는 권한, 그리고 임꺽정이 다른 사람에게 부여한 UPDATE 권한도 모두 취소하는 SQL문을 작성하시오.
이렇게 취소할 권한과 그 사람이 다른 사람에게 부여한 권한도 모두 취소하는건
REVOKE 실행 시 |
위임받아 전달된 권한도 함께 회수됨 (cascade) |
CASCADE를 사용한다.
그리고 부여한 사람의 권한이 삭제되면 그 사람에게 부여받는 사람의 권한도 함께 삭제되기 때문에 CASCADE만 사용하면 된다.
DML - 데이터 조작어
저장된 데이터를 실질적으로 관리하는데 사용되는 언어.
데이터베이스를 실질적으로 관리한다고 보면된다.
주 사용 명령어 4가지 (S, I , U , D)
SELECT - 테이블에서 튜플 검색
INSERT - 새로운 튜플 삽입
UPDATE - 튜플의 내용을 갱신함.
DELETE - 튜플을 삭제함
이번에는 아래의 구조를 암기하자
SELECT (INTO) 테이블명[속성명1,속성명2...]
VALUES(데이터1, 데이터2, ...);
예제. <사원> 테이블에 (이름 - 홍승연, 부서 - 인터넷)을 삽입하시오.
★이름(속성명) , 홍승연(데이터) 이다.!!!
즉 : INSERT INTO 사원(이름, 부서) VALUES(홍승연, 인터넷);
만약 구분( " - " )없이 홍승연, 부서 , 인터넷, 이름 이렇게있으면
: INSERT INTO 사원 VALUES( 홍승연, 부서 , 인터넷, 이름 ); 이렇게 적으면된다.
✅ 기본 구조
INSERT INTO 대상테이블 (열1, 열2, ...)
SELECT 열1, 열2, ...
FROM 원본테이블
WHERE 조건;
✅ 예시
🎯 목표: 졸업생 테이블에 학생 테이블에서 졸업한 학생만 복사
🔍 해석:
- 학생 테이블에서 졸업여부 = 'Y'인 레코드를
- 졸업생 테이블의 지정된 컬럼에 복사합니다.
✅ 주의할 점
컬럼 수 | INSERT 쪽과 SELECT 쪽의 컬럼 수와 순서가 일치해야 함 |
데이터 타입 | 각 컬럼의 데이터 타입도 호환되어야 함 |
서브쿼리 가능 | SELECT 안에 JOIN이나 서브쿼리도 포함 가능 |
즉! 문제에서 ~테이블에서 어떤 튜플을 다른 ~테이블로 삽입하시오. 라는 문제가 나올텐데
위에와 같은 구조를 인지하고 SQL문을 구성해야한다.
삭제문 (DELETE FROM~)
일반 형식
DELETE
FROM 테이블명
[WHERE 조건];
*모든 레코드를 삭제할 때는 WHERE절을 생략한다.
*모든 레코드를 삭제하더라도 테이블 구조는 남아있기 때문에 디스크에서 테이블을 완전히 제거하는 DROP과는 다르다.
<사원>테이블에서 "임꺽정"에 대한 튜플을 삭제하시오.
DELETE
FORM 사원
WHERE 이름='임꺽정'
갱신문(UPDATE~SET~)
UPDATE 테이블명
SET 속성명 = 데이터[,속성명=데이터, .....]
[WHERE 조건]
예제 1. <사원> 테이블에서 "홍길동"의 '주소'를 '수색동'으로 수정하시오.
UPDATE 사원
SET 주소 = 수색동
WHERE 이름 = 홍길동
예제 2. <사원> 테이블에서 "황진이"의 '부서'를 "기획부"로 변경하고 '기본급'을 5만원 인상시키시오.
UPDATE 사원
SET 부서 = '기획', 기본급 = 기본급 + 5
WHERE 이름 = '황진이';
'📜✏️노트 자리없어서 적는 IT 지식📜✏️' 카테고리의 다른 글
정처산기 DML - SELECT(조회하다)문 (0) | 2025.04.15 |
---|---|
정처산기 자주 틀리는 문제. (2) | 2025.04.08 |
[오답노트] 정처산기 프로그래밍 언어 문제풀이 (0) | 2025.03.30 |
정처산기 프로그래밍 언어 문제 풀이. (2) | 2025.03.27 |
정처산기 문제 기준 학습하기 : HW 관련 기술 (0) | 2025.03.24 |