코딩하는 문과생
[SQL] 2. SQL 기초 & SELECT 본문
[ERD: 객체 관계도]
ERD: Entity Relationship Diagram
# Recursive relationship이 존재할 수도 있다.
자기가 자신을 참조
ex. 사원에 대한 사수와 관계
# 관계가 없는 테이블: Some table
-> JOIN이 될 수 있다.(Non-equals JOIN)
# 관계
실선: 식별 유형 (전이된 기본키가 자식테이블의 기본 키가 되는 경우, Optional이 사라진다.)
점선: 비식별 유형 (전이된 기본키가 자식테이블의 기본 속성이 되는 경우)
[기본용어]
행
컬럼
기본키(Identifier): 각 행을 식별할 수 있는 칼럼 또는 컬럼 조합 (중복 x, Null x, if 관계, no Change)
외래키: 다른 테이블의 기본키를 참조하는 컬럼 (부모테이블의 기본키가 자식 테이블에 전이된다. Null값 허용)
컬럼 값
[SQL]
SELECT: 데이터 검색(SELECT)
DML: 데이터 조작(INSERT, UPDATE, DELETE)
DDL: 데이터 정의(CREATE, DROP, ALTER)
TCL: 트랜잭션 제어(COMMIT, ROLLBACK)
[주요 데이터 타입]
NUMBER
CHARACTER(CHAR - 고정길이가 필요할 때, VARCHAR - 가변길이, LONG)
DATE
//참고: NUMBER(정수자릿수, 실수자릿수)
//DATE는 기본적으로 년/월/일 만 지원, 그리고 날짜 연산 및 비교 가능
[SELECT]
결과집합: Result Set 을 가져와야 한다.
특정 컬럼 조회
특정 행 조회
특정 행/컬럼 조회
조인된 테이블의 특정 행/컬럼 조회
SELECT * | [DISTINCT] ... , [AS] ...
FROM table_name
WHERE search_condition | [ [AND, OR], search_condition...];
[실습]
# ex1)
SELECT EMP_ID
, EMP_NAME
, SALARY
FROM EMPLOYEE ;
# ex2)
SELECT EMP_NAME,
SALARY*12 AS "1년 급여",
(SALARY+(SALARY*BONUS_PCT)) * 12 AS "총소득"
FROM EMPLOYEE ;
// [문자열]
// ' ': 기본 데이터에 사용
// " ": 기본 데이터 이외, 숫자로 시작, 특수문자 포함, 띄어쓰기 있을 경우
# ex3)
SELECT EMP_ID,
EMP_NAME,
'재직' AS 근무여부
FROM EMPLOYEE ;
// 더미 칼럼 추가도 가능
# ex4)
SELECT DISTINCT DEPT_ID
FROM EMPLOYEE ;
// DISTINCT는 중복사용이 불가능 하다. 단독으로만 사용 가능
SELECT DISTINCT JOB_ID, DEPT_ID
FROM EMPLOYEE ;
// 하나의 Composite키로 본다.
# ex5)
SELECT EMP_NAME AS 이름,
SALARY AS 급여
FROM EMPLOYEE
WHERE SALARY > 4000000;
// where는 행에 대한 필터링이다.
# ex6)
SELECT EMP_NAME AS 이름,
DEPT_ID AS 부서,
SALARY AS 급여
FROM EMPLOYEE
WHERE DEPT_ID = '90'
AND SALARY > 2000000;
//AND
//******************************
SELECT EMP_NAME AS 이름,
DEPT_ID AS 부서,
SALARY AS 급여
FROM EMPLOYEE
WHERE DEPT_ID = '90'
OR DEPT_ID = '20';
//OR
# ex7)
//연결연산자: 컬럼들을 연결시킬 수 있다.
SELECT EMP_NAME||'의 월급은 '||SALARY||'원 입니다.' AS 월급내용
FROM EMPLOYEE ;
# 비교연산자
<>, !=, ^= | 같지 않다. |
BETWEEN AND | 특정범위 |
LIKE, NOT LIKE | 문자 패턴을 비교 |
IS NULL, IS NOT NULL | NULL여부 |
IN | 비교 값 목록에 포함되는지 |
# ex8)
SELECT EMP_NAME,
SALARY
FROM EMPLOYEE
WHERE SALARY BETWEEN 3500000 AND 5500000;
#LIKE 연산자
- % : %부분에는 임의 문자열
- _ : 문자 1개만 있다는 의미
SELECT EMP_NAME,
SALARY
FROM EMPLOYEE
WHERE EMP_NAME LIKE '김%';
//******************************
SELECT EMP_NAME,
PHONE
FROM EMPLOYEE
WHERE PHONE LIKE '___9_______';
SELECT EMP_NAME,
EMAIL
FROM EMPLOYEE
WHERE EMAIL LIKE '___\_%' ESCAPE '\';
//ESCAPE OPTION에 사용하는 문자는 임의 지정 가능
# ex9)
SELECT EMP_NAME,
SALARY
FROM EMPLOYEE
WHERE EMP_NAME NOT LIKE '김%' ;
# ex10)
SELECT EMP_NAME, MGR_ID, DEPT_ID
FROM EMPLOYEE
WHERE MGR_ID IS NULL
AND DEPT_ID IS NULL ;
# ex11)
// IN
SELECT EMP_NAME, DEPT_ID, SALARY
FROM EMPLOYEE
WHERE DEPT_ID IN ('60', '90') ;
# ex12)
SELECT EMP_NAME, DEPT_ID, SALARY
FROM EMPLOYEE
WHERE DEPT_ID = '20'
OR DEPT_ID = '90'
AND SALARY > 3000000 ;
//오류 발생
//AND가 우선 순위가 더 높기 때문에
SELECT EMP_NAME, DEPT_ID, SALARY
FROM EMPLOYEE
WHERE ( DEPT_ID = '20'
OR DEPT_ID = '90' )
AND SALARY > 3000000 ;
'프로그래밍 > SQL' 카테고리의 다른 글
[SQL] 4. Additional SELECT(2) (0) | 2020.01.21 |
---|---|
[SQL] 3. Additional SELECT (0) | 2020.01.20 |
[SQL] 1. 환경 설정 (0) | 2020.01.20 |
[SQL] 프로그래머스, '고양이와 개는 몇 마리 있을까' (0) | 2020.01.04 |
[SQL] 프로그래머스 'NULL 처리하기' (0) | 2019.11.19 |