
문법이 사용하기 쉬움
실행 순서와 상관없이 처리 내용을 명령할 수 있음
데이터의 검색, 조작, 정의가 용이함
표준 언어로 구성되어 있음
데이터의 검색, 조작, 정의가 용이함
SQL 문은 대·소문자 구분하지 않음(SELECT와 select는 동일하게 작동)
SQL 문은 한 줄 또는 여러 줄로 작성이 가능함
문장 마지막은 세미콜론(;)으로 끝남
예) SELECT * FROM users WHERE name = 'John' AND birth_date = '2025-01-01';
날짜와 문자열에는 작은 따옴표를 사용함
단어와 단어 사이는 공백 또는 줄바꿈으로 구분함
주석은 SQL 문에 포함되지만 실행되지 않음
단일 행 주석 : -- 로 시작
여러 줄 주석 : /*와 */로 묶음
예) -- 이것은 단일 행 주석입니다.
예) /* 이것은 여러 줄 주석입니다.*/
예)
CREATE TABLE 수강 (
수강코드 CHAR(10) PRIMARY KEY,
학번 CHAR(10) NOT NULL,
과목코드 CHAR(10) NOT NULL,
수강일 DATE NOT NULL,
점수 NUMBER,
CONSTRAINT fk_수강_학생 FOREIGN KEY (학번) REFERENCES 학생(학번),
CONSTRAINT fk_수강_과목 FOREIGN KEY (과목코드) REFERENCES 과목(과목코드)
);
제약 조건명을 명시적으로 부여할 수 있고, 묵시적으로 제약 조건명 없이 제약 조건을 설정할 수 도 있음
CHECK (재고량 >= 0 AND 재고량 <= 10000)
CONSTRAINT CHK_CPY CHECK (제조업체 = '한빛제과');


CREATE TABLE 학생 [
학번 CHAR(10) PRIMARY KEY CHECK (학번 LIKE 'S%"), -- 학번은 반드시 'S'로 시작
이름 VARCHAR2(50) NOT NULL
성별 CHAR(1) CHECK (성벌 IN ('M", 'F')),
생년월일 DATE NOT NULL,
전공 VARCHAR2(100)
-- 성별믄 'M" 또는 'F'
-- 생년월밀은 NULL 허용 안 함
INSERT ALL
INTO 학생 VALUES ('S001234567', "정수현", "M', TO_DATE('2004-10-09', 'YYYY-MM-DD'), '컴퓨터공학')
INTO 학생 VALUES ('S001234568',"정민기', 'F', TO_DATE('2003-06-01', "YYYY-MM-DD'), '경제학')
:
INTO 학생 VALUES ('S001234588', '무지개",'F', TO_DATE('2001-07-04',"YYYY-MM-DD'), 'Al')
SELECT * FROM dual;

CREATE TABLE 장학금 (
잠학금코드 CHAR(10) PRIMARY KEY,
학번 CHAR(10) NOT NULL,
금액 NUMBER(10,2) NOT NULL,
장학금종류 VARCHAR2(50),
지급일 DATE DEFAULT SYSDATE,.
CONSTRAINT fk_장학금_학생 FOREIGN KEY (학번) REFERENCES 학생(학번) -- 학생 테미블의 학번을 참조
INSERT ALL
INTO 장학금 VALUES('SCH001', 'S001234567', 1000000, '기초 장학금', TO_DATE('2025-01-01', "YYYY-MM-DD'})
INTO 장학금 VALUES('SCH002', 'S001234567', 500000, '성적 장학금', TO_DATE('2025-06-01', "YYYY-MM-DD'))
::
INTO 장학금 VALUES ('SCH007', 'S001234570', 1200000, '기초 장학금', TO_DATE('2025-01-01', "YYYY-MM-DD'})
INTO 장학금 VALUES('SCH008', 'S001234570', 800000, '성적 장학금', TO_DATE('2025-06-01', "YYYY-MM-DD'])
SELECT * FROM dual;
SELECT * FROM TAB;
DESCRIBE 학생;
-- 또는
DESC 학생;

SELECT * FROM ALL_CONSTRAINTS;
SELECT * FROM ALL_CONSTRAINTS
WHERE TABLE_NAME IN ('학생', '수강')
ORDER BYTABLE_NAME;

예시 )
CONSTRAINT fk_수강_과목 FOREIGN KEY (과목코드) REFERENCES 과목(과목코드)
ON DELETE CASCADE ON UPDATE RESTRICT;
참조동작
참조동작 옵션
NO ACTION
참조되는 튜플을 삭제하지 못하게 함
CASCADE
참조되는 튜플이 삭제될 때 관련 튜플도 함께 삭제함
SET NULL
참조되는 튜플이 삭제될 때 관련 튜플의 외래 키 값을 NULL로 변경함
NO ACTION
참조되는 튜플을 변경하지 못하게 함
CASCADE
참조되는 튜플의 값이 변경될 때 관련 튜플의 외래 키 값도 함께 변경함
SET NULL
참조되는 튜플이 변경될 때 관련 튜플의 외래 키 값을 NULL로 변경함
SET DEFAULT
참조되는 튜플이 변경될 때 관련 튜플의 외래 키 값을 미리 지정한 기본 값으로 변경함








DROP 학생TEMP CASCADE CONSTRAINTS;
CREATETABLE TABLE 학생TEMP
AS SELECT * FROM 학생;
SELECT * FROM 학생:
SELECT * FROM 학생TEMP;
SELECT * FROM
WHERE ALL_CONSTRAINTS
TABLE_NAME IN ('학생', '학생TEMP')
ORDER BYTABLE_NAME;

칼럼
추가/삭제/수정
제약 조건
추가/삭제
새로 추가한 칼럼은 테이블의 맨 마지막에 추가됨
ALTER TABLE 학생TEMP ADD(ADDRESS VARCHAR(80));
DESC 학생TEMP;

삭제 후 최소 하나 이상의 칼럼이 테이블에 존재해 야 함
ALTER TABLE 학생TEMP DROP COLUMN ADDRESS;
DESC 학생TEMP;

해당 칼럼의 모든 정의가 그대로 유지됨
ALTER TABLE 학생TEMP RENAME COLUMN 학번 TO STUDENT_ID;
DESCRIBE 학생TEMP;

칼럼의 크기를 확대하는 경우
칼럼의 크기를 확대하는 것은 항상 가능
칼럼의 크기를 축소하는 경우
테이블에 아무 행도 없을 때
이 경우에는 칼럼 크기를 자유롭게 축소할 수 있음
해당 칼럼이 NULL만 갖고 있을 때
NULL 값만 있는 경우에도 칼럼 크기를 축소할 수 있음
• 현재 저장된 값을 수용할 수 있는 크기로의 축소 가능
NOT NULL 제약 조건 추가
• 테이블에 아무 행도 없는 경우 가능
• 해당 칼럼에 NULL이 없을 때 가능
NOT NULL 제약 조건 삭제 → 항상 가능
- NOT NULL 제약 조건 추가/변경
- NOT NULL 추가
-- ALTER TABLE 테이블명 MODIFY (속성명 NOT NULL);
- NULL로 변경
-- ALTER TABLE 테이블명 MODIFY (속성명 NULL);
예)
학생TEMP 테이블에서 '이름' 속성이 NULL값을 허용하도록 정의를 변경하시오.
SELECT * FROM 학생TEMP;
DESC 학생TEMP;
ALTER TABLE 학생TEMP MODIFY(이름 NULL);
DESC 학생TEMP;
테이블 생성 이후에도 제약 조건을 추가/삭제할 수 있음
-- 제약 조건 확인
SELECT * FROM ALL_CONSTRAINTS
WHERE TABLE_NAME ='학생TEMP';

RENAME 기존 테이블명 TO 새 테이블명
학생TEMP 테이블의 명칭을 OLD_학생TEMP로 변경

DROP TABLE 학생_TEMP; -- 오류

DROP TABLE 학생 TEMP CASCADE CONSTRAINTS;
-- 제약조건 함께 삭제