<WHERE문>
1. WHERE문이 사용하는 연산자
- 비교 연산자 생략 (>,<,=)
-부정 비교 연산자
연산자 | 설명 |
!= | 같지 않은 것 조회 |
^= | 같지 않은 것 조회 |
<> | 같지 않은 것 조회 |
NOT 칼럼명 = | 같지 않은 것 조회 |
NOT 칼럼명 > | 크지 않은 것 조회 |
- 논리 연산자
연산자 | 설명 |
AND | 조건을 모두 만족해야 참 |
OR | 조건 중 하나만 만족해도 참 |
- SQL 연산자
연산자 | 설명 |
LIKE '비교 문자열' | 비교 문자열을 조회(%,-,^,[]등 사용) |
BETWEEN A AND B | A와 B 사이의 값을 조회 |
IN (list) | OR을 의미하며 list 값 중에 하나만 일치해도 조회됨 |
IS NULL | NULL 값을 조회 |
- 부정 SQL 연산자
연산자 | 설명 |
NOT BETWEEN A AND B | A와 B 사이의 해당되지 않는 값을 조회 |
NOT IN (list) | list와 불일치한 것을 조회 |
IS NOT NULL | NULL 값이 아닌 것을 조회 |
SELECT *
FROM EMP
WHERW EMPNO=1001 AND SAL >= 1000 ; / enpno가 1001이고, sal이 1000이상인 데이터 조회
2. LIKE문 사용
- 와일드 카드를 사용해 데이터 조회
와일드카드 | 설명 |
% | 어떤 문자를 포함한 모든 것을 조회 ex) %조% -> 조를 포함한 모든 문자 조% -> 조로 시작하는 모든 문자 |
_ | 한개인 단일 문자를 의미 ex) 조__ -> 조로 시작하는 3글자 문자 __조 -> 조로 끝나는 3글자 문자 |
SELECT *
FROM EMP
WHERE ENAME LIKE '%est%' // ename의 중간에 est가 포함된 모든 데이터 조회
SELECT *
FROM EMP
WHERE ENAME LIKE 'test_'; // ename 칼럼이 test로 시작하고 하나의 글자만 더 있는 데이터 조회
3. Between문 사용
- 지정된 범위에 있는 값을 조회
- 사이는 AND로 표시
SELECT *
FROM EMP
WHERE SAL BETWEEN 20000 AND 20001; // SAL값이 20000이상 20001이하인 데이터 조회
WHERE 칼럼명 BETWEEN 값1 AND 값2;
SELECT *
FROM EMP
WHERE SAL NOT BETWEEN 20000 AND 20001; // SAL값이 20000미만 20001초과인 데이터 조회
WHERE NOT 칼럼명 BETWEEN 값1 AND 값2;
4. IN문 사용
- OR의 의미를 가짐 (하나의 조건만 만족해도 조회)
SELECT *
FROM EMP
WHERE JOB IN ('CLERK', 'MANAGER'); // JOB 칼럼이 'CLERK'이나 'MANAGER'인 데이터 조회
WHERE 칼럼명 IN ('값1', '값2');
SELECT *
FROM EMP
WHERE (JOB,ENAME) IN (('CLERK', 'test1'),('MANAGER', 'test4')); // 여러 칼럼 조건 지정 가능
4. NULL값 조회
- 모르는 값, 값의 부재 의미
- 숫자 or 날짜 + NULL = NULL
- NULL과 어떤 값을 비교하면 '알수없음' 반환
- NULL 관련 함수 (Oracle 함수 이므로 다른 데이터베이스와 호환불가)
NULL 함수 | 설명 |
NVL 함수 | - NULL값이면 다른 값으로 바꾸는 함수 - NVR(MGR, 0)은 MGR 칼럼이 NULL이면 0으로 바꾼다. |
NVL2 함수 | - NVL함수와 DECODE 함수를 하나로 만든 것 - NVR2(MGR,1,0)은 MGR 칼럼이 NULL이 아니면 1을 NULL이면 0을 반환 |
NULLIF 함수 | - 두개의 값이 같으면 NULL을, 같지 않으면 첫번째 값을 반환 - NULLIF(exp1, exp2)은 exp1와 exp2가 같으면 NULL을 같지 않으면 exp2를 반환 |
COALESCE | - NULL이 아닌 최초의 인자 값을 반환 - COALESCE(exp1, exp2, exp3)은 exp1이 NULL이 아니면 exp1 값을, 그렇지 않으면 그 뒤의 값의 NULL 여부를 판단해 값을 반환 |
<GROUP 연산>
1. GROUP BY문
- 테이블에서 소규모 행을 그룹화해 합계, 평균, 최댓값, 최솟값 등을 계산할 수 있다.
- ORDER BY로 정렬 가능
SELECT DEPTNO, SUM(SAL)
FROM EMP
GROUP BY DEPTNO; // 부서별 월급합 계산
2. HAVING문
- GROUB BY사용시에는 HAVING구에 조건문 사용 (WHERE절에 조건문을 사용하면 조건 불충족 데이터들은 GROUP BY 대상에서 제외)
SELECT DEPTNO, SUM(SAL)
FROM EMP
GROUP BY DEPTNO
HAVING SUM(SAL)>10000; // 그룹별 월급합이 10000이상인 경우 조회
3. 집계 함수 종류
집계 함수 | 설명 |
COUNT() | 행 수를 조회 - COUNT(*) : NULL 값을 포함한 모든 행 계산 - COUNT(칼럼명) : NULL 값을 제외한 행 계산 |
SUM() | 합계를 계산 |
AVG() | 평균을 계산 |
MAX()와 MIN() | 최댓값과 최솟값을 계산 |
STDDEV() | 표준편차를 계산 |
VARIAN() | 분산을 계산 |
<SELECT문 실행순서>
1. FROM (테이블을 읽어옴)
2. WHERE (조건에 해당하는 데이터 찾기)
3. GROUP BY (그룹별로 분류)
4. HAVING (조건에 해당하는 그룹 찾기)
5. SELECT (조회할 칼럼 찾기)
6. ORDER BY(정렬)
<명시적(Explicit) 형변환과 암시적(Implicit) 형변환 >
- 형변환 : 두개의 데이터의 데이터 타입(형)이 일치하도록 변환하는 것
ex) 숫자&문자열 비교, 문자열&날짜형 비교 등 데이터 타입이 불일치할 때 발생
- 명시적(Explicit)과 암시적(Implicit) 형변환이 있다.
- 명시적 형변환은 형변환 함수를 사용해 데이터 타입을 일치 시킴 ( 개발자가 SQL을 사용할 때 형변환 함수를 사용해야 함 )
- 암시적 형변환은 개발자가 형변환을 하지 않은 경우 데이터 베이스 관리 시스템이 자동으로 형변환 하는 것을 의미
형변환 함수 | 설명 |
TO_NUMBER(문자열) | 문자열을 숫자로 변환 |
TO_CHAR(숫자 혹은 날짜, [FORMAT]) | 숫자 혹은 날짜를 지정된 FORMAT의 문자로 변환 |
TO_DATE(문자열, FORMAT) | 문자열을 지정된 FORMAT 형태의 날짜형으로 변환 |
SELECT *
FROM EMP
WHERE EMPNO = '100';
// 숫자형 데이터 타입을 가진 EMPNO 칼럼에 문자형 데이터 타입 '100'을 비교해 암시적 형변환이 일어난다.
// Oracle이 자동으로 EMPNO을 TO_CHAR(EMPNO)로 변환해 데이터 타입을 일치 시킴
* 인덱스 칼럼에 형변환이 일어나면 인덱스를 사용할 수 없다.
WHERE EMPNO = TO_NUMBER('100');
* 명시적 형변환을 사용해 EMPNO 칼럼이 변환되지 않도록 한다. (인덱스 사용 가능)
< 내장형 함수 >
1. 내장형 함수
- 모든 데이터베이스는 SQL에서 사용할 수 있는 내장형 함수를 가지고 있음
(DBMS 벤더별로 약간의 차이가 있지만 거의 비슷한 방법으로 사용 가능)
- 형변환 함수, 문자열 및 숫자형 향수, 날짜형 함수가 있다.
2. DUAL 테이블
- Oracle 데이터베이스에 의해 자동으로 생성되는 테이블
- Oracle 데이터베이스 사용자가 임시로 사용할 수 있는 테이블로 내장형 함수를 실행할 때도 사용 가능
DESC DUAL; // oracle은 기본적으로 dual이라는 dummy 테이블이 존재
3. 내장형 함수의 종류
- 문자열 함수
문자열 함수 | 설명 |
ASCII(문자) | 문자 혹은 숫자를 ASCII 코드값으로 변환 |
CHR(ASCII 코드값) | ASCII 코드값을 문자로 변환 |
SUBSTR(문자열,m,n) | 문자열을 m번째 위치부터 n개를 자름 |
CONCAT(문자열1,문자열2) | 문자열 1번과 문자열 2번을 결합한다. - Oracle은 '||', MS-SQL은 '+' 사용 가능 |
LOWER(문자열) | 영문자를 소문자로 변환 |
UPPER(문자열) | 영문자를 대문자로 변환 |
LENGTH 혹은 LEN(문자열) | 공백을 포함해 문자열의 길이를 계산 |
LTRIM(문자열, 지정문자) | 왼쪽에서 지정된 문자를 삭제 |
RTRIM(문자열, 지정문자) | 오른쪽에서 지정된 문자를 삭제 |
TRIM(문자열, 지정된 문자) | 왼쪽 및 오른쪽에서 지정된 문자를 삭제 |
- 날짜형 함수
날짜형 함수 | 설명 |
SYSDATE | 오늘의 날짜를 날짜 타입으로 알려줌 |
EXTRACT('YEAR' | 'MONTH' | 'DAY' from dual) | 날짜에서 년,월,일을 조회 |
SELECT SYSDATE, EXTRACT(YEAR FROM SYSDATE), TO_CHAR(SYSDATE, 'YYYY-MM-DD')
FROM DUAL;
// 오늘 날짜 표시
// 오늘 날짜에서 년도만 표시
// 오늘 날짜를 YYYY-MM-DD 포맷의 문자열로 형변환
- 숫자형 함수
숫자형 함수 | 설명 |
ABS(숫자) | 절댓값을 돌려줌 |
SIGN(숫자) | 양수,음수,0을 구별 |
MOD(숫자1, 숫자2) | 숫자1을 숫자2로 나눠 나머지를 계산 (%연산과 같음) |
CEIL/CEILING(숫자) | 숫자보다 크거나 같은 최소의 정수를 돌려줌 |
FLOOR(숫자) | 숫자보다 작거나 같은 최대의 정수를 돌려줌 |
ROUND(숫자,m) | 소수점 m자리에서 반올림 (m의 디폴트값은 0) |
TRUNC(숫자,m) | 소수점 m자리에서 절식 (m의 디폴트값은 0) |
'Database & Bigdata > SQLD' 카테고리의 다른 글
[SQLD] SQL 활용 - JOIN(조인) (0) | 2020.08.21 |
---|---|
[SQLD] SQL 기본 - DECODE&CASE, ROWNUM&ROWID, WITH, DCL(Data Control Language), TCL(Transaction Control Language) (0) | 2020.08.21 |
[SQLD] SQL 기본 - DML(Data Manipulation Language) (0) | 2020.08.18 |
[SQLD] SQL 기본 - DDL(Data Definition Language) (0) | 2020.08.16 |
[SQLD] Docker(도커)로 Mac OS에 Oracle 설치하고 Oracle SQL Developer 설치까지 ! (2) | 2020.07.10 |
댓글