IN 연산자는 여러 개의 리스트 값을 조회할 때 사용하는 연산자이다.

WHERE절에 =(이퀄)연산자는 하나의 값만 조회할 수 있는 반면 IN연산자를 이용하면 여러 리스트의 값을

조회할 수 있다.

 


 

반대로 IN연산자 앞에 NOT을 붙이게 되면 'SALESMAN', ''ANALYST', 'MANAGER'가 제외된 결과가 출력된다.

 

'DB' 카테고리의 다른 글

[DB]컬럼 별칭 사용  (0) 2021.03.21
[DB] MySQL - 2  (0) 2020.10.15
[DB]MySQL -1  (0) 2020.10.15
[DB] 용어 설명  (0) 2020.10.15

컬럼 별칭 사용하기


 

 

출력되는 컬럼명을 변경하고자 할 때 컬럼명 다음 as를 작성하고 출력하고 싶은 컬렴명을 기술하면 된다.

empno컬럼은 번호, ename컬럼은 이름 , sal컬럼은 Salary로 출력이 되었다. 또한 ""을 이용하여 대소문자 구분/

공백 문자 구분 / 특수문자 구분이 가능하다. 

 

 

 

 

또한 이렇게 컬렴 별칭을 사용하면 ORDER BY와 같이 정렬을 할 때도 "월급" 컬럼 별칭을 이용하여 ORDER BY절을 사용할 수 있기 때문에 SQL작성이 편리해진다.

 

 

 

'DB' 카테고리의 다른 글

[DB] IN연산자  (0) 2021.03.23
[DB] MySQL - 2  (0) 2020.10.15
[DB]MySQL -1  (0) 2020.10.15
[DB] 용어 설명  (0) 2020.10.15

String

-String은 불변의 속성을 갖는다.

-String클래스는 불변하기 때문에 문자열을 수정하는 시점에 새로운 String인스턴스가 생성된다.

-문자열의 빈번한 추가, 수정, 삭제의 연산이 이루어지면 Heap영역에 많은 임시의 Garbage가 생성되며,

  Heap Memory부족으로 인한 어플리케이션 성능 저하로 이어진다.

 

 

StringBuilder / StringBuffer

-이러한 String의 문제를 해결하기 나온 것이 StringBuilder와 StringBuffer이다.

-StringBuilder와 StringBuffer 클래스는 가변의 속성을 갖는다.

-append(), delete()와 같은 메서드를 이용하여 동일한 객체내에서 문자열을 변경할 수 있다.

-문자열의 빈번한 추가, 수정, 삭제와 같은 연산을 할 때는 StringBuilder와 StringBuffer를 사용하는것이 유리하다.

 

 

StringBuilder VS StringBuffer

<StringBuilder>

-StringBuilder와 StringBuffer의 차이는 동기화의 유무이다.

-StringBuilder는 동기화를 지원하지 않아 멀티쓰레드 환경에서 사용하는 것은 적합하지 않지만 단일쓰레드 환경에서는   StringBuffer보다 뛰어나다.

 

<StringBuffer>

-StringBuffer는 동기화를 지원하여 멀티쓰레드 환경에서 안전성을 가지고 있다.

Array

Array는 고정 길이의 배열로서 초기화시 배열의 크기를 지정한다. 배열을 초기화시 메모리가 할당되어 

속도가 빠르다는 장점이 있다. 또한 데이터의 순서가 있고 또 데이터의 중복을 허용한다.

 

public static void main(String []args) {
		int [] arr  = new int[5];
		arr[0] = 1;
		arr[1] = 5;
		arr[2] = 3;
		arr[3] = 1;
		arr[4] = 6;
		
		for(int i=0; i<arr.length; i++) {
			System.out.println("Array의 "+ i + "번째 데이터 : "+arr[i]);
		}
}        
        
Array의 0번째 데이터 : 1
Array의 1번째 데이터 : 5
Array의 2번째 데이터 : 3
Array의 3번째 데이터 : 1
Array의 4번째 데이터 : 6

 

 

ArrayList

ArrayList는 List 컬렉션 인터페이스의 한 종류로서 배열의 크기를 실행 타임에 정하는 가변 길이를 갖는 배열이다.

그렇기 때문에 메모리가 재할당되어 Array의 비해 속도가 느리다는 단점이 있다.

또한 Array와 마찬가지로 데이터의 순서가 있으며 데이터의 중복을 허용한다.

 

List <Integer> arrList = new ArrayList<>();
		arrList.add(5);  //add 데이터 입력
		arrList.add(5);
		arrList.add(7);
		arrList.add(20);
		
		
		arrList.set(0, 100); //set 데이터 수정
		arrList.set(1, 200);
		arrList.remove(3); //remove 데이터 삭제
	
		for(int i=0; i<arrList.size(); i++) {
			System.out.println("ArrayList의 "+ i +"번째 데이터" + arrList.get(i));
		}
ArrayList의 0번째 데이터100
ArrayList의 1번째 데이터200
ArrayList의 2번째 데이터7

Q. 양의 정수를 입력받고 자릿수를 출력하는 프로그램을 작성하시오. 예들들어 135를 입력하면 '그 수는 3자리입니다' 라고 출력하고 1314를 입력하면 '그 수는 4자리입니다'라고 출력하면 됩니다.

 

 

A.

 

import java.util.Scanner;

public class Q11 {
	static void numcount(int a) {

		if (a / 10 < 1) {
			System.out.println("입력한 숫자는 1자리 수입니다");
		} else if (a / 100 < 1) {
			System.out.println("입력한 숫자는 2자리수 입니다.");
		} else if (a / 1000 < 1) {
			System.out.println("입력한 숫자는 3자리수 입니다.");
		} else if (a / 10000 < 1) {
			System.out.println("입력한 숫자는 4자리수 입니다.");
		}
	}

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);

		System.out.print("정수 입력 : ");
		int num = scanner.nextInt();

		numcount(num);

	}
}

우선 ==는 객체의 주소값을 비교한다. 

 

예를들어 

 

String a = "java";

String b = a;

String c = new String("java"); 가 있다고 본다면 우선  

 

a == b의 결과는 true이다. 왜냐하면 ==는 주소값을 비교한다고 했는데 String b= a 라고 선언해놨기 때문이다.

그렇다면 a == c는 어떤 결과가 나올까 ? 결과는 false이다.

 

이유는 String a = "java"; 와 String c = new String("java"); 는 서로 저장되는 위치가 다르기 때문이다.

우선 우리가 자주 사용하는 String a = "java"와 같은 리터럴 방식은 Heap영역의 String constant pool이라는 리터럴 상수값을 저장하는 공간에 저장이되고

String c = new String("java");는 Heap영역에 저장이되기 때문에 서로 저장되는 주소값이 다르다.

 

즉!  a와 b는 같으므로 임의의 주소값 100을 할당받고 c는 임의의 주소값 200을 할당받아 

a=b //true 

a=c //false

b=c //false 라는 결과가 나오게 된다.

 

또한

 

String str1 = "hello";

String str2 = "hello"; 가 있다고 했을 때 

 

str1==str2는 어떤 결과가 나올까? 결과는 true이다.

==연산자는 주소값을 비교한다고 했는데 true라는 결과가 나온 이유는 String은 불변성(Immutable)이라는 성질을 가지고 있기 때문이다. 즉 같은 값의 문자열에 대해서는 단 하나의 문자열 객체만을 생성하도록 설계 되어있기 때문이다.

 

또한 Java의 Heap영역에는 String객체들을 관리하는 String pool이라는 영역이 있다. 이 String객체를 생성하면

String pool에 기존에 같은 값을 가지고 있는 String 객체가 있는지 검사를 한다. 만약 같은 값을 가진 객체가 있다면 그 객체의 참조값을 리턴하고 같은 값을 가진 객체가 없다면 새로운 String객체를 생성하고 그 참조값을 리턴한다.

 

다음은 equals이다.

equals는 객체의 내용, 즉 값을 비교하는 메서드이다.

 

아까와 같이 

String a = "java";

String b = a;

String c = new String("java"); 가 있다고 본다면

 

a.equals(b) // true  

a.equlas(c) // true

c.equals(b) // true

 

값은 모두 "java"로 동일하므로 eqauls()메서드로 비교했을 때 모두 true가 출력되는 것을 확인할 수 있다.

 

 

<결론>

 

*String은 불변성(immutable)속성을 가짐 ->  같은 값의 문자열에 대해서는 단 하나의 문자열 객체만을 생성

 

*String a = "hello" -> Heap영역의 String Constant Pool(리터럴 상수값을 저장하는 곳)에 저장

*String b = new String("world!") -> Heap영역에 저장

 

*== -> 객체의 주소값을 비교

*equals() -> 객체의 값(내용)을 비교

 

 

+ Recent posts