아래의 내용은 김지훈, "칼퇴족 김대리는 알고 나만 모르는 SQL", 책밥(2014)의 내용을 참고하여 공부한 기록입니다.
1장 SQL의 개요
-
데이터베이스(Database) : 공유의 목적을 가지고, 구조적인 방식으로 관리되는 데이터의 집합. 연관된 정보의 중복을 최소화하여 저장. 정규화를 통해 중복을 단계적으로 제거해 나간다.
-
데이터베이스 관리 시스템(DBMS, Database Management System) : 데이터를 정리하고 보관하기 위한 시스템
테이블(Table) : 특정한 종류의 데이터를 구조적 목록으로 묶은 것
스키마(Schema) : 테이블에 어떤 데이터를 어떤 형식으로 저장할 것인지 정의한 것
열(Column) : 속성(Attribute). 테이블을 구성하는 각각의 정보
행(Row) : 레코드(Record) 또는 튜플(tuple). 데이터가 한 줄에 저장된 것 -
SQL(Structured Query Language) : 사용자와 데이터베이스 시스템 간의 의사소통을 위해 특별히 고안된 언어
-
SQL의 종류
1.데이터 정의어(DDL, Data Definition Language) : 데이터와 그 구조를 정의하는 언어
- CREATE : 데이터베이스 테이블 생성
- DROP : 데이터베이스 테이블 삭제
- ALTER : 기존 데이터베이스 테이블 재정의
2.데이터 조작어(DML, Data Manipulation Language) : 데이터 검색과 수정 등의 처리를 위한 언어
- INSERT : 테이블에 데이터 삽입/입력
- DELETE : 테이블의 데이터 삭제
- UPDATE : 기존 테이블 안의 데이터 수정
- SELECT : 테이블 내 데이터 검색
3.데이터 제어어(DCL, Data Control Language) : 데이터베이스 사용자의 권한 제어를 위해 사용되는 언어
- GRANT : 테이블에 권한 부여
- REVOKE : 부여한 권한 취소/회수
2장 SQL의 기초
2-1. 데이터 가져오기
1. SELECT 열 이름 FROM 테이블명;
Ex1) CLERK 테이블에서 사번(ID)을 출력
- SELECT ID FROM CLERK;
Ex2) CLERK 테이블에서 사번, 이름(STAFF_NM)을 출력
- -SELECT ID, STAFF_NM FROM CLERK;
EX3) CLERK 테이블에서 사번; 이름; 생년월일(BIRTH_DT)을 출력
- -SELECT ID, STAFF_NM, BIRTH_DT FROM CLERK;
2-2. SQL의 특성
1.SQL은 소문자와 대문자를 구분하지 않는다.
- 하지만 구분이 쉽도록 키워드는 대문자로 입력하고 열 이름과 테이블은 소문자로 입력하기도 한다. (공유를 위해 팀원들의 문법을 확인하고 똑같이 따라하는 것이 베스트)
2.SQL은 공백을 무시한다.
- 가독성을 위해 여러 줄로 나눠서 쿼리문을 작성하자.
3.SQL의 키워드를 열 이름으로 바로 사용하면 에러가 발생한다.
- 키워드를 숙지하고 열 이름과 중복을 발생시키는 일이 없도록 하자. 하지만 DDL 사용이 많지는 않을 듯
4.SQL 문장은 세미콜론(;)을 사용하여 종결한다.
Ex1) CLERK 테이블에서 모든 열을 출력
- SELECT * FROM CLERK;
2-3. 열 정렬
1.SELECT 열 이름1, 열 이름2 FROM 테이블명 ORDER BY 열 이름1, 열 이름2;2.SELECT 열 이름1, 열 이름2 FROM 테이블명 ORDER BY 열 위치1, 열 위치2;
- 출력과 정렬 모두 선행되는 것이 우선순위가 된다. 이 경우에는 열 이름1을 우선 정렬하며 같은 이름에 대하여 열 이름2로 정렬하는 것
- 오름차순의 경우 ASC(Ascending)이며 기본값, 내림차순의 경우 DESC(Descending)이다.
Ex1) CLERK 테이블에서 이름을 기준으로 오름차순 정렬하여 이름 및 부서명 출력
- SELECT STAFF_NM, DEP_NM
FROM CLERK
ORDER BY STAFF_NM;
Ex2) CLERK 테이블에서 부서명을 기준으로 오름차순 정렬한 후, 이름으로 오름차순 정렬하여 이름 및 부서명을 출력
- SELECT STAFF_NM, DEP_NM
FROM CLERK
ORDER BY DEP_NM, STAFF_NM ASC;
Ex3) CLERK 테이블에서 재직 여부를 기준으로 내림차순 정렬한 후 성별을 기준으로 오름차순 정렬하여 재직 여부, 성별 및 이름을 출력
- SELECT EMP_FLAG, GENDER, STAFF_NM
FROM CLERK
ORDER BY EMP_FLAG DESC, GENDER ASC;
Ex4) PERF 테이블에서 고객 생년월일을 기준으로 오름차순 정렬해서 고객아이디, 고객 생년원일, 방문횟수 출력
- SELECT CUST_ID, CUST_BIRTH, VISIT_CNT
FROM PERF
ORDER BY CUST_BIRTH;
3장 SELECT문에 추가적으로 필요한 키워드
3-1. 중복 제거 (중요)
1.SELECT DISTINCT 열 이름 FROM 테이블명 ORDER BY 열 이름;
- 중복값을 제거하고 한 개의 값만 보는 것
- 이걸 잊어서 코딩 테스트를 못 풀었다. 잊지말자…
- 중복을 제거한 열 이름의 COUNT는 SELECT COUNT(DISTINCT 열 이름) FROM EMP;으로 하면 된다.
2.반대의 경우 ALL 키워드이지만 기본값이므로 사용할 필요는 없을 듯하다.
EX1) EMP 테이블에서 직급에 따라 어떤 인사고과를 받았는지 확인
- SELECT DISTINCT POSITION, GRADE
FROM EMP;
3-2. ALLIAS(별칭)
1.SELECT 열 이름 AS 새로운 열 이름 FROM 테이블명;2.SELECT 열 이름 “새로운 열 이름“ FROM 테이블명;
- AS의 경우 반드시 한 단어로 적어야 하지만, 인용부호(“”)를 이용할 경우 대소문자, 공백, 한글 등의 별칭을 허용한다. 하지만 한 단어로 사용하는 것이 좋을 것 같다.
EX1) EMP 테이블에서 사번을 나타내는 ID를 CLERK_ID로, 인사고과를 나타내는 GRADE를 PERF로 별칭 부여
- SELECT ID AS CLERK_ID, POSITION, PARTY_NM, MANAGER_ID, TEAM_NM, GRADE AS PERF
- FROM EMP;
'스터디 > SQL' 카테고리의 다른 글
[SQL] SQL 기초교재 10 ~ 12 (0) | 2019.08.03 |
---|---|
[SQL] SQL 기초교재 07 ~ 09 (0) | 2019.08.03 |
[SQL] SQL 기초교재 04 ~ 06 (0) | 2019.08.03 |