기초 SQL을 정리했다.
이걸로는 부족하고, 여러 출판사에서 나온 교재에서 기출 문제를 열심히 풀어봐야 한다.
기출 문제를 봤을 때, JOIN 등 어려운 것들보다는 기초에 가까운 것들이 나왔다.
깃허브 위키 페이지에 정리했다.
주소는 여기 자격증:정보처리:기초 SQL 정리
누워서 자기 전이나 아침에, 지하철 같은 곳에서 쉽게 암기할 수 있다.
과제 |
SQL 명령어 |
DDL |
Data Define Language |
DDL 종류 |
CREATE, ALTER, DROP, TRUNCATE 등 |
사용자 id가 ‘라이언’인 스키마 ‘기업’을 만들라. |
CREATE SCHEMA 기업 AUTHORIZATION 라이언; |
A, B, AB, O 문자 2개로 표현되는 도메인 ‘혈액형’을 정의하라. 기본 혈액형은 A다. 제약조건명은 ‘제약조건_혈액형’이다. |
CREATE DOMAIN 혈액형 CHAR(2) DEFAULT ‘A’ COSTRAINT 제약조건_혈액형 CHECK(VALUE IN(‘A’, ‘B’, ‘AB’, ‘O’)); |
‘제품번호’, ‘품명’, ‘가격’으로 구성된 ‘제품’ 테이블을 만들어라. ‘제품번호’는 기본키다. ‘품명’은 NULL이 올 수 없다. ‘제품번호’는 문자10자다. ‘품명’은 최대 문자 30자다. ‘가격’은 숫자 8자다. |
CREATE TABLE 제품 (제품번호 CHAR(10), 품명 VARCHAR(30) NOT NULL, 가격 NUMBER(8), PRIMARY KEY 제품번호); |
외래기 지정 시 참조 테이블의 튜플이 삭제되면 기본 테이블의 관련 튜플도 모두 삭제되는 옵션 |
ON DELETE CASCADE |
참조 테이블 참조 속성 값이 변경되면 기본 테이블도 같이 변경되는 옵션 |
ON UPDATE CASCADE |
CREATE TABLE에서 ON DELETE, ON UPDATE 옵션 종류 |
NO ACTION, CASCADE, SET NULL, SET DEFAULT |
‘학생’ 테이블에서 ‘학년’이 1학년인 학생들의 ‘학번’과 ‘이름‘을 ‘1학년학생들’이라는 뷰로 만들어라. |
CREATE VIEW 1학년학생들(학번, 이름) AS SELECT 학번, 이름 FROM 학생 WHERE 학년 = 1; |
‘학생’ 테이블에서 ‘학년’이 1학년과 2학년인 학생들의 ‘학번’과 ‘이름‘을 ‘저학년학생들’이라는 뷰로 만들어라. |
CREATE VIEW 저학년학생들(학번, 이름) AS SELECT 학번, 이름 FROM 학생 WHERE 학년 IN (1, 2); |
‘학생’ 테이블에서 ‘학번’ 속성에 대해 내림차순으로 정렬하여 ‘학번_idx’라는 이름으로 인덱스를 만들어라. |
CREATE INDEX 학번_idx ON 학생(학번 DESC); |
‘학생’ 테이블에서 최대 50문자로 ‘주소’ 속성 추가 |
ALTER TABLE 학생 ADD 주소 VARCHAR(50); |
‘학생’ 테이블의 ‘주소’ 속성의 데이터 타입과 크기를 최대 40문자로 바꾸고 NULL 값 안 되도록 변경 |
ALTER TABLE 학생 ALTER 주소 VARCHAR(40) NOT NULL; |
‘기업’ 데이터베이스 또는 스키마를 제거 |
DROP SCHEMA 기업; DROP DATABASE 기업; |
‘혈액형’ 도메인 제거 |
DROP DOMAIN 혈액형; |
‘학생’ 테이블 제거 |
DROP TABLE 학생; |
‘학생’ 테이블 제거, 학생 테이블 참조하는 모든 데이터도 함께 삭제 |
DROP TABLE 학생 CASCADE; |
DCL |
Data Control Language |
DCL 종류 |
GRANT, REVOKE, COMMIT, ROLLBACK, SAVEPOINT 등 |
GRANT |
권한 부여 grant 부여하다. grant B to A B(물건)을 A사람에게 수여하다. |
REVOKE |
권한 취소 revoke 철회하다, 최소하다 |
사용자 ID ‘라이언’에게 직원 테이블에 대한 모든 권한과 다른 사람에게 권한을 부여할 수 있는 권한까지 부여 |
GRANT ALL ON 직원 TO 라이언 WITH GRANT OPTION; |
사용자 ID ‘베어’에게 부여한 직원 테이블에 대한 권한 중 DELETE 권한을 다른 사람에게 부여할 수 있는 권한 취소 |
REVOKE GRANT OPTION FOR DELETE ON 직원 FROM 베어; |
DML |
Data Manipulation Language |
DML의 유형 |
SELECT, INSERT, DELETE, UPDATE |
학생 테이블에 이름 – 라이언, 학번 103 삽입 |
INSERT INTO 학생(이름, 학번) VALUES (‘라이언’, ‘103’); |
학생 테이블에서 이름 라이언인 튜플 삭제 |
DELETE FROM 학생 WHERE 이름 = ‘라이언’; |
학생 테이블에서 이름이 라이언의 반을 4로 수정 |
UPDATE 학생 SET 반 = 4 WHERE 이름 = ‘라이언’; |
INSERT |
INSERT INTO 테이블명(~) VALUES ~ |
DELETE |
DELETE FROM 테이블명 WHERE ~ |
UPDATE |
UPDATE 테이블명 SET ~ WHERE ~ |
SELECT |
SELECT ~ FROM 테이블명 WHERE ~ GROUP BY ~ HAVING ~ ORDER BY ~ [ASC | DESC]; 순서 기억할 것. ORDER BY가 맨 뒤. FROM 다음 바로 WHERE 그 다음 GROUP BY |
학생 테이블에서 ‘동주소’만 검색, ‘동주소’는 중복이 있을 경우 한번만 출력 |
SELECT DISTINCT 동주소 FROM 학생; |
학생 테이블에서 학년이 6, 반이 1인 학생들의 모든 내용 검색 |
SELECT * FROM 학생 WHERE 학년 = 6 AND 반 = 1; |
학생 테이블에서 이름이 ‘박’으로 시작하는 학생들 검색 |
SELECT * FROM 학생 WHERE 이름 LIKE “박%”; |
점수 테이블에서 ‘국어’ 기준으로 내림차순 정렬 검색 |
SELECT * FROM 점수 ORDER BY 국어 DESC; |
점수 테이블에서 ‘반’ 기준으로 오름차순, ‘국어’ 기준으로 내림차순 정렬 검색 |
SELECT * FROM 점수 ORDER BY 반 ASC, 국어 DESC; |
학생 테이블에서 ‘반’별로 ‘학생수’(학생들의 숫자)를 출력. |
SELECT 반, COUNT(*) AS 학생수 FROM 학생 GROUP BY 반; |
점수 테이블에서 반이 1인 학생들 ‘국어’ 점수 평균 출력 |
SELECT AVG(국어) FROM 점수 WHERE 반 = 1; |