NVL, LIKE, ORDER BY + JDBC예제

부트캠프(END)/Oracle|2022. 6. 20. 17:53

*MySQL과 다른 부분을 중심으로 정리

 

NVL(Null VaLue)

오라클에서 모든 연산자는 인자 중 null 값이 있는 경우 연산 결과로 null을 반환한다.

→ null값 처리가 필요하다.

→ postgreSQL에서는 coalesce()를 사용했지만, 오라클에서는 NVL을 사용한다.

 

NVL(컬럼명, 대체할 값) 으로 간단하게 처리 가능하다.

아래 쿼리로 확인~

SELECT salary
    , comm
    , salary+comm
    , NVL(comm, 0)
    , salary+(NVL(comm,0))
FROM employee;

결과

 

LIKE, REGEXP_LIKE

문자열의 패턴을 비교할 때 사용한다.

postgreSQL이나 MySQL과 거의 비슷하게 사용된다. 관련글

(참고로 오라클에서 escape는 이렇게 수행함)

그리고 나중에 SQL문을 자바로 불러와서 실행할 때는 또 양식이 다르다......

문자열 결합 기호(||) 를 사용해 주어야 함

WHERE ename LIKE '%A%'

→ WHERE ename LIKE '%'||A||'%' 이런식임

 

with 와일드
문자
의미 사용예
LIKE % 0개 이상의 문자열과 일치 '%오라클%' → 오라클을 포함하는 문자열
_ 특정 위치의 한 개의 문자와 일치 '_바%' → 두 번째 위치에 '바'가 들어가는 문자열
REGEXP_LIKE [] 한 개의 문자와 일치 '[0-5]%' → 0~5 사이 숫자로 시작하는 문자열
[^] 한 개의 문자와 불일치 '[^0-5]%' → 0~5 사이 숫자로 시작하지 않는 문자열
+ 문자열을 연결 '자바'+'바이블' → '자바 바이블'
-- 와일드카드와 OR 
WHERE name LIKE 'A%' OR
    name LIKE 'B%' OR
    name LIKE 'C%' OR
    name LIKE 'D%' OR
    name LIKE 'E%'
-- 정규식 LIKE
REGEXP_LIKE(name, '정규식')

 

BETWEEN & >= AND <= 

>= AND <= 가 처리속도는 더 빠르지만 표준화를 위해서는 BETWEEN이 권장된다.

필요에 따라 선택해서 사용한다. 같은 결과를 나타내는 쿼리문이 하나만 존재하지 않음(당연함)

근데 또 = OR = 의 경우는 IN을 쓰는게 권장되고.. 때에 따라 선택한다..

 

ORDER BY

SQL문 실행 후 결과 출력시 데이터 정렬이 가능하다.

- ORDER BY 컬럼명 

- ORDER BY 컬럼숫자(데이터테이블의 왼쪽부터 1,2,3...)

위처럼 Playlist라는 테이블이 있을 때,

ORDER BY 1 은 ORDER BY PlaylistId와 똑같이 작동한다.

 

 

JDBC로 오라클과 자바 연결하기

*Configure Build Path → C:\app\user\product\18.0.0\dbhomeXE\jdbc\lib\ojdbc8.jar 추가

Employee 테이블에서 이름을 검색하여 해당 조건에 맞는 사원의 정보를 DB에서 불러오기

package dao;

//자바(응용프로그램)에서 오라클 서버로 SQL문을 전송하고 실행된 결과를 브라우저로 전송한다.
import java.util.*;
import java.sql.*;
public class MainClass1 {
  public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    System.out.print("이름 입력:");
    String name = scan.next();
    name = name.toUpperCase(); //DB에 다 대문자로 저장되어있으니까

    try {
      //1. 드라이버 등록
      Class.forName("oracle.jdbc.driver.OracleDriver");
      //2. 오라클 연결
      String url = "jdbc:oracle:thin:@localhost:1521:xe";
      //jdbc로 oracleDB에 연결할건데 thin(연결용)을 쓰고.. 
      //localhost의 port1521의 xe폴더를 연결
      Connection conn = DriverManager.getConnection(url, "hr", "happy");
      //3. SQL문 제작
      String sql = "SELECT empno, ename, job, hiredate, sal " +
        "FROM emp " +
        "WHERE ename LIKE '%'||?||'%'"; //?에 Scanner에서 받은 값을 넣어 줄 것임.
      //4. SQL문 오라클로 전송
      PreparedStatement ps = conn.prepareStatement(sql);
      ps.setString(1, name); //1번째 ?에 name을 넣어라
      //5. 실행 후 결과값 받기			
      ResultSet rs = ps.executeQuery(); //SQL 편집기에서 쿼리 실행과 동일한 기능
      //6. 출력
      while (rs.next()) {
        //rs.next() : 한 row씩 테이블을 읽어내려가다가 더 이상 데이터가 없으면 false 반환
        System.out.println(
          rs.getInt(1) + " " +
          rs.getString(2) + " " +
          rs.getString(3) + " " +
          rs.getDate(4) + " " +
          rs.getInt(5));
      }
      //7. 종료
      rs.close();
      ps.close();
      conn.close();

    } catch (Exception ex) {
      ex.printStackTrace();
    }
  }

}

'부트캠프(END) > Oracle' 카테고리의 다른 글

Oracle 내장 함수  (0) 2022.06.21
데이터베이스(Database)  (0) 2022.06.17
JDBC 맛보기  (0) 2022.06.15

댓글()