안녕하세요.
#yeoneeblog 여니입니다 :)
DML : 데이터 조작 , SELECT(DQL) , INSERT , UPDATE , DELETE
DDL : 데이터 정의 , CREATE , ALTER , DROP
TCL : 트랜잭션 제어, COMMIT, ROLLBACK
DCL : 권한 부여, GRANT, REVOKE
-명령어, 키워드, 컬럼명, 테이블명은 대소문자를 가리지 않는다.
- 소문자로 해도 무방하지만 대문자로 쓰는게 관례
<SELECT>
데이터를 조회하거나 검색할 때 사용하는 명령어
- RESERT SET : SELECT 구문을 통해 조회된 데이터의 결과물을 의미
(조회된 행들을 집합)
[표현법]
SELECT 조회하고자하는 컬럼명, 컬럼명2, 컬럼명3
FROM 테이블명;
<컬럼값을 통한 산술연산>
조회하고자하는 칼럼들을 나열하는 SELECT절에 산술연산(+-/*)을 기술해서 결과를 조회할 수 있다.
ex) 연봉( == 월급 * 12) -> SALARY * 12
* 산술연산과정에서 NULL값이 존재할 경우 산술연산의 결과마저도 NULL이 된다.
* DATE 타입끼리도 연산이 가능(DATE => 년,월,일,시,분,초)
* 오늘날짜 : SYSDATE
ex) 근무일수 조회(오늘날짜 - 입사일) -> SYSDATE - HIRE_DATE
<컬럼명에 별칭 부여하기>
[표현법]
컬럼명 AS 별칭, 컬럼명 AS "별칭" , 컬럼명 별칭 ★가장많이쓰임★, 컬럼명 "별칭"
AS를 붙이든 안붙이든 간에 별칭에 특수문자나 띄어쓰기가 포함된 경우 무조건 ""로 묶어서 표기해야함.
<리터럴>
임의로 지정한 문자열('')을 SELECT절에 기술하면 실제 그 테이블에 존재하는 데이터처럼 조회가
가능하다.
<DISTINCT>
조회하고자하는 컬럼에 중복된 값을 딱 한번만 조회하고자 할 때 사용
칼럼명 앞에 기술
[표현법]
DISTINCT 칼럼명
<WHERE 절>
조회하고자 하는 테이블에 특정 조건을 제시해서
그 조건에 만족하는 데이터들만 조회하고자 할 때 기술하는 구문
[표현법]
SELECT 컬럼명, 컬럼명... => 컬럼들을 뽑아내겠다.
FROM 테이블명
WHERE 조건식; => 조건에 만족하는 행들을 뽑아내겠다.
실행순서 ★짱 암기★
FROM(1등) => WHERE => SELECT
- 조건식에 다양한 연산자들 사용 가능
<비교연산자>
> , < , >= , <=
=(일치하는가? : 자바, 자스 == 이었음) ★주의★
!= , ^= , <> (일치하지 않는가?)
ex) 부서코드가 D9이 아닌 사원들의 사원명
WHERE DEPT_CODE != 'D9';
WHERE DEPT_CODE ^= 'D9';
WHERE DEPT_CODE <> 'D9';
* SELECT절에서 부여한 별칭을 WHERE절에서는 사용할 수 없음.
ex) EMPLOYEE 테이블에서 연봉이 5000만원 이상인 사원들의 이름, 연봉
SELECT EMP_NAME 이름, SALARY * 12 연봉
FROM EMPLOYEE
-- WHERE 연봉 >= 50000000; --오류발생 (FROM -> WHERE -> SELECT 순서로 실행되기 때문에, '연봉'이란 별칭이 WHERE 구문에서는 존재하지 않는다.)
WHERE SALARY *12 >= 50000000;
<논리연산자>
여러 개의 조건을 엮을 때 사용
AND(자바 &&), OR(자바 ||)
AND : ~이면서, 그리고
OR : ~이거나, 또는
<BETWEEN A AND B>
몇 이상 몇 이하인 범위에 대한 조건을 제시할 때 사용
[표현법]
비교대상칼럼명 BETWEEN 하한값 AND 상한값;
* BETWEEN AND 연산자는 DATE 형식간의 범위에도 사용 가능함.
ex) 입사일이 '90/01/01' ~ '03/01/01'인 사원들의 모든 컬럼 조회
WHERE HIRE_DATE >= '90/01/01' AND HIRE_DATE <= '03/01/01';
WHERE HIRE_DATE BETWEEN '90/01/01' AND '03/01/01';
* 오라클의 NOT은 자바의 논리부정연산자와 동일한 의미를 가짐. 위치는 칼럼명 앞, 뒤 상관없음.
ex) WHERE NOT SALARY BETWEEN 3500000 AND 6000000;
WHERE SALARY NOT BETWEEN 3500000 AND 6000000;
<LIKE '특정패턴'>
비교하고자하는 칼럼 값이 내가 지정한 특정 패턴에 만족될 경우 조회
[표현법]
비교대상컬럼명 LIKE '특정패턴'
- 옵션 : 특정패턴부분에 와일드카드인 '%', '_'를 가지고 제시할 수 있음
'%' : 0글자 이상
비교대상 칼럼명 LIKE '문자%' => 컬럼값중에 '문자'로 시작하는 것을 조회
비교대상 칼럼명 LIKE '%문자' => 컬럼값중에 '문자'로 끝나는 것을 조회
비교대상 칼럼명 LIKE '%문자%' => 칼럼값 중에 '문자'가 포함되는 것 조회
'_' : 1글자
비교대상 컬럼명 LIKE '_문자' => 해당 칼럼값 중에 '문자'앞에 무조건 1글자가 존재
비교대상 컬럼명 LIKE '__문자' => 해당 칼럼값 중에 '문자'앞에 무조건 2글자가 존재
<IS NULL>
해당 값이 NULL인지 비교해준다.
[표현법]
비교대상 컬럼 IN NULL : 컬럼값이 NULL일 경우
비교대상 컬럼 IS NOT NULL : 컬럼값이 NULL이 아닌 경우
★NULL 값 비교 대상 헷갈리지않게★
ex) 사수도 없고 부서배치도 아직 받지 않은 사원들의 모든 칼럼 조회
SELECT *
FROM EMPLOYEE
WHERE MANAGER_ID IS NULL AND DEPT_CODE IS NULL;
ex) 부서배치는 받지 않았지만 보너스는 받는 사원의 모든 컬럼 조회
SELECT *
FROM EMPLOYEE
WHERE DEPT_CODE IS NULL AND BONUS IS NOT NULL;
<IN>
비교 대상 칼럼값에 내가 제시한 목록들 중에 일치하는 값이 있는지 판단
[표현법]
비교대상칼럼 IN (값1, 값2, 값3, 값4,..,..)
<연결 연산자 || >
여러 칼럼값들을 마치 하나의 컬럼인것처럼 연결시켜주는 연산자
컬럼과 리터럴(임이의 문자열)을 연결할 수 있음
★자주 사용된다.★
ex) XX번 XXX의 월급은 XXXX원 입니다. AS 급여정보
SELECT
EMP_ID || '번 ' || EMP_NAME || '의 월급은 ' || SALARY || '원 입니다.' AS 급여정보
FROM EMPLOYEE;
<연산자 우선순위>
0. ()
1. 산술연산자
2. 연결연산자
3. 비교연산자
4. IS NULL, LIKE, IN
5. BETWEEN AND
6. NOT
7. 논리연산자 (AND)
8. 논리연산자 (OR)
<ORDER BY 절>
SELECT문 가장 마지막에 기입하는 구문일뿐만 아니라 실제로도 가장 마지막에 실행되는 구문
최종 조회된 결과물들에 대해서 정렬 기준을 세워주는 구문
[표현법]
SELECT 조회할 칼럼 1,2,3....
FROM 조회할 테이블명
WHERE 조건식(생략가능)
ORDER BY [정렬기준으로 세우고자하는 컬럼명/별칭/컬럼 순번] [ASC/DESC] (생략가능) [NULLS FIRST/NULLS LAST] (생략가능)
* ORDER BY는 숫자 뿐만아니라 문자열, 날짜에 대해서도 정렬가능하다.
오름차순 / 내림차순
- ASC : 오름차순 (생략시 기본값)
- DESC : 내림차순
정렬하고자하는 컬럼값에 NULL이 있을 경우
- NULLS FIRST : NULL값들을 앞으로 배치하겠다.(내림차순의 기본값)
- NULLS LAST : NULL값들을 뒤쪽으로 배치하겠다.(오름차순의 기본값)
'Oracle SQL > Oracle SQL 요약정리' 카테고리의 다른 글
Oracle SQL 요약정리 - 집합 연산자 SET OPERATOR(UNION, UNION ALL, INTERSECT, MINUS) (0) | 2023.06.01 |
---|---|
Oracle SQL 요약정리 - 함수(GROUP BY, HAVING, ROLLUP, CUBE, SELECT 문 구조 및 실행순서) (0) | 2023.06.01 |
Oracle SQL 요약정리 - 함수(NULL 처리 함수,선택함수-DECODE,CASE WHEN THEN,그룹함수) (0) | 2023.06.01 |
Oracle SQL 요약정리 - DB (함수 FUNCTION) (0) | 2023.05.31 |
Oracle SQL 요약정리 (0) | 2023.05.31 |