NVL, LIKE, ORDER BY + JDBC예제
*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 |