모든 명령어에는 조건문이 있다. SQL에서는 IF, CASE문이 그 예인데, 가장 사용을 많이하는 조건문은 CASE문이다.
사용 구문
CASE
WHEN [조건절] THEN [TRUE일때값]
ELSE [FALSE일때값]
END
사용 예시
ID
NAME
SCORE
1
손흥민
95
2
이강인
85
3
김민재
75
4
황희찬
65
STUDENT 테이블에 담긴 데이터이다.
SELECT ID, NAME, SCORE,
CASE
WHEN SCORE >= 90 THEN 'A'
WHEN SCORE BETWEEN 80 AND 89 THEN 'B'
WHEN SCORE BETWEEN 70 AND 79 THEN 'C'
WHEN SCORE BETWEEN 60 AND 69 THEN 'D'
ELSE 'F'
END AS GRADE
FROM STUDENT
GRADE 라는 등급을 나타내기 위해, SCORE 컬럼을 이용한다. WHEN 문에 조건절을 적고, THEN으로 해당 조건이 맞을 경우 반환하는 반환값을 작성한다. ELSE는 위에서 적은 모든 조건문에 해당하는게 없을 경우 반환할 값을 적는다. END로 CASE문의 끝이란 걸 알린다. 그리고 AS로 쓰고 싶은 해당 컬럼의 이름을 작성하면 된다. (GRADE)
- 양방향 포인터 구조로 데이터의 삽입, 삭제가 빈번할 경우 데이터의 위치 정보만 수정하면 되기에 유용
- 스택, 큐, 양방향 큐 등을 만들기 위한 용도로 쓰임
// 타입설정 int 타입만 적재 가능
LinkedList<Integer> list = new LinkedList<>();
// 생성시 초기값 설정
LinkedList<Integer> list2 = new LinkedList<Integer>(Arrays.asList(1,2));
LinkedList<String> list = new LinkedList<String>(Arrays.asList("A","B","C"));
// 가장 앞에 데이터 추가
list.addFirst("new");
// 가장 뒤에 데이터 추가
list.addLast("last");
System.out.println(list);
// [new, A, B, C, last]
// 인덱스 1에 데이터 new 추가
list.add(1,"new");
System.out.println(list);
// [A, new, B, C]
LinkedList 요소 삭제
Vector
과거에 대용량 처리를 위해 사용했으며, 내부에서 자동으로 동기화처리가 일어나 비교적 성능이 좋지 않고 무거워 잘 쓰이지 않음
ArrayList
- 단방향 포인터 구조로 각 데이터에 대한 인덱스를 가지고 있어 조회 기능에 성능이 뛰어남
- 일반적인 배열은 처음 선언한 배열의 크기(길이)를 변경할 수 없다. 이를 정적 할당(static allocation)이라고 한다.
- 그러나 ArrayList는 리스트의 길이가 가변적이다. 이를 동적 할당(dynamic allocation)이라고 한다.
ArrayList<String> list = new ArrayList<>(8);
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
// 2번째 인덱스 자리의 요소 삭제
list.remove(2);
System.out.println(list); // [1, 2, 4, 5]
// list의 데이터를 모두 비운다.
list.clear();
System.out.println(list); // []
3. Map 인터페이스
키(Key), 값(Value)의 쌍으로 이루어진 데이터의 집합으로, 순서는 유지되지 않으며 키(Key)의 중복을 허용하지 않으나, 값(Value)의 중복은 허용한다.