Programming/Database (Oracle, SQL)

[Oracle/SQL] SQL 연산자, 데이터형

Sujin Lee (Daisy) 2020. 1. 29. 01:39

<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';  -- 결과 有 

* 키워드는 대문자로 작성한다. 

 

반응형