담비의 개발블로그

국비지원교육 42일차(9주차&DB) 본문

국비교육

국비지원교육 42일차(9주차&DB)

담비12 2024. 1. 11. 14:08

WHERE

- SELECT문으로 데이터를 조회할 때 특정 조건을 기준으로 원하는 행을 출력하는데 사용한다.

- SQL의 IF문이라고도 불린다.

부서 번호가 30인 데이터만 출력

SELECT * FROM EMP

WHERE DEPTNO = 30;

 

쓰는 방식

SELECT [조회할 열1 이름], [열2 이름], ... [열N 이름]

FROM [조회할 테이블 이름]

WHERE [조회할 행을 선별하기 위한 조건식];

 

AND, OR 연산자

- WHERE절에서 조건식을 여러 개 지정할 때 사용하는 논리연산자

SELECT [조회할 열1 이름], [열2 이름], ... [열N 이름]

FROM [조회할 테이블 이름]

WHERE [조건식1]

AND [조건식2]

OR [조건식3];


연산자

산술 연산자

- 더하기+ , 빼기 - , 곱하기 *, 나누기 /

 

비교 연산자

- 대소 비교 연산자

연산자 사용법 설명
> A>B A 값이 B값을 초과할 경우 true
>= A>=B A 값이 B값 이상일 경우 true
< A<B A 값이 B값 미만일 경우 true
<= A<=B A 값이 B값 이하일 경우 true

 

대소 비교 연산자는 문자열일 때도 사용할 수 있다. 

SELECT * FROM EMP

WHERE ENAME >= 'F';

이렇게 할 경우 사원 이름의 첫 문자가 F와 같거나 F뒤쪽인 것만 검색된다.

 

등기 비교 연산자

연산자 사용법 의미
= A = B A값이 B값과 같을 경우 TRUE
다를 경우 FALSE
!= A != B A 값과 B 값이 다를 경우 TRUE
같을 경우 FALSE
<> A <> B
^= A ^= B

 

논리 부정 연산자(NOT 연산자)

- A값이 TRUE일 경우 논리 부정 연산자의 결과 값은 FALSE가 된다. 이렇게 결과 값을 변경하기 위해 사용한다.

SELECT * FROP EMP

WHERE NOT SAL =  3000;

NOT연산자는 이런식으로 사용이 가능하다.

보통 IN, BETWEEN, IS NULL연산자와 함께 복합적으로 사용하는 경우가 많다.

 

IN 연산자

특정 열에 포함된 데이터를 여러 개 조회할 때 사용한다.

SELECT [조회할 열1 이름], [열2 이름], ... [열N 이름]

FROM [조회할 테이블 이름]

WHERE 열 이름 IN(데이터1, 데이터2, ... 데이터N);

 

SELECT * FROM EMPWHERE JOB IN('MANAGER', 'SALESMAN');이렇게 하면 직업이 MANAGER, SALESMAN인 사람들을 출력할 수 있다.

 

BETWEEN A AND B 연산자

- 일정 범위 내의 데이터를 조회할 때 사용한다.

SELECT [조회할 열1 이름], [열2 이름], ... [열N 이름]

FROM [조회할 테이블 이름]

WHERE 열 이름 BETWEEN 최솟값 AND 최댓값;

 

예를 들어 급여가 2000~3000 사이를 보고싶을때 출력하기 용이하다.

 

LIKE 연산자와 와일드 카드

- LIKE 연산자는 이메일이나 게시판 제목 또는 내용 검색 기능처럼 일부 문자열이 포함된 데이터를 조회할 때 사용한다.

SELECT * FROM EMP

WHERE ENAME LIKE 'S%';

대문자 S로 시작하는 데이터를 조회하라는 뜻

 

LIKE 연산자와 사용할 수 있는 와일드 카드는 _와 %이다.

_ : 어떤 값이든 상관없이 한 개의 문자 데이터를 의미한다.

% : 길이와 상관없이(문자 없는 경우도 포함) 모든 문자 데이터를 의미한다.

LIKE '_S%' 두번째 글자가 대문자 S인 경우만 출력

LIKE '%S%' S가 포함되어 있는 글자를 모두 출력

NOT LIKE '%S%' S가 포함되어 있지 않은 글자를 모두 출력

 

IS NULL 연산자

NULL은 데이터 값이 완전히 비어 있는 상태를 말한다. '현재 무슨 값인지 확정되지 않은 상태'이거나 '값 자체가 존재하지 않는 상태'이다.

 

SELECT * FROM EMP

WHERE ENAME = NULL;

을 하게 되면 값이 제대로 나오지 않는다.

 

SELECT * FROM EMP

WHERE ENAME IS NULL;

이렇게 써야 값이 제대로 출력된다.

 

SELECT * FROM EMP

WHERE ENAME IS NOT NULL;

NOT연산자는 IS와 NULL 사이에 작성한다.

 

집합 연산자

종류 설명
UNION 연결된 SELECT 문의 결과 값을 합집합으로 묶어준다.
결과 값의 중복은 제거된다.
UNION ALL 연결된 SELECT 문의 결과 값을 합집합으로 묶어준다.
중복된 결과 값도 제거 없이 모두 출력된다.
MINUS 먼저 작성한 SELECT문의 결과 값에서 다음 SELECT문의 결과 값을 차집한 처리한다. 먼저 작성한 SELECT문의 결과 값 중 다음 SELECT문에 존재하지 않는 데이터만 출력 된다.
INTERSECT 먼저 작성한 SELECT문과 다음 SELECT문의 결과 값이 같은 데이터만 출력된다. 교집합과 같은 의미이다.

 

 

 

 

 


함수

- 수학에서 정의한 개념으로 x와 y 변수가 존재하고 x값이 변하면 그 변화에 따라 어떤 연산 또는 가공을 거쳐 y 값도 함께 변할 때 이 y를 함수라고 한다.

 

내장 함수의 종류

- 단일행 함수 : 데이터가 한 행씩 입력되고 입력된 한 행당 결과가 하나씩 나오는 함수- 다중행 함수 : 여러 행이 입력되어 하나의 행으로 결과가 반환되는 함수

 

 

대 소문자를 바꿔주는 함수

UPPER(문자열) : 괄호 안 문자 데이터를 모두 대문자로 변환하여 반환
LOWER(문자열) : 괄호 안 문자 데이터를 모두 소문자로 변환하여 반환
INITCAP(문자열) : 괄호 안 문자 데이터 중 첫 글자는 대문자로, 나머지 문자를 소문자로 변환 후 반환

 

LENGTH(문자열 길이를 구하는 함수)

- 특정 문자열의 길이를 구할 때 사용한다.

SELECT ENAME, LENGTH(ENAME)

FROM EMP;

위처럼 작성하면 사원 이름이 몇글자인지 알 수 있다.

- WHERE절에서 LENGTH함수를 사용하여 선별도 가능하다.

- LENGTHB함수는 바이트 수를 반환한다. (오라클 버전마다 다르게 나타날 수도 있다.)

 

SUBSTR(문자열 일부를 추출하는 함수)

함수 설명
SUBSTR(문자열 데이터, 시작 위치, 추출 길이) 문자열 데이터의 시작 위치부터 추출 길이만큼 추출한다.
시작 위치가 음수일 경우에는 마지막 위치부터 거슬러 올라간 위치에서 시작한다.
SUBSTR(문자열 데이터, 시작 위치) 문자열 데이터의 시작 위치부터 문자열 데이터 끝까지 추출한다. 시작 위치가 음수일 경우에는 마지막 위치부터 거슬러 올라간 위치에서 끝까지 추출한다.

 

INSRT(문자열 데이터 안에서 특정 문자 위치를 찾는 함수)

- 문자열 데이터 안에 특정 문자나 문자열이 어디에 포함되어 있는지를 알고자 할때 사용한다.

INSTR([대상 문자열 데이터(필수)], [위치를 찾으려는 부분 문자(필수)], [위치 찾기를 시작할 대상 문자열 데이터 위치(선택, 기본값은1)], [시작 위치에서 찾으려는 문자가 몇 번째인지 지정(선택, 기본값은1)])

SELECT INSTR('HELLO, ORACLE!', 'L', 2, 2) AS INSTR_1

FROM DUAL;

 

REPLACE(특정 문자를 다른 문자로 바꾸는 함수)

- 특정 문자열 데이터에 포함된 문자를 다른 문자로 대체할 경우에 유용하다.REPLACE([문자열 데이터 또는 열 이름(필수)], [찾는 문자(필수)], [대체할 문자(선택)])

 

SELECT '010-1234-5678' AS REPLACE_BEFORE,

REPLACE(' 010-1234-5678', '-', ' ') AS REPLACE1

FROM DUAL;

결과 : 010 1234 5678 (-가 띄어쓰기로 바뀐다)

 

LPAD, RPAD(데이터의 빈 공간을 특정 문자로 채우는 함수)

- LPAD, RPAD는 각각 Left Padding(왼쪽 패딩), Right Padding(오른쪽 패딩)을 의미한다.

- 데이터와 자리수를 지정한 후 데이터 길이가 지정한 자릿수보다 작을 경우에 나머지 공간을 특정 문자로 채우는 함수이다.

LPAD ([문자열 데이터 또는 열이름(필수)], [데이터의 자릿수(필수)], [빈 공간에 채울 문자(선택])

RPAD ([문자열 데이터 또는 열이름(필수)], [데이터의 자릿수(필수)], [빈 공간에 채울 문자(선택])

 

SELECT 'ORACLE',

LPAD('ORACLE', 10, '*') AS LPAD1,

RPAD('ORACLE', 10, '*') AS RPAD1

FROM DUAL;

결과값 : **** ORACLE(LPAD), ORACLE****(RPAD)

 

CONCAT(두 문자열 데이터를 합치는 함수)

- 두 개의 문자열 데이터를 하나의 데이터로 연결해주는 역할을 한다.- 두개의 입력 데이터 지정을 하고 열이나 문자열 데이터 모두 지정할 수 있따.- 함수 대신 || 연산자를 사용할수도있따.

SELECT CONCAT (EMPNO, ENAME),

CONCAT (EMPNO, CONCAT('  :  ' , ENAME))

FROM EMP

WHER ENAME = 'SCOTT';

 

CONCAT (EMPNO, ENAME) 결과 : 7788SCOTT

CONCAT (EMPNO, CONCAT(' : ' , ENAME)) 결과 : 7788 : SCOTT

 

SELECT EMPNO || ENAME,

EMPNO || ' : ' || ENAME,

FROM EMP;

MPNO || ENAME  결과 : 7788SCOTT

MPNO || ' : ' ||ENAME  결과 : 7788 : SCOTT