SELECT 개요
- 데이터 조회 범위(특정 컬럼, 특정 행, 특정 행/컬럼, 여러 테이블의 특정 행/컬럼 조인)
- 고려사항으로 대문자 작성, 들여쓰기, 나누어쓰기 구분, 공백 활용, 콤마도 개행 고려(Ex SELECT)
- RDBMS는 기본적으로 M:N 표현 불가(다른 방법 활용), 대부분이 1:N의 관계, 타원형의 표현식(Optional), 재귀적 관계(자기자신 컬럼을 외래키로 참조)
- Equal 조인은 관계가 있는 조인 / Not Equal 조인은 관계 없는 조인(단독 테이블도 JOIN으로 활용 가능)
- ERD 관계가 점선/실선의 차이 > 식별 유형, 전이된 FK가 기본키가 되면 식별 유형 / 전이된 FK키가 일반 속성이 되면 비식별(그래서 식별유형은 Optional이 없어짐)
# SELECT의 기본 구문
SELECT * | [DISTINCT] {{column_name | exper} {[AS] [alias]}, ...}
FROM table_name
WHERE search_condition [{AND | OR}, search_condition, ...];
SELECT EMP_NAME AS 이름,
SALARY AS "급여(원)"
FROM EMPLOYEE;
오라클은 문자 데이터타입은 '싱글 쿼테이션'으로 표현(원래 오라클은 데이터만 대소문자 구분한다)
별칭은 일반적으로 그냥 문자로 표현,
BUT "더블 쿼테이션"은 공백 포함, 숫자로 시작, 특수문자 포함을 뜻한다
SELECT EMP_ID,
EMP_NAME,
'재직' AS 근무여부
FROM EMPLOYEE;
더미데이터 넣기 '재직' AS 근무여부
SELECT DISTINCT DEPT_ID
FROM EMPLOYEE;
DISTINCT는 QUERY에서 한 번만 사용 가능
-- 급여 4,000,000 원 이상
SELECT EMP_NAME AS 이름,
SALARY AS 급여
FROM EMPLOYEE
WHERE SALARY > 4000000;
-- 부서번호 90
SELECT EMP_NAME AS 이름,
DEPT_ID AS 부서
FROM EMPLOYEE
WHERE DEPT_ID = '90';
-- 부서코드 90이고 급여를 2000000이상
SELECT EMP_NAME AS 이름,
DEPT_ID AS 부서,
SALARY AS 급여
FROM EMPLOYEE
WHERE DEPT_ID = 90
AND SALARY > 2000000;
-- 90 부서나 20 부서 소속
SELECT EMP_NAME AS 이름,
DEPT_ID AS 부서,
SALARY AS 급여
FROM EMPLOYEE
WHERE DEPT_ID = '90'
OR DEPT_ID = '20';
WHERE절을 통해 조건 입력하기
SELECT EMP_NAME||'의 월급은'||SALARY||'원 입니다.'
FROM EMPLOYEE;
연결연산자 || 를 입력하면 여러 컬럼을 하나의 컬럼인 것 처럼 연결하거나 리터럴을 연결할 수 있다
논리 연산자 주의 점
- NULL과 FALSE의 AND는 FALSE
- NULL과 FALSE의 OR은 NULL
- 같지 않다 <>, !=, ^=
- LIKE, NOT LIKE(문자 패턴 비교) > % 임의 문자열, _ 문자 개수 맵핑
- BETWEEN AND(특정 범위 포함되는지, 상한값 하한값 포함)
-- BETWEEN
SELECT EMP_NAME,
SALARY
FROM EMPLOYEE
WHERE SALARY BETWEEN 3500000 AND 5500000;
-- BETWEEN 과 동일한 의미
SELECT EMP_NAME,
SALARY
FROM EMPLOYEE
WHERE SALARY >= 3500000
AND SALARY <= 5500000;
-- LIKE 연산자 %
SELECT EMP_NAME, SALARY
FROM EMPLOYEE
WHERE EMP_NAME LIKE '김%';
-- LIKE 연산자 _
SELECT EMP_NAME, PHONE
FROM EMPLOYEE
WHERE PHONE LIKE '__9________';
-- 만약 _ 를 검색하고 싶다면
-- ESCAPE 뒤에 문자가 오면 그것은 와일드카드가 아니라는 의미
SELECT EMP_NAME,
EMAIL
FROM EMPLOYEE
WHERE EMPAIL LIKE '___\_%'ESCAPE'\';
-- NOT LIKE
SELECT EMP_NAME,
SALARY
FROM EMPLOYEE
WHERE EMP_NAME NOT LIKE '김%';
-- IS NULL
SELECT EMP_NAME, MGR_ID, DEPT_ID
FROM EMPLOYEE
WHERE MGR_ID IS NULL
AND DEPT_ID IS NULL;
-- IS NOT NULL
SELECT EMP_NAME, DEPT_ID, BONUS_PCT
FROM EMPLOYEE
WHERE DEPT_ID IS NULL
AND BONUS_PCT IS NOT NULL
-- IN ('60', '90')
SELECT EMP_NAME, DEPT_ID, SALARY
FROM EMPLOYEE
WHERE DEPT_ID IN ('60', '90');
-- 동일한 OR 구문
SELECT EMP_NAME, DEPT_ID, SALARY
FROM EMPLOYEE
WHERE DEPT_ID = '60'
OR DEPT_ID = '90';
-- 연산자 우선순위 () 활용
SELECT EMP_NAME, SALARY, DEPT_ID
FROM EMPLOYEE
WHERE (DEPT_ID = '20'
OR DEPT_ID = '90')
AND SALARY > 3000000;
-- CHAR TO DATE
TO_DATE('VAR', 'YYYY/MM/DD');
-- DATE TO CHAR
TO_CHAR(DATE_VAR, 'YYYY/MM/DD');
'Archived(CSE Programming) > SQL(Oracle)' 카테고리의 다른 글
SQL_SET_SubQuery (0) | 2020.01.22 |
---|---|
SQL_JOIN (0) | 2020.01.21 |
SQL_Additional_SELECT_그룹 함수 (0) | 2020.01.21 |
SQL_Additional_SELECT_단일 행 함수 (0) | 2020.01.20 |
SQL_DB의 기본 (0) | 2020.01.20 |