<SELECT-WHRE절의 BETWEEN 연산자>

 

  • employees테이블에서 salary가 9000이상 10000이하인 직원정보를 출력

1
2
3
SELECT *
FROM employees
WHERE salary >= 9000 AND salary <=10000;
cs

 

 

  • BETWEEN 연산자

1
2
3
SELECT *
FROM employees
WHERE salary BETWEEN 9000 AND 10000;
cs

 

출력결과는 같다

 

 

 

 

 

<BETWEEN 예제>

 

  • employees테이블에서 salary가 10000이상이고 20000이하인 직원정보를 출력

1
2
3
SELECT *
FROM employees
WHERE salary BETWEEN 10000 AND 20000;
cs

 

 

 

 

  • employees테이블에서 hire_date가 2004년 1월 1일 부터 2004년 12월 30일 사이인 직원정보를 출력

1
2
3
SELECT *
FROM employees
WHERE hire_date BETWEEN '04/01/01' AND '04/12/30';
cs

 

 

 

 

 

  • employees테이블에서 salary가 7000 미만이거나 17000보다 많은 직원정보를 출력

 

1
2
3
SELECT *
FROM employees
WHERE salary NOT BETWEEN 7000 AND 17000;
cs

 

salary가 7000이 안되거나 17000보다 큰 직원정보가 출력된다.

 

 

 

 

'Learning > SQL' 카테고리의 다른 글

IS NULL 연산자, ORDER BY  (0) 2020.06.15
LIKE 연산자  (0) 2020.06.15
IN, NOT IN  (0) 2020.06.12
AND, OR  (0) 2020.06.12
SELECT-WHERE 절  (0) 2020.06.12

<SELECT-WHERE 절의 IN, NOT IN 연산자>

 

  • employees테이블에서 직원중에 salary가 4000이거나 3000이거나 2700인 직원정보를 출력한다.

1
2
3
4
SELECT *
FROM employees
WHERE salary = 4000
OR salary = 3000 OR salary = 2700;
cs

 

 

 

  • IN연산자는 연산을 줄여준다.

1
2
3
SELECT *
FROM employees
WHERE salary IN (400030002700);
cs

 

 

 

 

 

 

<IN 예제>

 

  • employees테이블에서 salary가 10000, 17000, 24000인 직원정보를 출력

1
2
3
SELECT *
FROM employees
WHERE salary IN (100001700024000);
cs

 

 

 

  • employees테이블에서 department_ID가 30, 50, 80, 100, 110이 아닌 직원정보를 출력

1
2
3
SELECT *
FROM employees
WHERE department_id NOT IN (305080100110);
cs

 

 

 

 

'Learning > SQL' 카테고리의 다른 글

LIKE 연산자  (0) 2020.06.15
BETWEEN  (0) 2020.06.12
AND, OR  (0) 2020.06.12
SELECT-WHERE 절  (0) 2020.06.12
SELECT 문  (0) 2020.06.12

<SELECT-WHERE절의 AND, OR>

 

  • employees테이블에서 department_id가 60이거나 (department_id가 80이면서 salary가 10000이상)인 직원정보 출력

1
2
3
4
SELECT *
FROM employees
WHERE department_id=60 OR
(department_id=80 AND salary >= 10000);
cs

 

괄호에 의해 'department_id가 80이면서 salary가 10000이상'인 직원정보와 department_id가 60인 직원정보가 출력된다.

 

 

 

  • employees테이블에서 (department_id가 60이거나 department_id가 80)이고 salary가 10000이상인 직원정보 출력

1
2
3
4
SELECT *
FROM employees
WHERE ( department_id=60 OR
department_id=80) AND salary >= 10000;
cs

 

괄호에 의해 department_id가 60이거나 80이고 salary가 10000이상인 직원정보가 출력된다. salary가 10000이상이면서 department_id가 60인 직원은 없다.

 

 

 

 

  • employees테이블에서 hire_date가 2008년 4월 4일 이후이거나 salary가 13000이상이고 job_id가 AD_VP인 직원 정보 출력

1
2
3
4
SELECT *
FROM employees
WHERE hire_date > '08/04/04' OR salary >= 13000
AND job_id = 'AD_VP';
cs

 

괄호가 없는 경우 AND가 먼저 계산된다.

salary가 13000이상이거나 job_id가  AD_VP인 직원정보와, hire_date가 2008년 4월 4일인 직원정보가 출력된다.

 

 

 

 

  • employees테이블에서 hire_date가 2004년 1월 1일 이전이고 salary가 5000이하인 직원정보를 출력

1
2
3
4
SELECT *
FROM employees
WHERE NOT(hire_date > '04/01/01' OR salary > 5000);
--(hire_date<='04/01/01' AND salary <=5000)
cs

 

hire_date가 2004년 1월 1일 이전이고 salary가 5000이하인 직원정보가 출력된다.

 

 

 

 

 

<AND OR 예제>

 

  • employees테이블에서 salary가 4000을 초과하면서, job_id가 IT_PROG인 직원정보를 출력

1
2
3
SELECT *
FROM employees
WHERE salary > 4000 AND job_id='IT_PROG';
cs

 

 

 

  • employees테이블에서 salary가 4000을 초과하면서, job_id가 IT_PROG이거나 FI_ACCOUNT인 직원정보를 출력

1
2
3
SELECT *
FROM employees
WHERE salary > 4000 AND (job_id='IT_PROG' OR job_id='FI_ACCOUNT');
cs

 

 

 

 

'Learning > SQL' 카테고리의 다른 글

BETWEEN  (0) 2020.06.12
IN, NOT IN  (0) 2020.06.12
SELECT-WHERE 절  (0) 2020.06.12
SELECT 문  (0) 2020.06.12
오라클 XE, SQL Developer 설치 후 설정  (0) 2020.06.12
    • WHERE절은 FROM절 다음에 위치한다.

 

    • employees테이블에서 department_id가 90인 직원정보를 출력

1
2
3
SELECT *
FROM employees
WHERE department_id=90;
cs

 

 

 

 

  • employees테이블에서 salary가 24000인 직원정보를 출력
1
2
3
SELECT *
FROM employees
WHERE salary=24000;
cs

 

 

 

  • WHERE절 사용시 주의점

    • 문자(String)과 날짜(Date) 값은 항상 작은따옴표(')로 표시

    • 명령어는 대소문자를 구분하지 않지만 문자열은 대소문자를 구분한다. (Case-Sensitive)

    • 날짜값은 날짜포맷에 벗어나지 않도록 (Format-Sensitive)

    • 오라클의 날짜포맷은 RR/MM/DD (RR은 2자리 년도)

 

 

1.WHERE+문자열

  • employees테이블에서 first_name이 Steven인 직원정보를 출력
1
2
3
SELECT employee_id, first_name, last_name, job_id
FROM employees
WHERE first_name='Steven';
cs

 

 

 

  • first_name은 자료형이 문자열이기 때문에 Steven에는 작은따옴표를 써줘야한다.

 

 

 

2.WHERE+날짜

  • employees테이블에서 hire_date가 2003년 6월 17일 이후인 직원정보를 출력
1
2
3
SELECT *
FROM employees
WHERE hire_date>='03/06/17'--년도/월/날짜
cs

 

 

 

 

3.WHERE절 비교연산자

    • 날짜 비교

1
2
3
SELECT *
FROM employees
WHERE hire_date>='03/06/32'--년도/월/날짜
cs

 

(32일은 없기 때문에 에러가 난다.)

 

    • 숫자비교

  • employees테이블에서 salary가 10000이상인 직원정보를 출력
1
2
3
SELECT *
FROM employees
WHERE salary>=10000;
cs

 

 

    • 문자비교 (알파벳순)

  • employees테이블에서 first_name이 King보다 큰 직원정보를 출력 (l, m, n, o, p, q...)
1
2
3
SELECT *
FROM employees
WHERE first_name>'King';
cs

 

 

예제)

    • employees테이블에서 employee_id가 100인 직원 정보 출력

1
2
3
SELECT *
FROM employees
WHERE employee_id=100;
cs

 

 

    • employees테이블에서 first_name이 David인 직원 정보를 출력

1
2
3
SELECT *
FROM employees
WHERE first_name='David';
cs

 

 

    • employees테이블에서 employee_id가 105 이하인 직원 정보를 출력

1
2
3
SELECT *
FROM employees
WHERE employee_id<=105;
cs

 

 

    • job_history테이블에서 start_date가 2006년 3월 3일 이후인 정보를 출력

1
2
3
SELECT *
FROM job_history
WHERE start_date>'06/3/3';
cs

 

 

    • departments테이블에서 location_id가 1700이 아닌 모든 부서를 출력

1
2
3
SELECT *
FROM departments
WHERE location_id<>1700--!=1700
cs

 



 

'Learning > SQL' 카테고리의 다른 글

BETWEEN  (0) 2020.06.12
IN, NOT IN  (0) 2020.06.12
AND, OR  (0) 2020.06.12
SELECT 문  (0) 2020.06.12
오라클 XE, SQL Developer 설치 후 설정  (0) 2020.06.12

<SELECT-데이터 조회>

  • 대소문자 구분없이 명령문 입력

  • select + 열의 이름 + from + 테이블 이름

 

  • SELECT문에 적은 열의 순서대로 출력

    1
    2
    SELECT * FROM departments;
    select location_id,department_id from departments;
    cs

     

 

  • as뒤에는 열의 이름을 별칭으로 설정

    1
    2
    select location_id as "지역번호",department_id as "부서번호" 
    from departments;

 

 

  • as, 큰 따옴표는 생략 가능하다.

    1
    2
    SELECT * FROM departments;
    select location_id 지역번호 from departments;
    c

 

 

 

<작성 규칙>

  • 한줄 또는 여러줄 사용 가능하다.

  • 한 문장이 끝나면 반드시 세미콜론 ; 을 적어야한다.

  • 들여쓰기도 상관없이 작성가능하다.

  • 권장: 명령어를 대문자로, 나머지를 소문자로 작성하면 가독성이 좋아진다.

  • 별칭으로 할 열의 이름에 특수문자나 공백을 사용할 때에는 따옴표로 처리해야한다.

    1
    2
    select location_id as "지역 번호",department_id as "부서 번호" 
    from departments;
    cs

 

 

  • 주석처리

    1
    2
    3
    4
    5
    -- 한줄의 주석입니다. 단축키는 CTRL+/
    /*
    여러줄 주석
    을 다는 방법
    */
    c

     

 

 

 

1.테이블의 모든 행과 열을 읽어오기 ( * )

1
SELECT * FROM departments;
cs

 

2.특정 열만 읽어오기

1
SELECT department_id, department_name FROM departments;<
c

 

 

 

 

3.산술 연산자 사용 (+,-,*,/)

    • 우선 순위는 (), *, /, +, -순이다.

       

      1
      SELECT employee_id, first_name, salary FROM employees;
      cs

      1
      2
      SELECT employee_id, first_name, salary, salary+100, salary + (salary*0.1
      FROM employees;
      c

       

 

 

 

 

 

    • --널은 입력되지 않은, 사용가능하지 않은, 알수 없는 값

    • --널값은 제로(0) 또는 공백("")과는 다르다. 널 값은 계산을 할 수 없다.

       

       

      1
      2
      SELECT last_name,job_id, salary, commission_pct, commission_pct + 10 
      FROM employees;
      cs

       

       

 

 

 

 

5.중복된 값 제거: distinct

 

 

1
2
SELECT DISTINCT job_id
FROM employees;
c

 

 

 

 

 

 

 

<SELECT-WHERE 예제>

 

  • employees테이블에서 id, first name, last name 출력

    1
    2
    SELECT employee_id, first_name, last_name
    FROM employees;
    c

     

 

 

 

 

  • employees테이블에서 first name, salary, salary*1.1 as 뉴셀러리 출력

     

    1
    2
    SELECT first_name, salary, salary*1.1 AS "뉴셀러리"
    FROM employees;
     

 

 

 

 

  • employees테이블에서 employee_id는 '사원번호', first_name은 '이름', last_name은 '성'으로 출력

     

    1
    2
    SELECT employee_id as "'사원번호'", first_name as "'이름'", last_name as "성"
    FROM employees;
     

 

 

 

 

<연결 연산자 ||>

 

  • employees테이블에서 last_name과 job_id를 "is a" 문장으로 연결하여 "직업 정보"라는 이름의 열에 함께 출력

 

1
2
SELECT last_name || ' is a ' ||job_id as "직업 정보"
FROM employees;
c

 

 

 

 

  • employees테이블에서 employee_id, first_name과 last_name는 공백으로 연결하여 함께 출력
1
2
3
SELECT employee_id, first_name|| ' ' ||last_name
FROM employees;
 
cs

 

 


 
  • employees 테이블에서 first_name과 last_name 사이에 공백을 넣고 email을 출력하되, 이메일 뒤에 @company.com을 붙이기

    1
    2
    SELECT employee_id, first_name|| ' ' || last_name, 
    email || '@company.com'
    FROM employees;
    cs

 

 

 

'Learning > SQL' 카테고리의 다른 글

BETWEEN  (0) 2020.06.12
IN, NOT IN  (0) 2020.06.12
AND, OR  (0) 2020.06.12
SELECT-WHERE 절  (0) 2020.06.12
오라클 XE, SQL Developer 설치 후 설정  (0) 2020.06.12

<설치>

  • https://blog.naver.com/drv98 참고

  • Oracle Database Express 설치하기

  • Oracle SQL developer설치

    • https://www.oracle.com/tools/downloads/sqldev-v192-downloads.html 로 접속

    • Windows 64-bit with JDK 8 included 다운로드 (Java jdk가 있는 경우 그 아래에 있는 Windows 32-bit/64-bit 버번을 다운로드한다.)

    • 압축을 풀고 sqldeveloper 폴더 자체를 C드라이브로 옮기기

    • 설치해서 실행하는 프로그램이 아니므로 exe파일 우클릭-시작에 고정

    • 새접속-Name: Oracle-XE, 사용자 이름: SYSTEM, 비밀번호: XE설치시 설정한 비밀번호 (비밀번호 저장)

  • 로그인 후 서버에서 원하는 데이터 입력하기/가져오기/저장하기 (SQL로)

 

<Oracle SQL Developer 설정>

  • 환경설정-글꼴, 객체뷰어 설정

  • 실행은 Ctrl+Enter. 

 

  • HR: 연습용 계정을 비밀번호 1234로 맞춰서 unlock을 했고, 그 HR계정으로 접속 (새 접속 만들기에서 비밀번호는 sql문에 썼던 1234가 된다.)

 

  • 연습계정이 생성되었고 오라클에서 미리 만들어놓은 테이블들을 활용할 수 있다.

 

 

  • 스크립트 실행(F5)는 한페이지 전체를 실행한다.

  • Ctrl+Space: 자동완성 기능

 

  • SELECT: 데이터 검색 명령어, *: ALL, FROM 뒤에는 테이블을 적어준다.

 

 

<SCOTT 계정 설치>

  • cmd를 관리자 권한으로 실행

  • sqlplus 입력 후 엔터
  • password는 움직이지 않으므로 SYSTEM계정에 맞는 비밀번호를 정확하게 입력 후 엔터

 

 

  • 다음 scott.sql 경로를 복사 C:\oraclexe\app\oracle\product\11.2.0\server\rdbms\admin\scott.sql

 

 

  • cmd창에서 @입력후 경로를 붙여넣고 엔터

 

  • 비밀번호 1234

 

  • SCOTT계정과 테이블들이 생성된 것을 볼 수 있다.

 

  • HR연습계정에서 테이블들 살펴보기. 다른 테이블에서 참조한 외래키를 자신의 기본키로 사용할 수 있다. 

 

  • 새로 만들기-데이터베이스 파일

 

 

 

  • 파일 저장

 

 

'Learning > SQL' 카테고리의 다른 글

BETWEEN  (0) 2020.06.12
IN, NOT IN  (0) 2020.06.12
AND, OR  (0) 2020.06.12
SELECT-WHERE 절  (0) 2020.06.12
SELECT 문  (0) 2020.06.12
  • 나라와 수도를 입력하고 퀴즈를 맞추는 CapitalTest클래스 만들기.

    • 메뉴선택, 입력 메소드, 퀴즈 메소드, 파일 저장 메소드 4개의 메소드를 구현한다.

    • 파일 저장은 FileWriter 클래스를 사용한다.

    • 랜덤변수 생성은 Math.random()메소드를 사용한다.

 

  • CapitalTest 클래스 (CapitalTest)
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
package com.exam02;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
public class CapitalTest {
    public static Scanner sc=new Scanner(System.in);
    private Map<StringString>map=new HashMap<StringString>();
    File dir, file;
    public CapitalTest() {
        dir=new File("src\\com\\exam02");
        file=new File(dir,"CapitalTest.txt");
        map.clear();
        try {
        if(!file.exists()) {
            file.createNewFile();
            return;
        }
        Scanner scanner=new Scanner(file);
        while(scanner.hasNext()) {
            String country=scanner.next();
            String capital=scanner.next();
            map.put(country, capital);
        }
        scanner.close();
        }catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    public static void showMenu() {
        System.out.println("****수도 맞추기 게임을 시작합니다.****");
        System.out.println("1.입력, 2.퀴즈, 3.파일저장 및 종료");
        System.out.println("선택>>");
    }
    
    public void input() {
        System.out.println("현재"+map.size()+" 개 나라와 수도 입력");
        while(true) {
            System.out.println("나라와 수도 입력(종료는 x)");
            String cont=sc.next();
            if(cont.toUpperCase().equals("X")) break;
            if(map.containsKey(cont)==true) {
                System.out.println("이미 입력한 나라입니다.");
                continue;
            }
            String cap=sc.next();
            map.put(cont, cap);
        }
    }
    
    public void quiz() {
        Set<String > set=map.keySet();
        Object[]arr=set.toArray();
        while(true) {
            int n=(int)(Math.random()*map.size());
            String city="";
            try{
                city=(String)arr[n];
            }catch(ArrayIndexOutOfBoundsException e) {
                System.out.println("map이 비어 있습니다.");
                return;
            }
            String dosi=map.get(city);
            System.out.println(city+" 의 수도는? 종료는 x");
            String dap=sc.next();
            if(dap.toLowerCase().equals("x")) {
                System.out.println("종료합니다.");
                break;
            }
            if(dap.equals(dosi)) {
                System.out.println("정답");
            }
            else {
                System.out.println("틀렸습니다.");
            }
        }
    }
    
    public void save() {
        FileWriter fw=null;
        try {
            fw=new FileWriter(file);
            Set<String> set=map.keySet();
            Iterator<String>it=set.iterator();
            while(it.hasNext()) {
                String key=it.next();
                String value=map.get(key);
                fw.write(key+" ");
                fw.write(value+"\n");
            }
            fw.close();
            System.out.println("종료");
            System.exit(0);
        }catch (IOException x) {
            x.printStackTrace();
            System.out.println("파일저장 오류");
        }
    }
    
    public static void main(String[] args) {
        CapitalTest ca=new CapitalTest();
        while(true) {
            CapitalTest.showMenu();
            int choice=CapitalTest.sc.nextInt();
            switch(choice) {
            case 1 : ca.input(); break;
            case 2 : ca.quiz(); break;
            case 3 : ca.save(); break;
            default : System.out.println("입력오류");          
            }
        }
    }
}
  • 이름, 학과, 학번, 학점 정보를 가진 Student클래스를 작성하라. ArrayList<Student> 컬렉션을 만들고, 사용자로부터 입력받아 저장하고, 학생 이름으로 검색하는 StudentManager 클래스를 작성하라.

    • com.exam01 패키지를 생성하고 Student, StudentManager 클래스 만들기. 

    • Student클래스에 멤버변수 선언

    • StudentManager에는 메뉴 입력 메소드, 학생정보 입력 메소드, 전체 학생 보기 메소드, 학생 찾는 메소드, 파일 저장 메소드 5가지를 생성.

    • 메뉴선택 메소드는 static을 사용

    • 학생입력 메소드는 한 라인으로 학생정보를 입력받아 ,로 구분하여 처리한다. (StringTokenizer 사용)

 

  • Student 클래스 (Student)
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
package com.exam01;
import java.io.Serializable;
public class Student implements Serializable{
    String name;
    String dept;
    int studentID;
    double avg;
    
    public Student(String name, String dept, int studentID, double avg) {
        this.name=name;
        this.dept=dept;
        this.studentID=studentID;
        this.avg=avg;
    }
    
    public String getName() {
        return name;
    }
    public String getDept() {
        return dept;
    }
    public int getStudentID() {
        return studentID;
    }
    public double getAvg() {
        return avg;
    }
}
 

 


 

  • StudentManager 클래스 (StudentManager)
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
package com.exam01;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.NoSuchElementException;
import java.util.Scanner;
import java.util.StringTokenizer;
//메뉴선택, 학생정보 입력, 입력한 학생 전체 목록 보기, 학생 이름으로 찾기, 파일로 저장하기 메소드
public class StudentManager {
    static Scanner sc=new Scanner(System.in);
    static ArrayList<Student>arr=new ArrayList<Student>();
    File dir,file;
    
    public StudentManager() throws IOException, ClassNotFoundException {
        dir=new File("src\\com\\exam01");
        file=new File(dir, "Student.txt");
        if(file.exists()) {
            ObjectInputStream ois=new ObjectInputStream(new FileInputStream(file));
            arr=(ArrayList<Student>)ois.readObject();
        }else {
            file.createNewFile();
        }
    }
    
    public static void showMenu() {
        System.out.println("선택하세요");
        System.out.println("1.데이터입력");
        System.out.println("2.전체보기");
        System.out.println("3.학생찾기");
        System.out.println("4.종료");
        System.out.println("선택>>");
    }
    
    public void inputData() {
        while(true) {
            System.out.println("학생 이름,학과,학번,학점평균 입력하세요.(입력은 , 로 구분하고 종료는 x)");
            System.out.println(">>");
        try {
            String text=StudentManager.sc.nextLine();
            if(text.toLowerCase().equals("x")) {
                System.out.println("입력 종료");
                break;
            }
            StringTokenizer stk=new StringTokenizer(text,",");
            String name=stk.nextToken();
            String dept=stk.nextToken();
            int studentID=Integer.parseInt(stk.nextToken());
            double avg=Double.parseDouble(stk.nextToken());
            arr.add(new Student(name, dept, studentID, avg));
        }catch (NoSuchElementException n) {
            System.out.println("정확하게 입력하세요.");
            return;
            }
        }
    }
    
    public void viewData() {
        System.out.println("전체보기");
        for(Student student:arr) {
            System.out.println("이름: "+student.getName());
            System.out.println("학과: "+student.getDept());
            System.out.println("학번: "+student.getStudentID());
            System.out.println("학점평균: "+student.getAvg());
            System.out.println();
        }
    }
    
    public void searchData() {
        System.out.println("학생 찾기....");
        System.out.println("찾을 학생 이름>>");
        String searchName=StudentManager.sc.next();
        Student s=search(searchName);
        if(s==null) {
            System.out.println("찾는 학생 없음");
            return;
        }
        System.out.println("이름: "+s.getName());
        System.out.println("학과: "+s.getDept());
        System.out.println("학번: "+s.getStudentID());
        System.out.println("학점평균: "+s.getAvg());
    }
    
    private Student search(String searchName) {
        for(int i=0;i<arr.size();i++) {
            if(searchName.equals(arr.get(i).getName())) { //arraylist는 get으로 접근, 크기는 size
                return arr.get(i);
            }
        }
        return null;
    }
    
    public void saveData() throws FileNotFoundException, ClassNotFoundException, EOFException, IOException  {
        ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(file));
        oos.writeObject(arr);
    }
    
    public static void main(String[] args) throws InputMismatchException, FileNotFoundException, ClassNotFoundException, IOException{
        StudentManager sm=new StudentManager();
        while(true) {
            StudentManager.showMenu();
            int num=sc.nextInt();
            sc.nextLine();
            switch(num) {
            case 1 : sm.inputData(); break;
            case 2 : sm.viewData(); break;
            case 3 : sm.searchData(); break;
            case 4 : sm.saveData();
                     System.out.println("프로그램 종료");
                     System.exit(0);
            default : System.out.println("입력오류");
            }
        }
    }
}

<테스트용 코딩>

1. 스캐너를 이용하여 단을 입력받고 콘솔창에 구구단 출력하기 (GuTest)

    • Scanner로 단을 입력받고 print로 콘솔창에 출력한다.

    • 오류메시지를 쓰기 위해 try-catch문으로 처리한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package guiTest;
 
import java.util.InputMismatchException;
import java.util.Scanner;
 
public class GuTest {
 
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("단을 입력하세요");
        try {
            int dan=sc.nextInt();
            for(int i=1;i<10;i++) {
                System.out.println(dan+"*"+i+"="+dan*i);
            }
        }catch(InputMismatchException n) {
            System.out.println("숫자를 입력하세요");
        }
    sc.close();
    }
}
 

 

 

2. 상속과 오버라이딩을 이용하여 출력하기 (Test)

    • extends로 클래스를 상속받는다.

    • super()메소드의 인자로 부모 클래스의 멤버변수를 설정한다.

    • 오버라이딩을 통해 부모 클래스의 출력문과 자식 클래스의 출력문을 달리 설정할 수 있다. 

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
package Test;
class Person{
    String name;
    int age;
    public Person(String name, int age) {
        this.name=name;
        this.age=age;
    }
    
    public void show() {
        System.out.print(name+" "+age+" ");
    }
}
 
class Student extends Person{
    String major;
    public Student(String name, int age, String major) {
        super(name, age);
        this.major=major;
    }
    @Override
    public void show() {
        super.show();
        System.out.print(major);
    }
}
 
public class Test {
    int y; //멤버변수
    public static void main(String[] args) {
        Student s=new Student("김자바"25"회사원");
        s.show(); //김자바 25 회사원 출력되도록 바꾸기
//        int x=0; //지역변수는 반드시 초기값 설정 
//        System.out.println(x);
//        Test t=new Test();
//        System.out.println(t.y); //멤버변수가 int형이면 0으로 설정된다.
    }
}

 

 

 

3. StringTokenizer를 이용하여 문자열을 나눠서 출력하기 (TokenTest)

    • StringTokenizer 클래스에 객체를 선언한다.

    • StringTokenizer 생성자의 멤버변수로는 나눌 문자열 객체, "기준"을 써준다.

    • while문의 인자로는 stk.hasMoreTokens()메소드를 이용, 토큰 수는 countTokens(), 나눠진 문자열은 nextToken()메소드를 이용한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package Test;
 
import java.util.StringTokenizer;
 
public class TokenTest {
 
    public static void main(String[] args) {
        String str="aaa@bbb@ccc@ddd.eee";
        StringTokenizer stk=new StringTokenizer(str,"@.");
        while(stk.hasMoreTokens()) {
            String token=stk.nextToken();
            System.out.println(token);
        }
        System.out.println("======");
    }
}

 

 

 

4. 전치연산, 후치연산

 

        int x=15, y=3, z=4;

        z=++x/y;

        System.out.println("x="+x); //16

        System.out.println("y="+y); //3

        System.out.println("z="+z); //5

        x*=y+1;

        System.out.println("x="+x); //64

        System.out.println("y="+y); //3

        System.out.println("z="+z); //5

        z=++x+y++;

        System.out.println("x="+x); //65

        System.out.println("y="+y); //4

        System.out.println("z="+z); //68

 

 


 

<Test문제 개념 정리>

  • 스캐너를 이용하여 단을 입력받고 콘솔창에 구구단 출력하기 (GuTest)

    • Scanner로 단을 입력받고 print로 콘솔창에 출력한다.

    • 오류메시지를 쓰기 위해 try-catch문으로 처리한다.

  • 상속과 오버라이딩을 이용하여 출력하기 (Test)

    • extends로 클래스를 상속받는다.

    • super()메소드의 인자로 부모 클래스의 멤버변수를 설정한다.

    • 오버라이딩을 통해 부모 클래스의 출력문과 자식 클래스의 출력문을 달리 설정할 수 있다. 

  • StringTokenizer를 이용하여 문자열을 나눠서 출력하기 (TokenTest)

    • StringTokenizer 클래스에 객체를 선언한다.

    • StringTokenizer 생성자의 멤버변수로는 나눌 문자열 객체, "기준"을 써준다.

    • while문의 인자로는 stk.hasMoreTokens()메소드를 이용, 토큰 수는 countTokens(), 나눠진 문자열은 nextToken()메소드를 이용한다.

  • 전치연산, 후치연산 

        int x=15, y=3, z=4;

        z=++x/y;

        System.out.println("x="+x); //16

        System.out.println("y="+y); //3

        System.out.println("z="+z); //5

        x*=y+1;

        System.out.println("x="+x); //64

        System.out.println("y="+y); //3

        System.out.println("z="+z); //5

        z=++x+y++;

        System.out.println("x="+x); //65

        System.out.println("y="+y); //4

        System.out.println("z="+z); //68

 

  • 주석 표시하는 법 36p.

    • 한줄: //

    • 여러줄: /* */

  • 변수 이름 정하기 47p. 

    • $와 _만 특수기호로 쓸 수 있다.

    • 변수 이름은 숫자로 시작할 수 없다.

    • 이미 사용 중인 예약어는 사용할 수 없다.

  • 변수 선언방식

    • 지역변수는 반드시 초기값 설정

    • 멤버변수가 int형이면 0으로 설정된다.

  • 기본 데이터형 49p.

    • 정수형 byte, short, int, long

    • 문자형 char

    • 실수형 float, double

    • 논리형 boolean

  • 생성자 153p.

    • 생성자가 하는 일: 멤버변수를 초기화한다.

    • 생성자 규칙: 클래스 이름하고 같아야함. void를 쓸 수 없다. 반환형도 없다. 클래스를 생성할 때만 호출된다. 

  • 접근제어자 167p.

    • public: 모든 클래스에서 접근 가능함

    • protected: 동일 패키지에 속하는 클래스와 하위 클래스 관계의 클래스에 의해 접근 가능함

    • default(생략): 같은 패키지내부에서만 접근 가능함

    • private: 클래스 내에서만 접근 가능함.

    • protected가 default보다 범위가 크다.

  • static: 여러 클래스에서 공통으로 쓰기 위해 만들어진 것

  • final: 상수로 취급하여 수정하지 못하도록 하는 예약어

  • 추상클래스 (Abstract) 281p.

    • 메소드가 구현되지 않는 (중괄호가 없을때) 클래스를 추상이라 한다.

    • 키워드는 abstract.  추상클래스는 객체를 생성할 수 없다.

  • 인터페이스 (Interface)

    • 추상클래스는 구현되는 메소드, 구현되지 않는 메소드를 다 가질 수 있는데 인터페이스는 추상으로만 이루어져있다.

    • 추상과 마찬가지로 역시 객체를 생성할 수 없다. 여러개의 인터페이스를 implements할 수 있기에 다중상속이 불가능한 자바의 특성을 보완할 수 있다.

  • Calendar 클래스

    • 추상으로 만들어졌기 때문에 new 대신에 getInstance()메소드를 활용한다.

  • Set, Map, List

    • Set: 중복을 허용하지 않는 집합이다.

    • Map: 중복을 허용하지 않으며 키와 value로 이루어져 있는 자료구조이다.

    • List: 중복을 허용 하며 순서가 있는 자료구조이다.  

  • 예외처리

    • try-catch, throws

    • finally- 반드시 실행해야 하는 문장.

  • 최상위객체는 Object이다.

  • 객체지향 언어의 3가지 특징

    • 캡슐화, 상속성, 다형성

  • Thread

    • 실행할 수 있는 가장 작은 단위이다.

    • 사용자가 직접 실행하지 못하며 start()메소드로 호출하여 run()으로 실행한다.

 

  • 스캐너를 이용하여 단을 입력받고 콘솔창에 구구단 출력하기 (GuTest)

    • Scanner로 단을 입력받고 print로 콘솔창에 출력한다.

    • 오류메시지를 쓰기 위해 try-catch문으로 처리한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package guiTest;
import java.util.InputMismatchException;
import java.util.Scanner;
public class GuTest {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("단을 입력하세요");
        try {
            int dan=sc.nextInt();
            for(int i=1;i<10;i++) {
                System.out.println(dan+"*"+i+"="+dan*i);
            }
        }catch(InputMismatchException n) {
            System.out.println("숫자를 입력하세요");
        }
    sc.close();
    }
}

+ Recent posts