UPDATE 를 이용해 데이터를 수정해보자. 

SELECT * FROM emp_score;
UPDATE emp_score SET com=90, excel=95;
-- 조건없이 데이터를 수정하면 모두 수정됨.

SELECT * FROM emp_score;

ROLLBACK; -- 수정 취소

UPDATE 테이블명 SET 컬럼 = 값; 을 이용해서 수정한다. WHERE이 없으면 컬럼에 모든 행에 값을 대입하므로 그냥 WHERE이 있다고 생각해두고 외우자.

UPDATE emp_score SET com=90, excel=95 WHERE empNo = '1002';
SELECT * FROM emp_score;
COMMIT;

ALTER TABLE emp_score ADD(
    tot NUMBER(3) GENERATED ALWAYS AS (com+excel+word) VIRTUAL,
    ave NUMBER(4, 1) GENERATED ALWAYS AS ( ROUND( (com+excel+word) / 3, 1 ) ) VIRTUAL
);

WHERE empNo 에 1002를 줘서 해당 행의 com컬럼과 excel컬럼의 값을 90과 95로 바꾸어 주었다.

 

ALTER을 통해 해당 테이블에 없던 tot와 ave를 가상컬럼으로 추가해주었다.

 

 

다음 문제를 풀어보자. ( UPDATE와 관련 없음 )

더보기

-- emp_score테이블의 다음을 출력한다.

empNo, name, com, excel, word, tot, ave, grade

grade 는 모든 점수가 40점 이상이고 평균이 60점 이상이면 합격

grade 는 평균이 60점이상이고 한과목이라도 40점 미만이면 과락

grade 는 평균이 60점 미만이면 불합격

SELECT empNo, com, excel, word, tot, ave, 
    (CASE
        WHEN com >= 40 AND excel >= 40 AND word >=40 AND ave >=60 THEN '합격'
        WHEN ave>=60 THEN '과락'
        ELSE '불합격'        
    END) grade 
FROM emp_score;

 

CASE 를 통해 WHEN의 조건에 부합하면 THEN을 통해 '합격', '과락, '불합격' 이란 값들을 grade 컬럼에 추가해주었다. 위에서 아래로 실행되는 구조이기 때문에 과락에는 평균의 점수가 60점 이상일 때만의 조건만 주었다. (위에서 모든 과목 40점 이상인 사람들이 걸러지기 때문에 밑에서는 이미 과락 혹은 불합격인 사람들만 남았기 때문이다.)

 

 

 

 

개발부 사람들의 excel 점수를 100점 더해주기

SELECT empNo FROM emp WHERE dept='개발부';
SELECT * FROM emp_score;

UPDATE emp_score SET excel = excel + 100
WHERE empNo IN (SELECT empNo FROM emp WHERE dept='개발부');

SELECT * FROM emp_score; -- 잘 들어 갔는지 확인

ROLLBACK;

개발부인 사람들만 먼저 뽑아보았다. 그 후 UPDATE에서 WHERE ~ IN 서브쿼리를 통해 값을 수정했다.

UPDATE 테이블명 SET 컬럼 = (값) WHERE 조건 IN (이 곳에 있는 컬럼들과 조건이 부합하면 값을 수정한다.)

 

UPDATE 사용시

  • 제약조건을 위반하는 값으로 변경할 수 없다.
  • 데이터 타입이 다르거나 데이터 폭보다 큰 데이터로 수정할 수 없다.

예시

UPDATE emp_score SET empNo = '1002' WHERE empNo = '1001';
-- 에러 : ORA-00001. 기본키는 중복값을 가질 수 없다.

empNo은 PRIMARY KEY로 중복값을 가질 수 없다. 1002는 이미 존재하는 값이기 때문에 1001의 값을 1002로 바꿀 수 없다.

import java.util.StringTokenizer;

public class Ex04_StringTokenizer {
	public static void main(String[] args){
    	String str;
        String[] ss;
        int n;
        
        str = "자바,안드로이드,HTML,스프링,오라클,javascript,JPA";
        // 문자열을 토큰으로 구분하여 보냄
        StringTokenizer st = new StringTokenizer(str, ","); // 구분자는 출력하지 않음(기본)
        // StringTokenizer st = new StringTokenizer(str, ",", true); 구분자도 문자열로 출력
        
        ss = new String[st.countTokens()]; // countTokens() : 보낼 문자열의 총 갯수
        
        n = 0;
        while(st.hasMoreTokens()) {
        // true if and only if there is at least one token in the string after the current position; false otherwise
        // 현재 위치 후에 1개 이상의 토큰이 있으면 true를 반환, 그렇지 않으면 false를 반환하는 boolean 리턴 메소드
        	ss[n++] = st.nextToken();
            // 문자열 0칸부터 차례대로 st에 있는 토큰들을 넣어준다.
        }
        
        System.out.println("파싱된 문자열...");
        for(int i=0; i<ss.length; i++) {
        	System.out.println(ss[i]);
        }
      
    }  
}

'쌍용강북교육센터 > 7월' 카테고리의 다른 글

0720_Ex06_Calendar : Java API  (0) 2021.07.20
0720_Ex05_Calendar : Java API  (0) 2021.07.20
0720_Ex03_StringBuilder : Java API  (0) 2021.07.20
0720_Ex02_StringBuilder : Java API  (0) 2021.07.20
0720_Ex01_String : Java API  (0) 2021.07.20
public class Ex02_StringBuilder {
	public static void main(String[] args) {
    	StringBuilder sb = new StringBuilder();
        
        sb.append("seoul");
        String s = sb.toString().toUpperCase();
        System.out.println(s);
        
        sb.append("우리나라");
        sb.append("대한민국");
        sb.append("부산");
        
        System.out.println(sb);
        
        // seoul 앞에 한국 추가
        sb.insert(0, "한국"); // 0이 첫번째임
        System.out.println(sb);
        
        // seoul 위치를 숫자로 반환
        System.out.println(sb.indexOf("seoul")); // 2번에 있음
        
        // seoul 뒤에 인천 추가
        sb.insert(sb.indexOf("seoul")+"seoul".length(), "인천");
        // 2 + 5 = 7번째에 인천을 추가해라
        
        // 대한민국 삭제 : delete(s, e) -> s인덱스에서 e-1인덱스까지 삭제
        sb.delete(sb.indexOf("대한민국"), sb.indexOf("대한민국")+"대한민국".length());
        System.out.println(sb);
        
        // 우리나라부터 끝까지 삭제
        sb.delete(sb.indexOf("우리나라"), sb.length());
        System.out.println(sb);
        
        // 모두 삭제
        sb.delete(0, sb.length());
        System.out.println(sb);
        
    }
}

String
문자열은 상수풀에 저장(String Constant Pool)
내용불변 (Immutable) 내용이 변경되면 새로운 영역에 메모리를 할당 받아 처리하고 이전 공간은 가비지 컬렉터의 대상이 된다.
final 클래스로 하위 클래스를 가질 수 없다.

public class Ex01_String {
	public static void main(String[] args){
    	String s;
        s = "자바"+", 스프링"+", 오라클"+", HTML";
        // 내부적으로 StringBuilder를 사용하므로 성능이 우수.
/*        
  		s = "자바";
        s+=", 스프링";
        s+=", 오라클";
        s+=", HTML"; 성능이 매우 안좋음. 
*/        

		StringBuffer sb = new StringBuffer();
        sb.append("자바");
        sb.append(", 스프링");
        sb.append(", 오라클");
        sb.append(", HTML");
        // StringBuffer sb객체를 생성하고 append 메소드를 사용해서 가변적인 문자를 StringBuffer에서 붙인다.
        
        System.out.println(s);
        System.out.println(sb);
        
    }
}

import java.math.BigDecimal;

public class Ex08{
	public static void main(String[] args) {
    	BigDecimal a = new BigDecimal("123456789.123456789");
        BigDecimal b = a.movePointLeft(3); // 소수점을 왼쪽으로 3칸 옮기기
        BigDecimal c;
        
        System.out.println(b);
        
        // 나누기
        c = a.dibide(b);
        System.out.println(c); // 1E+3
        
        // 나누기(반올림하지 않음)
        c = a.divide(b, BigDecimal.ROUND_DOWN);
        System.out.println(c) // 1000.000000000
        
        // 나누기(유효자리수 5자리, 반올림하지 않음)
        c = a.divide(b, 5, BigDecimal.ROUND_DOWN);
        System.out.println(c) // 1000.00000
        
        double d = c.doubleValue();
        System.out.println(d);
    }
}

import java.math.BigInteger;

public class Ex07 {
	public static void main(String[] args) {
    	// BigInteger : 아주 큰 정수를 다루기 위해 제공하는 클래스
        BigInteger a = new BigInteger("123456789123456789");
        BigInteger b = new BigInteger("123456789123456789");
        BigInteger c;
        
        c = a.add(b);
        System.out.println("합: "+c);
        
        c = a.subtract(b);
        System.out.println("차: "+c);
        
        c = a.multyply(b);
        System.out.println("곱: "+c);
        
        c = a.divide(b);
        System.out.println("몫: "+c);
        
        c = a.pow(10);
        System.out.println("승: "+c);
    }
}

public class Ex05{
	public static void main(String[] args){
    	String s1, s2;
        int a, b;
        
        s1="123";
        s2="456";
        System.out.println(s1+s2); // 문자열 결합
        
        // 문자열을 정수로 변환
        a = Integer.parseInt(s1);
        b = Integer.parseInt(s2);
        System.out.println(a+b);
        
        // a = Integer.parseInt("1,234"); // 런타임오류 (NumberFormatException)
		// a = Integer.parseInt("123.4"); // 런타임오류 (NumberFormatException)
		
        a = Integer.parseInt("b1", 16); // b1이 16진수 일 때.
        // a = Integer.parseInt("b1") 이렇게만 쓰면 런타임 오류!
        System.out.println(a); // 177
        
        a = Integer.parseInt("1011", 2);
        System.out.println(a); // 11
        
        a = 123;
        s1 = Integer.toString(a); // 정수를 String으로 바꿈.
        System.out.println(s1);
        
        s1 = Integer.toBinaryString(a); // 2진수로 표현한 문자열로 반환
        System.out.println(s1);
        
        s1 = Integer.toHexString(a); // 16진수로 표현한 문자열로 반환
        System.out.println(s1);
        
        System.out.println("정수 최댓값:"+Integer.MAX_VALUE);
        System.out.println("정수 최솟값:"+Integer.MIN_VALUE);
        
    }
}

public class Ex04 {
	public static void main(String[] args) {
    	// null : 객체가 참조하는 영역이 없는 것을 나타낸다.
        
        // int a = null; 기본 자료형은 null을 가질 수 없다.
        
        // int 에 대응하는 Wrapper 클래스
        Integer ii = null;
        int a = 10, b;
        
        ii = a; // 기본 자료형(int)이 Integer 형으로 자동 변환
        		// 실제로는 ii = new Integer(a); -> 컴파일 할 때 Autoboxing
        b = ii; // Integer를 기본 자료형(int)으로 자동 변환
        		// 실제로는 b = ii.intValue(); -> 컴파일 할 때 Auto-unboxing
        
        System.out.println(ii+","+a+","+b);
    
    }
}

'쌍용강북교육센터 > 7월' 카테고리의 다른 글

0719_Ex06_Java API : Double.parseDouble(String)  (0) 2021.07.19
0719_Ex05_Java API : Integer  (0) 2021.07.19
0719_Ex03 Java API : Object clone  (0) 2021.07.19
0719_Ex02_Java API : Object  (0) 2021.07.19
0719_Ex01_Java API : Math  (0) 2021.07.19

+ Recent posts