✍SQL(Structured Query Language)
: 구조적 / 질의 / 언어
== 구조적인 질의를 하기 위한 언어
관계형 데이터베이스(RDBMS)에서 데이터를 조회하거나 조작하기 위해 사용하는 언어
원하는 데이터를 찾는 방법이나 절차를 기술하는 것이 아닌 조건을 기술하여 작성
⭐중요⭐
➡ DML (Data Manipulation Language)
: 데이터 조작(조회, 삽입, 수정, 삭제)
➡ 숫자: 정수 실수 구분없이 숫자이다
➡ 문자 : 똑같은 가변길이 문자이더라도 LONG보다는 용량이 더 큰 CLOB을 많이 쓴다.
🚩 SELECT
: 조회
SELECT문을 이용하여 데이터를 조회하는 경우
알맞은 조회 결과의 묶음인 RESULT SET이 반환된다.
참고) DML > DQL
SELECT는 DML, DQL에서 둘 다 사용가능한데 DML이 더 큰 개념이다.
데이터를 조회한 결과를 Result Set이라고 하는데 SELECT구문에 의해 반환된 행들의 집합을 의미
Result Set은 0개 이상의 행이 포함될 수 있고Result Set은 특정한 기준에 의해
정렬 가능 한 테이블의 특정 컬럼, 특정 행, 특정 행/컬럼 또는 여러 테이블의 특정 행/컬럼 조회 가능
👉 0개 이상 : 조회 결과가 없을 수도 있다.
작성법
SELECT 컬럼 명 [, 컬럼명, …]
FROM 테이블 명 WHERE 조건식;
👉 SELECT
: 조회하고자 하는 컬럼명 기술 여러 컬럼을 조회하는 경우 컬럼은 쉼표로 구분하고, 마지막 컬럼 다음은 쉼표를 사용하지 않는다.
: 모든 컬럼 조회 시 컬럼 명 대신 ‘*’ 기호 사용 가능하며 조회 결과는 기술한 컬럼 명 순으로 표시 된다.
👉 FROM
: 조회 대상 컬럼이 포함된 테이블 명 기술
👉 WHERE
: 행을 선택하는 조건 기술 여러 개의 제한 조건을 포함할 수 있으며, 각각의 제한 조건은 논리 연산자로 연결 제한 조건을 만족시키는 행들만 Result Set에 포함
데이터 차트에서 ‘열’을 선택하면 해당 데이터 차트의 컬럼을 볼 수 있다.
EMPLOYEE- 열에서 코멘트를 통해 파악하기
➡ 질의 결과는
RESULT SET
한 행을 각 RESULT로
예제
예제 1. EMPLOYEE 테이블에 있는 모든 사원 정보 조회
SELECT *
FROM EMPLOYEE;
👉 *
: ALL, '모든'을 뜻하는 기호
해당 테이블의 모든 것을 조회한다.
예제 2. JOB테이블에서 직급명 조회
SELECT JOB_NAME FROM JOB;
➡ JOB이라는 예약어가 있지만 테이블명 작성 자리에 있으므로 예약어가 아닌 테이블명으로 인식한다.
1. 컬럼 값 산술 연산
컬럼 값 : 테이블의 한 셀(한 칸)에 작성된 값
SELECT 시 컬럼명에 숫자, 연산자를 작성하면 조회 되는 결과의 해당 연산이 반영된다.
1) 컬럼 값에 대해 연산한 결과 조회 가능
예제 1. EMPLOYEE 테이블에서 사번, 이름, 급여, 급여 * 보너스 조회
SELECT EMP_ID, EMP_NAME, SALARY, SALARY * BONUS
FROM EMPLOYEE;
➡ (중요) 연산 시 사용되는 값은 해당 행의 값들로 이루어져 있다.
2) 컬럼 별칭
SELECT 조회 결과인 RESULT SET의 컬럼명을 지정
1. 컬럼명 AS 별칭 : 띄어쓰기 없이 문자만 별칭 지정 가능(특수문자 X)
2. 컬럼명 별칭 : 1) 방법에서 AS 생략
3. 컬럼명 AS "별칭" : 제한 없이 어떤 문자, 특수문자, 띄어쓰기가 별칭으로 작성 가능
4.컬럼명 "별칭" : 3) 방법에서 AS 생략
2. ⭐️SYSDATE ⭐️
시스템상 현재 시간(년, 월, 일, 시,분 ,초 단위까지 표현되지만, 디벨로퍼 표현이 년/월/일 까지만 나온다.)
특징
- 날짜끼리의 +, - 연산이 가능하다. (일 단위) (월, 연 단위는 함수 필요)
- 시간은 미래를 표현할수록 수가 점점 커진다.(현재 - 과거)
작성법
SELECT SYSDATE FROM DUAL;
➡ 오늘 날짜 조회
👉 DUAL(DUMMY TABLE)
: 가짜(가상) 테이블(임시 테이블, 단순 조회용으로 사용)
예제 1. 오늘 날짜, 1주일 후 날짜 조회
SELECT SYSDATE, SYSDATE + 7 FROM DUAL;
➡ 날짜 연산
예제 2. EMPLOYEE 테이블에서 이름, 입사일, 입사일부터 오늘까지 몇일인지 조회
SELECT EMP_NAME, HIRE_DATE, SYSDATE - HIRE_DATE FROM EMPLOYEE;
➡ 현재 - 과거
3. 리터럴
값 자체
임의로 지정한 값을 기존 테이블에 존재하는 값 처럼 사용
👉 '' (홑따옴표)
: 문자
예제 1. EMPLOYEE 테이블에서 사번, 이름, 급여, 단위(값 : 원) 조회
SELECT EMP_ID, EMP_NAME, SALARY, '원' AS 단위
FROM EMPLOYEE;
4. DISTINCT
컬럼에 포함된 중복 값을 한 번만 표시할 때 사용
주의사항 ❗
- DISTINCT 는 SELECT문에 딱 한 번만 작성할 수있다.
- DISTINCT 는 SELECT의 컬럼명 가장 앞에 작성해야한다.
예제 1. EMPLOYEE 테이블에서 직급 코드 조회
SELECT DISTINCT JOB_CODE FROM EMPLOYEE;
5. WHERE 절
자바의 IF문과 비슷하다
:검색할 컬럼의 조건을 설정하여 행 결정
테이블에서 조건을 충족하는 값을 가진 행만 조회할 때 조건을 작성하는 부분
여러 개 조건 작성 시 AND/OR 사용
특징
- 조건식: 연산 결과가 true,false --> 비교 연산자, 논리 연산자를 사용할 수 있다
예제 1. EMPLOYEE 테이블에서 급여가 3백만 초과인 사원의 사번, 이름, 급여, 부서코드를 조회
SELECT EMP_ID, EMP_NAME, SALARY, DEPT_CODE
FROM EMPLOYEE
WHERE SALARY > 3000000;
➡ 처리 순서: 조회-SELECT > 조회내용 > 조회테이블 FROM EMPLOYEE > 조건 WHERE
6. 연산자
연산자 우선 순위
: AND 연산자가 OR 연산자보다 우선 순위가 높아서 조건에 맞지않는 결과가 나올 수 있다.
--> ()를 씌워서 OR 연산을 먼저 진행하게 한다.
1. 산술연산자
2. 연결연산자
3. 비교연산자
4. IS NULL / IS NOT NULL, LIKE, IN / NOT IN
5. BETWEEN AND / NOT BETWEEN AND
6. NOT(논리연산자)
7. AND(논리연산자)
8. OR(논리연산자)
1) 논리 연산자 (AND, OR)
여러 개 조건 작성 시 AND/OR 사용
예제 1. EMPLOYEE 테이블에서 급여가 300만 이상, 500만 이하인 사원의 사번, 이름, 급여 조회
SELECT EMP_ID, EMP_NAME, SALARY
FROM EMPLOYEE
WHERE SALARY >= 3000000
AND SALARY <= 5000000;
예제 2. EMPLOYEE 테이블에서 부서코드가 'D6' 또는 'D9'인 사원의 사번, 이름, 부서코드 조회
SELECT EMP_ID, EMP_NAME, DEPT_CODE
FROM EMPLOYEE
WHERE DEPT_CODE = 'D6' OR DEPT_CODE = 'D9';
2) 연결 연산자 ( | | )
‘||’를 사용하여 여러 컬럼을 하나의 컬럼인 것처럼 연결하거나 컬럼과 리터럴을 연결함
여러 컬럼 값 또는 문자열을 연결하는 연산자
(자바의 '문자열 + 문자열' 연산(이어쓰기)와 같음)
- 자바와 연결할때 굉장히 유용하다. SQL에서 미리 가공을 해두었기때문에 자바에서 추가로 작업하지 않아도 된다.
예제 1. 컬럼과 컬럼을 연결한 경우
SELECT EMP_ID || EMP_NAME || SALARY FROM EMPLOYEE;
예제 2. 컬럼과 리터럴을 연결한 경우
SELECT EMP_NAME || ‘의 월급은 ‘ || SALARY || ‘원 입니다.’ FROM EMPLOYEE
3) 비교 연산자
표현식 사이의 관계를 비교하기 위해 사용하고 비교 결과는 논리 결과(TRUE/FALSE/NULL) 중 하나가 된다.
단, 비교하는 두 컬럼 값/표현식은 서로 동일한 데이터 타입이어야 한다.
🔎 BETWEEN AND
1. 컬럼명 NOT BETWEEN A AND B
: A 미만 B 초과
2. 컬럼명 NOT BETWEEN A AND B
: A 미만 B 초과
🔎 LIKE
비교하려는 값이 지정한 특정 패턴을 만족 시킬 때 조회
작성법
WHERE 컬럼명 LIKE '문자패턴'
LIKE 문자 패턴 : '%', '_' (WHILD CARD 와일드 카드라고 부른다)
'%'
'A%' : 문자열이 A로 시작하는 모든 컬럼 값
'%A' : 문자열이 A로 끝나는 모든 컬럼 값
'%A%' : 문자열에 A가 포함된 모든 컬럼 값
'_' : 아무 글자나 개수 의미
'A_' : A뒤에 아무거나 한 글자
___A' : A앞에 아무거나 세 글자
🔎 IN 연산자
비교하려는 값과 목록에 작성된 값 중 일치하는 것이 있으면 조회하는 연산자
-- == OR 연산을 연달아 진행 하는 것과 같음
작성법
컬럼명 IN(목록1, 목록2, 목록3, ...)
🔎 NULL 연산자
자바에서 NULL : 참조하는 객체(주소)가 없다.
DB에서 NULL : 컬럼값이 없음
IS NULL : 컬럼 값이 NULL인 경우 조회
IS NOT NULL : 컬럼 값이 NULL이 아닌 경우 조회
작성법
컬럼명 IS NULL
7. OREDER BY 절
SELECT의 결과 집합(RESULT SET)을 정렬할 때 작성하는 구문
SELECT 구문 제일 마지막에 작성하며
-- 해석도 제일 마지막으로 해석된다.
- | : 또는
- [] : 생략가능
작성법 및 해석 순서
SELECT 컬럼명
FROM 테이블명
WHERE 조건
ORDER BY 컬럼명 | 별칭 | 컬럼순서 정렬방식 [NULL FIRST|LAST]
(3개 중 하나를 뒤에 넣을수 있다)
➡ 해석순서 : FROM > WHERE > SELECT > ORDER BY
1) 오름차순
ORDER BY 컬럼명 ASC
정렬 시 오름 차순이 기본값이기 때문에 ASC 생략 가능
2) 내림차순
ORDER BY 컬럼명 DESC
정렬 시 오름 차순이 기본값이기 때문에
오름 차순일 때 : NULLS LAST 기본값
내림 차순일 때 : NULLS FIRST 기본값
'Backend > Oracle' 카테고리의 다른 글
[DB] JOIN (0) | 2021.09.23 |
---|---|
[DB] SELECT문 해석 순서 | GROUP BY, ORDER BY,HAVING, 집계 함수 (0) | 2021.09.21 |
[DB] 함수(Function)_단일행, 그룹 (0) | 2021.09.18 |
[DB|Oracle] 개발환경 기초 설정, CREATE·GRANT (0) | 2021.09.17 |
[DB|Oracle] Database, DBMS 정의 종류 특징 (0) | 2021.09.16 |