02. SELECT
1) 조건 SELECT, 비교값(정수)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package edu.kh.jdbc1;
import java.util.Scanner;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JDBCExample2{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@localhost:1521:XE";
String user = "kh";
String pw = "kh1234";
conn = DriverManager.getConnection(url, user, pw);
stmt = conn.createStatement();
System.out.println("< 입력 받은 급여보다 많이 받는(초과) 직원만 조회 >");
System.out.print("급여 입력 : ");
int input = sc.nextInt();
sc.nextLine();
String sql = "SELECT EMP_ID, EMP_NAME, SALARY FROM EMPLOYEE"
+ " WHERE SALARY > " + input;
rs = stmt.executeQuery(sql);
while(rs.next()){
String empId = rs.getString("EMP_ID");
String empName = rs.getString("EMP_NAME");
int salary = rs.getInt("SALARY");
System.out.printf("사번 : %s / 이름 : %s / 급여 : %d\n", empId, empName, salary);
}
}
catch(Exception e){
e.printStackTrace();
} finally {
try{
if(rs != null) rs.close();
if(stmt != null) stmt.close();
if(conn != null) conn.close();
} catch(SQLException e) {
e.printStackTrace();
}
}
}
}
2) 조건 SELECT, 비교값(문자열)
- 조회된 데이터를 다른 클래스(Emp)에 저장
➡️ Emp 클래스에 필드 및 생성자, getter/setter, toString 작성 - 부서명을 입력받아 같은 부서에 있는 사원의 사원명, 부서명, 급여 조회
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package edu.kh.jdbc1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import edu.kh.jdbc1.model.vo.Emp;
public class JDBCExample3{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@localhost:1521:XE";
String user = "kh";
String pw = "kh1234";
conn = DriverManager.getConnection(url, user, pw);
stmt = conn.createStatement();
System.out.print("부서명 입력 : ");
String input = sc.nextLine();
String sql = "SELECT EMP_NAME, "
+ "NVL(DEPT_TITLE, '부서없음') AS DEPT_TITLE, SALARY "
+ "FROM EMPLOYEE "
+ "LEFT JOIN DEPARTMENT ON (DEPT_CODE = DEPT_ID) "
+ "WHERE DEPT_TITLE = '" + input + "'";
// (중요!!)
// Java에서 작성되는 SQL에 문자열(String) 변수를 추가(이어쓰기)할 경우
// ''(DB 문자열 리터럴)이 누락되지 않도록 신경써야 한다
rs = stmt.executeQuery(sql);
List<Emp> list = new ArrayList<>();
while(rs.next()){
String empName = rs.getString("EMP_NAME");
String deptTitle = rs.getString("DEPT_TITLE");
int salary = rs.getInt("SALARY");
// Emp 객체 생성하여 컬럼값 담기
Emp emp = new Emp(empName, deptTitle, salary);
// 생성된 Emp 객체를 List에 추가
list.add(emp);
}
// List에 추가된 Emp 객체가 만약 없다면 "조회 결과가 없습니다"
// 있다면 순차적 출력
if(list.isEmpty()) {
System.out.println("조회 결과가 없습니다");
} else {
for(Emp emp : list){
System.out.println(emp);
}
}
} catch(Exception e){
e.printStackTrace();
} finally{
try{
if(rs != null) rs.close();
if(stmt != null) stmt.close();
if(conn != null) conn.close();
} catch(SQLException e) {
e.printStackTrace();
}
}
}
}
3) 복수 조건 SELECT
- 조회된 데이터를 다른 클래스(Employee)에 저장
➡️ Employee 클래스에 필드 및 생성자, getter/setter, toString 작성 - 직급명, 급여를 입력받아 해당 직급에서 입력 받은 급여보다 많이 받는 사원의 이름, 직급명, 급여, 연봉을 조회하여 출력. 단, 조회 결과가 없으면 “조회 결과 없음” 출력
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package edu.kh.jdbc1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import edu.kh.jdbc1.model.vo.Employee;
public class JDBCExample4 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@localhost:1521:XE";
String user = "kh";
String pw = "kh1234";
conn = DriverManager.getConnection(url, user, pw);
stmt = conn.createStatement();
System.out.print("직급명 입력 : ");
String input1 = sc.nextLine();
System.out.print("급여 입력 : ");
int input2 = sc.nextInt();
sc.nextLine();
String sql = "SELECT EMP_NAME, JOB_NAME, "
+ "SALARY, SALARY * 12 AS ANNUAL_INCOME "
+ "FROM EMPLOYEE "
+ "JOIN JOB USING (JOB_CODE) "
+ "WHERE JOB_NAME = '" + input1 + "'"
+ "AND SALARY > " + input2;
rs = stmt.executeQuery(sql);
List<Employee> list = new ArrayList<>();
while(rs.next()){
String empName = rs.getString("EMP_NAME");
String jobName = rs.getString("JOB_NAME");
int salary = rs.getInt("SALARY");
int annualIncome = rs.getInt("ANNUAL_INCOME");
list.add(new Employee(empName, jobName, salary, annualIncome));
}
if(list.isEmpty()){
System.out.println("조회 결과 없음");
} else {
for(Employee emp : list){
System.out.println(emp);
}
}
} catch(Exception e){
e.printStackTrace();
} finally{
try {
if(rs != null) rs.close();
if(stmt != null) stmt.close();
if(conn != null) conn.close();
} catch(SQLException e) {
e.printStackTrace();
}
}
}
}
4) 조건 SELECT, 비교값(날짜형)
- 조회된 데이터를 다른 클래스(Employee)에 저장
➡️ Employee 클래스에 필드 및 생성자, getter/setter, toString 작성 - 입사일을 입력(“2022-09-06”) 받아서 입력 받은 값보다 먼저 입사한 사람의 이름, 입사일, 성별(M, F) 조회
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package edu.kh.jdbc1;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import edu.kh.jdbc1.model.vo.Employee;
public class JDBCExample5 {
public static void main(String[] args) {
// 입사일을 입력("2022-09-06") 받아
// 입력 받은 값보다 먼저 입사한 사람의
// 이름, 입사일, 성별(M, F) 조회
Scanner sc = new Scanner(System.in);
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@localhost:1521:XE";
String user = "kh";
String pw = "kh1234";
conn = DriverManager.getConnection(url, user, pw);
stmt = conn.createStatement();
System.out.print("입사일 입력 : ");
String input = sc.nextLine();
String sql = "SELECT EMP_NAME 이름, "
+ "TO_CHAR(HIRE_DATE, 'YYYY\"년\" MM\"월\" DD\"일\"') 입사일, "
+ "DECODE(SUBSTR(EMP_NO, 8, 1), '1', 'M', 'F') 성별 "
+ "FROM EMPLOYEE "
+ "WHERE HIRE_DATE < TO_DATE('" + input + "')";
// 문자열 내부에 쌍따옴표 작성 시 \"로 작성해야 한다(Escape) 문자
rs = stmt.executeQuery(sql);
List<Employee> list = new ArrayList<>();
while(rs.next()){
//String empName = rs.getString("이름");
//String hireDate = rs.getString("입사일");
//String gender = rs.getString("성별");
//Employee emp = new Employee(empName, hireDate, gender.charAt(0));
//list.add(emp);
// 생성자 안 쓰고
Employee emp = new Employee();
// 기본 생성자로 Employee 객체 생성
// 필드 초기화 X
// setter를 이용하여 하나씩 세팅
emp.setEmpName(rs.getString("이름"));
// 컬럼명이 별칭으로 지정한 이름
emp.setHireDate(rs.getString("입사일"));
emp.setGender(rs.getString("성별").charAt(0));
// -> char 자료형 매개변수 필요
// Java의 char : 문자 1개
// DB의 CHAR : 고정길이 문자열(==String)
// DB의 컬럼 값을 char 자료형에 저장하고 싶으면
// String.charAt(index) 이용
list.add(emp);
}
if(list.size() == 0){
System.out.println("조회 결과 없음");
} else{
for(int i = 0; i < list.size(); i++){
System.out.printf("%02d) %s / %s / %c\n", i+1, list.get(i).getEmpName(), list.get(i).getHireDate(), list.get(i).getGender());
}
}
} catch(Exception e) {
e.printStackTrace();
} finally {
try {
if(rs != null) rs.close();
if(stmt != null) stmt.close();
if(conn != null) conn.close();
} catch(SQLException e) {
e.printStackTrace();
}
}
}
}