개발/대덕인재개발원

대덕240905- 자바:연산자/DB:데이터 타입

월은 2024. 9. 5. 17:46

<1~4교시 자바>

<3.연산자>

1.자바에서 제공하는 연산자

-연산식은 반드시 하나의 값 산출

-하나의 값이 오는 모든 자리에 연산식 산출 가능(숫자,true,false 등)

2.연산의 방향과 우선순위

우선순위에 따라 수행

단항->이항->삼항

산술->비교->논리->대입

*괄호를 사용해 먼저 처리할 연산순서 변경 가능

*우선순위가 같은 연산자는 왼쪽에서 오른쪽 방향으로 수행(예외:대입 연산자'='는 오른쪽에서부터)

 
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
public class OperatorTest01 {
 
    public static void main(String[] args) {
        OperatorTest01 test = new OperatorTest01();
        test.method01();
        test.method02();
        test.method03();
    }
    
    public void method03() {
    /*
     *  증감 연산자 : ++, --
     *      ++변수 , 변수++ ==> 변수 = 변수 + 1;
     *      --변수 , 변수-- ==> 변수 = 변수 - 1;
     *  
     *  
     *  변수++ : 변수 값을 다른 연산에 수행한 후에 1 증가시킨다
     *  ++변수 : 다른 연산을 수행하기 전에 변수값을 1 증가시킨 후 연산에 사용한다.    
     *  
     *  변수-- : 변수 값을 다른 연산에 수행한 후에 1 감소시킨다
     *  --변수 : 다른 연산을 수행하기 전에 변수값을 1 감소시킨 후 연산에 사용한다.         
     */
        int val = 10;
        
        // 변수값을 1증가시키는 방법들
        val = val + 1;
        val += 1;
        val++;
        ++val;
        System.out.println("val = " + val);
        System.out.println();
        
        val=10;
        int res = val++;
        // res = val;     val =+ 1; 
        
        System.out.println("res = " + res);
        System.out.println("val = " + val);
        
        val=10;
        res = ++val;
        // val =+ 1;    res = val;
        
        
        System.out.println("res = " + res);
        System.out.println("val = " + val);
        System.out.println("-------------------------------------------");
        
        val=10;
        res = val--;
        // res = val;     val =- 1; 
        
        System.out.println("res = " + res);
        System.out.println("val = " + val);
        
        val=10;
        res = --val;
        // val =- 1;    res = val;
        
        
        System.out.println("res = " + res);
        System.out.println("val = " + val);
        System.out.println("---------------------------------------------");
        
        int a = 10;            // 10 --> 11 ==>12
        int b = a++ + a++;    // ==>11  +  10 
        System.out.println("a = " +a); // 12
        System.out.println("b = " +b); // 21
        //++오른쪽에서부터 연산
        System.out.println("----------------------------------------------");
        
        a = 10;
        b = a++ + ++a;  // 11 +  11 =22
        System.out.println("a = " +a); 
        System.out.println("b = " +b); 
        
        a = 10;
        b = +++ a++;  // 12 + 10 = 22
        System.out.println("a = " +a); 
        System.out.println("b = " +b); 
        
        a = 10;
        b = +++ ++a;  // 12 + 11 =23
        System.out.println("a = " +a); 
        System.out.println("b = " +b); 
        
        
        
        
    }
    
    
    public void method02() {
        /*
              대입 연산자 : = 
                      변수 = 값 또는 수식 또는 다른변수
                  ==> '=' 오른쪽의 결과를 '=' 왼쪽의 변수에 저장한다.(대입한다.)
                  ==> 우선 순위가 제일 낮다.        
         */    
            int a = 5;
            int b = 4;
            
            int result = a + b;
            System.out.println("a = " + a);
            System.out.println("b = " + b);
            System.out.println("result = " + result);
            
        /*    
            복합 대입 연산자 ==> '='와 다른 연산자가 결합된 모습으로 사용한다.
            
            a = a + b;        ==> a += b;
            a = a - b;        ==> a -= b;
            a = a * b;        ==> a *= b;
            a = a / b;        ==> a /= b;
            a = a % b;        ==> a %= b;
        */    
            //a = a + b;    // ==> a += b;
            a += b;
            System.out.println("a = a + b 처리 후 a =  " + a);
            
            int x = 10;
            int y = 4;
            System.out.println("x += y : " + (x += y));  // 14
            System.out.println("x -= y : " + (x -= y));  // 10
            System.out.println("x *= y : " + (x *= y));  // 40
            System.out.println("x /= y : " + (x /= y));  // 10
            System.out.println("x %= y : " + (x %= y));  // 2
        
    }
    
    public void method01() {
        /*
         * 산술 연산자 : +, -, *, / %(나머지)
         */
        int a = 7;
        int b = 5;
        
        System.out.println("덧셈 : " + (a + b));
        System.out.println("뺄셈 : " + (a - b));
        System.out.println("곱셈 : " + (a * b));
        System.out.println("나눗셈 : " + (a /(double) b));
        System.out.println("나머지 : " + (a % b));
    }
 
}
//console
덧셈 : 12
뺄셈 : 2
곱셈 : 35
나눗셈 : 1.4
나머지 : 2
a = 5
b = 4
result = 9
a = a + b 처리 후 a = 9
x += y : 14
x -= y : 10
x *= y : 40
x /= y : 10
x %= y : 2
val = 14


res = 10
val = 11
res = 11
val = 11
-------------------------------------------
res = 10
val = 9
res = 9
val = 9
---------------------------------------------
a = 12
b = 21
----------------------------------------------
a = 12
b = 22
a = 12
b = 22
a = 12
b = 23
 
cs
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
import java.util.Scanner;
 
public class OperatorTest02 {
 
    public static void main(String[] args) {
        OperatorTest02 test = new OperatorTest02();
        test.method01();
        test.method02();
        test.method03();
        test.method04();
        test.method05();
 
    }
    
    public void method05() {
    /*
         3항 연산자(조건 연산자) : 조건식 ? 식1 : 식2 ;
                 ==> 조건식이 참이면 '식1'을 처리하고, 조건식 거짓이면 '식2'를 처리한다.
     */
        /*
        int age = 100;
        
        String str = age>=18 ? "성년" : "미성년";
        
        System.out.println(str);
        */
        
        //------------------------------------------
        Scanner scan = new Scanner(System.in);
        
        System.out.println("첫번째 숫자 입력 >> ");
        int a = scan.nextInt(); //정수형 데이터 입력 받기
        
        System.out.println("첫번째 숫자 입력 >> ");
        int b = scan.nextInt();
        
        // a가 짝수이면 a + b
        // a가 홀수이면 a * b 의 결과를 출력하라
        
        int result = a % 2 == 0 ?  a + b : a * b;
        System.out.println(result);
        
    }
    
    public void method04() {
    /*
         Shift 연산 : >>, <<, >>>
         
         정수 >> 이동횟수
         ==> 정수의 비트값들을 오른쪽으로 이동횟수만큼 이동, 2의 이동횟수 승수만큼 나눈다
         
         정수 >> 이동횟수
         ==> 정수의 비트값들을 왼쪽으로 이동횟수만큼 이동, 2의 이동횟수 승수만큼 곱한다
         
     */
        int a = 14;
        System.out.println("a >> 2 = " + (a >> 2));
        
         a = 14;
        System.out.println("a << 2 = " + (a << 2));
        
        
    }
    
    
    public void method03() {
    /*
         비트 논리 연산자 : &(비트and), |(비트or), ~(비트not), ^(비트xor)
             0 (false), 1(true)
         xor(배타적 논리합)연산 ==> 값이 같으면 0
                                값이 다르면 1
             0 xor 0        ==> 0
             1 xor 0     ==> 1
             0 xor 1        ==> 1
             1 xor 1        ==> 0                   
     */
        int a = 45;            // 00101101
        int b = 25;            // 00011001
        
                            // 00001001    
        System.out.println("a & b = " + ( a & b));
                            // 00111101
                            //   32 + 16 + 8 + 4 + 1
        System.out.println("a | b = " + ( a | b));
                            // 00110100
                            // 32+ 16 + 4
        System.out.println("a ^ b = " + ( a ^ b));
        
                            // 11010010
                            // 비트의 첫번째 자리는 음수
                            // 2의 보수법: 1의 보수 +1(0에 1더하면 해당 자리는 0이고 1은 다음 자리로 넘어감)
                            // 1의 보수법: 0은 1로, 1은 0으로
                            //음수의 값을 구할 때에는 다시 2의 보수 +1
        System.out.println("~a = " + (~a));
 
    }
    
    public void method02() {
    /*
         논리 연산자 : && (논리곱, and), ||(논리합, or), !(논리부정, not)
             
             논리값1 && 논리값2 ==> 두 값이 모두 참이면 결과가 참이 된다.
             논리값1 || 논리값2 ==> 두 값 중 하나라도 참이면 결과가 참이 된다.
             !논리값            ==> 논리값의 반대값이 결과 값이 된다.
     */
        boolean a = true;
        boolean b = false;
        
        System.out.println("a && b = " + (a && b));
        System.out.println("a || b = " + (a || b));
        
        System.out.println("!a = " + (!a)); 
        System.out.println("!b = " + (!b)); 
        
    }
    
    
    public void method01() {
        /*
             비교연산자 (관계연산자) : ==, !=, >, <, >=, <=
                 ==> 계산 결과는 논리값으로 나온다.
         */
            int a = 10;
            int b = 7;
            int c = 10;
            
            System.out.println("a = " + a);
            System.out.println("b = " + b);
            System.out.println("c = " + c);
            System.out.println("-------------------------------------");
            
            System.out.println("a == b --> " + ( a == b ));
            System.out.println("a == c --> " + ( a == c ));
            System.out.println();
            
            System.out.println("a != b --> " + ( a != b ));
            System.out.println("a != c --> " + ( a != c ));
            System.out.println();
            
            System.out.println("a < b --> " + ( a < b ));
            System.out.println("a < c --> " + ( a < c ));
            System.out.println();
            
            System.out.println("a > b --> " + ( a > b ));
            System.out.println("a > c --> " + ( a > c ));
            System.out.println();
            
            System.out.println("a <= b --> " + ( a <= b ));
            System.out.println("a <= c --> " + ( a <= c ));
            System.out.println();
            
            System.out.println("a >= b --> " + ( a >= b ));
            System.out.println("a >= c --> " + ( a >= c ));
           System.out.println();
    }
 
}
//console
a = 10
b = 7
c = 10
-------------------------------------
a == b --> false
a == c --> true


a != b --> true
a != c --> false


a < b --> false
a < c --> false


a > b --> true
a > c --> false


a <= b --> false
a <= c --> true


a >= b --> true
a >= c --> true


a && b = false
a || b = true
!a = false
!b = true
a & b = 9
a | b = 61
a ^ b = 52
~a = -46
a >> 2 = 3
a << 2 = 56
첫번째 숫자 입력 >>
 
cs

 

<4~8교시 DB>

2.3테이블 생성, 수정, 삭제 

데이터 타입

 

문자열 숫자 날짜 2진수

 

우리가 사용하는 대부분의 데이터 타입은 많아봐야 3,4가지밖에 되지 않는다

문자 데이터 타입

 

고정길이는 데이터의 길이를 제한하며 남는 공간은 공백으로 채워진다(가변길이는 남는 공간은 채우지 않고 다시 반납한다)

만약 고정길이의 제한값을 넘는 데이터가 들어온다면 오류가 발생하며 저장이 되지 않는다

VARCHAR2 와 VARCHAR 과의 차이는 미미하다[BYTE/CHAR] 에서 디폴트 값은 BYTE. BYTE는 바이트 크기 지정, CHAR은 문자열 지정 (현재 한글은 조합형에서 완성형으로 인식 방식이 바뀌었는데, 2000바이트나 2000CHAR를 한다 하더라도 한글은 666CHAR까지밖에 못쓰므로 2000바이트 이상으로 저장할 수 없다, CHAR 방식은 현재는 잘 쓰이지 않는다)

 

Charcter Large ObjectLONG과 달리 한 테이블 안에 여러 개를 생성할 수 있으며길이를 따로 지정하지 않는다(그것은 LONG도 마찬가지)

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
2024-0905-01) 문자열 자료
    - 문자열 자료는 ' '로 묶인 자료
    - 고정길이 데이터 타입(CHAR)/가변길이 데이터 타입(VARCHAR, VARCHAR2, LONG, CLOB)
사용예)
    CREATE TABLE EX02_01(
    COL1 CHAR(10 BYTE),
    COL2 CHAR(10 CHAR),
    COL3 CHAR(10),
    COL4 VARCHAR2(2000),
    COL5 LONG,
    COL6 CLOB,
    COL7 CLOB);
    
    INSERT INTO EX02_01 VALUES('대전''SEOUL''대전''대전시 중구 오류동'
                                '대전시 중구 오류동','대전시 중구 오류동','대전시 중구 오류동');
                                
    INSERT INTO EX02_01 VALUES('대전''대전시 중구''대전''대전시 중구 오류동'
                                '대전시 중구 오류동','대전시 중구 오류동','대전시 중구 오류동');
                                
 SELECT * FROM EX02_01;   
 
SELECT LENGTHB(COL1),
       LENGTHB(COL2),
       LENGTHB(COL3),
        LENGTHB(COL4),
       -- LENGTHB(COL5),
       DBMS_LOB.GETLENGTH(COL6),
        DBMS_LOB.GETLENGTH(COL7)
 FROM EX02_01;       
 
 SELECT --SUBSTR(COL5,2,2), --LONG
        SUBSTR(COL6,2,2)    --CLOB
   FROM EX02_01;     
    
cs

 

SELECT   *   FROM  EX02_01;
29행 길이
서브스트링 맛보기

숫자 데이터 타입

 

다른 타입은 대부분 NUMBER로 자동변환되므로 가장 많이 사용되는 것은 NUMBER.(P,[S]) 정수의 자릿수는 P-S, 기능은 제공이 되지만 오라클은 어디까지나 데이터베이스므로 실제 소수점 절상하여 오차범위를 감안하는 일은 드물다 P 자리에 *(아스트릭스, ALL) 만 사용해주면 자릿수 지정을 시스템에 위임하는 것

 

P보다 S가 큰 경우

S-P= 소수점 뒤의 0이 나오는 개수

 

S가 -n 인 경우

정수의  n자리 만큼  절상

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
- NUMBER[ (p|*[,s)]
 사용예)
 DELETE FROM EX02_02
 
    CREATE TABLE EX02_02(
        COL1 NUMBER,
        COL2 NUMBER(3),
        COL3 NUMBER(3,2),
        COL4 NUMBER(5,2),
        COL5 NUMBER(7,1),
        COL6 NUMBER(7,-1),
        COL7 NUMBER(7,-2),
        COL8 NUMBER(*,2),
        COL9 NUMBER(4,5),
        COL10 NUMBER(3,4),
        COL11 NUMBER(4,6));
    
    INSERT INTO EX02_02 VALUES(456.73,456.73,6.73,456.73,456.77,50456.73,
                             12456.73,12456.7393,0.01234,0.0012,0.00123789); 
    
    SELECT * FROM EX02_02
cs

SELECT * FROM EX02_02

오류 나오는 것은 이제는 0도 인식하면서(?) 정상적으로 0.0012로 출력 가능하다

 

날짜 데이터 타입

*DATA=오타, DATE가 맞습니다 

년월일/시분초

이 두 조각은 더이상 나눠질 수 없다 저장하고 싶다면 3가지 요소가 들어있어야 한다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2024-0905-03)날짜
-DATE, TIMESTAMPTIMESTAMP WITH LOCAL TIME ZONE,TIMESTAMP WITH TIME ZONE
 
 사용예)
  CREATE TABLE EX02_03(
    COL1 DATE,
    COL2 DATE,
    COL3 DATE,
    COL4 TIMESTAMP,
    COL5 TIMESTAMP WITH LOCAL TIME ZONE,
    COL6 TIMESTAMP WITH TIME ZONE);
    
    INSERT INTO EX02_03 VALUES(SYSDATE, SYSDATE-10, SYSDATE+27, SYSDATE, 
                                SYSTIMESTAMP, SYSTIMESTAMP);
                                
    SELECT * FROM EX02_03;   
    
    (시간표시)
    SELECT TO_CHAR(COL1, 'YYYY-MM-DD HH24:MI:SS'FROM EX02_03;
    
    SELECT MOD((TRUNC(SYSDATE)-TRUNC(TO_DATE('00010101'))-1),7FROM DUAL;
cs

 

SELECT * FROM EX02_03;
오라클에서는 서기1년1월1일 기준으로 오늘 요일 알아내기가 매우 쉽다구 자바에서는 이프문 써가며 윤년의 4년주기는 넣고,100년주기는 빼고 400년 주기는 넣어가며 어렵게 해야 되건만..