본문 바로가기

Archived(CSE Programming)/SQL(Oracle)

SQL_SELECT

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