Backend/Oracle

[DB] SQL, DML(SELECT),연산자,WHERE, DISTINCT, ORDER BY

Deeb 2021. 9. 18. 01:13

✍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 기본값

반응형