<SQL 연산자>
1. 산술연산자 (+, -, *, /)
- 0으로 나눌 수 없다
- Java와 달리, 오라클에서는 '정수/정수=실수' 이다. ex) 5/2=2.5
2. 비교연산자 (= 같다, != 같지 않다, <> 같지 않다, <, >, <=, >=, ...)
- ex) empno=7788 (대입X. 같다는 뜻)
- ex) 사번이 7400 이상이고 7600 이하인 사원의 모든 정보
SELECT * FROM emp WHERE empno >=7400 AND empno <=7600;
SELECT * FROM emp WHERE empno BETWEEN 7400 AND 7600;
※ BETWEEN은 양 끝 범위 '포함'임!!
3. 논리연산자 (AND, OR)
- 특정한 기호를 쓰는 것이 아니라, AND는 AND로, OR은 OR로 표기한다.
- 오라클에서는 '&&'가 AND가 아니라 Scanner이고,
'||'가 OR이 아니라 문자열 결합이다.
==> 크롤링 할 때 주소 안에 &가 있으면 스캐너를 띄워버리므로,
크롤링 시에 &를 ^로 바꿨다가 또 다시 &로 바꿔줘야함...
4. NULL 연산자 (IS NULL, IS NOT NULL)
- null을 연산한 결과는 무조건 null이 나오므로, 제대로 된 연산을 할 수 없다.
ex) 800+null = nul
ex) null*10 = null
- 오라클에서는 NULL값이나 ''(빈공백)값은 NULL 연산자 외에는 인식 불가능하다. ('칼럼명=null'과 같이 사용 불가능)
- 즉, 반드시 NULL연산자(IS NULL, IS NOT NULL)를 사용해야 해야만 NULL값을 조회/검색할 수 있다.
5. BETWEEN ~ AND : 범위, 기간
- 주로 범위/기간을 제한하여 조건을 걸 때 사용한다.
- BETWEEN A AND B는 A이상 B이하와 같다.
- ex) 사원번호(empno)가 7369에서 7521에 있는 직원들의 정보 조회
SELECT * FROM emp WHERE empno BETWEEN 7369 AND 7521;
6. LIKE : 유사문자열 검색
- 말 그대로 '이거 비슷한 것 찾아줘' 정도로 이해하면 된다.
- WHERE 절에서 사용한다.
- LIKE 연산자
1) % : 길이를 알 수 없는 문자 (0글자, 1글자, 또는 여러글자도 가능)
2) _ : 문자 한 개
- LIKE 연산자 사용 예시)
(1) A% : A로 시작하는 모든 문자열 (Java의 'startsWith'와 유사)
ex) 이름이 A로 시작하는 모든 사원 → 결과 : ALLEN, ADAMS
SELECT ename FROM emp WHERE ename LIKE 'A%';
(2) %A : A로 끝나는 모든 문자열 (Java의 'EndsWith'와 유사
ex) 이름이 N으로 끝나는 모든 사원 → 결과 : ALLEN, MARTIN
SELECT ename FROM emp WHERE ename LIKE '%N';
(3) %A% : A를 포함하는 모든 문자열.
(A로 시작, 중간에 A 있거나, A로 끝나거나) ex) ABCD, BACD, DCBA, AABB
ex) 이름에 N이 들어가는 모든 사원 → 결과 : ALLEN, JONES, MARTIN, KING, TURNER
SELECT ename FROM emp WHERE ename LIKE '%N%';
(4) __A% : 3번째 글자가 A인 모든 문자열
ex) 이름 세번째 글자가 A인 모든 사원 → 결과 : BLAKE, CLARK, ADAMS
SELECT ename FROM emp WHERE ename LIKE '__A%';
(5) __O__ : 총 5글자. 그 중 3번째 글자가 O인 문자열.
ex) 이름이 총 5글자이고 3번째 글자가 O인 사원 → 결과 : SCOTT
SELECT ename FROM emp WHERE ename LIKE '__O__';
7. IN : 포함된 데이터를 가지고 올 때.
- OR이 여러개일 때 사용한다. (OR 매번 적기 귀찮으니까 IN으로 한 방에 해결)
- 아래와 같이 IN을 쓰면 훨씬 코드가 간결해지는 것을 알 수 있다.
SELECT * FROM emp
WHERE deptno=10 OR deptno=20 OR deptno=30;
SELECT * FROM emp
WHERE deptno IN(10,20,30);
8. NOT : 부정 연산자
- NOT IN(), NOT BETWEEN ~ AND의 형태로 많이 쓴다.
- ex) NOT IN 예시
SELECT * FROM emp WHERE sal NOT IN(1500,3000,1600);
- ex) NOT BETWEEN ~ AND 예시
SELECT * FROM emp WHERE empno NOT BETWEEN 7369 AND 7521;
<SQL 데이터형>
1. 문자형 : CHAR, VARCHAR2, CLOB
- 문자를 저장한다. Java의 String과 비슷한 느낌.
- 오라클에서는 문자열을 입력할때 홑따옴표로 감싸야 한다.
ex) SELECT deptno FROM emp WHERE ename='KING';
1) CHAR : 1~2000 Byte. (한글은 2Byte ==> 1000자까지 저장 가능.)
2) VARCHAR : 1~4000 Byte. (한글은 2Byte ==> 2000자까지 저장 가능.)
3) CLOB : 4G 저장 가능. 문자가
※ CLOB : Character Large Object. 보통 '씨로브' 혹은 '씨랍'으로 읽음.
※ VARCHAR는 가변형. CHAR는 가변형X ==> VARCHAR를 쓰는 게 저장용량을 더 절약할 수 있다.
2. 숫자형 : NUMBER(10), NUMBER(10,2)
- NUMBER(10) : 정수형 (int)
- NUMBER(10,2) : 실수형. (double)
※ 날짜, 문자는 작은 따옴표(' ')를 사용하고, 숫자는 사용하지 않는다.
3. 날짜형 : Date
- 오라클과 Java 연동 시, 날짜형 데이터가 있다면 Java에서 java.util.Date를 사용해야 한다.
4. 기타 : BLOB, BFILE
- InputStream
<기타>
* 테이블 구조 확인
DESC table명;
* 현재 만들어져 있는 테이블 확인
SELECT * FROM tab;
* 오라클은 대소문자를 구분하지 않는다. (단, 저장된 데이터는 대소문자를 구분한다.)
ex) SELECT * FROM emp WHERE ename='scott'; -- 결과 無 (테이블에 'SCOTT'으로 저장되어 있기 때문)
SELECT * FROM emp WHERE ename='SCOTT'; -- 결과 有
* 키워드는 대문자로 작성한다.
'Programming > Database(Oracle, SQL)' 카테고리의 다른 글
[Oracle/SQL] 집합연산자 UNION, UNION ALL, INTERSECT, MINUS (0) | 2020.02.18 |
---|---|
[Oracle/SQL] 시퀀스 (Sequence) (0) | 2020.02.16 |
[Oracle/SQL] 형 변환함수 - TO_CHAR, TO_NUMBER, TO_DATE (0) | 2020.02.04 |
[Oracle/SQL] 날짜함수 - SYSDATE, NEXT_DAY, LAST_DAY 등 (0) | 2020.02.02 |
[Oracle/SQL] 숫자함수 - ROUND, TRUNC, CEIL, MOD (0) | 2020.02.02 |
[Oracle/SQL] 문자함수 - SUBSTR, INSTR, TRIM 등 (0) | 2020.01.30 |
[Oracle/SQL] SQL의 종류 - DQL, DML, DDL, DCL, TCL (0) | 2020.01.29 |
[Oracle 기초] 가격정책, CRUD, 스키마 (0) | 2020.01.27 |