본문 바로가기
인천일보아카데미/- 학습일지

[학습일지]JAVA교육일지 45일차

by w1z 2022. 6. 19.

1. SELECT, FROM

2. WHERE


1. SELECT, FROM

[ SELECT 정의 ]

- 데이터베이스로부터 원하는 데이터를 가져오는 명령어(읽기)

- SELECT를 구성하는 모든 절들은 실행 순서가 있다.

<원하는 컬럼 1개>
SELECT 컬럼리스트 -- 데이터를 가져올 컬럼을 정한다.
FROM 테이블명;    -- 데이터를 가져올 테이블을 지정한다.

<원하는 컬럼 N개> --콤마로 구분한다.
SELECT 컬럼리스트1, 컬럼리스트2, ...
FROM 테이블명;

<원하는 컬럼 전부>
SELECT *
FROM 테이블명;

 

[ 연산자(Operator) ]

1. 산술 연산자
  - +, -, *, /
  - %(없음) -> 함수로 제공(mod())

2. 문자열 연산자
  - concat
  - '문자열' + '문자열' (X)
  - '문자열' || '문자열' (O)

3. 비교 연산자
  - >, >=, <, <=
  - =(같다), <>(다르다) --> ==(X), !=(X)
  - 논리값을 반환 > boolean 반환 > ANSI SQL은 논리형이 없다. > 표현 X > 결과셋에 담을 수 없다.
  - 조건에만 사용

2. WHERE

[ 정의 ]

- 가져올 레코드를 지정할 조건을 명시한다.

- 조건에 만족하는 행은 결과셋에 포함되고, 만족하지 못하는 행은 결과셋에 포함되지 않는다.

- 행 단위로 걸러낸다. 

- 주로 조건을 비교연산자 / 논리연산자를 사용해서 구성한다.

- 논리연산자는 오라클에서는 알파벳으로 작성한다. (AND, OR, NOT)

1. test 테이블에 속한 name컬럼 리스트에서 홍길동을 꺼내온다.
SELECT * FROM test WHERE name = '홍길동'; 

2. test 테이블에 속한 age컬럼 리스트에서 20 이상만 찾는다.
SELECT * FROM test WHERE age > 20; 

3. name은 홍길동, gender는 남자 찾기
SELECT * FROM test WHERE name = '홍길동' OR gender = '남자'; 

4. weight가 60이상이고, height가 170미만 찾기
SELECT * FROM test WHERE weight >= 60 AND height < 170;

 

[ BETWEEN ]

- WHERE절에 조건으로 사용

- 범위 조건으로 사용

- 컬럼명 BETWEEN 최솟값 AND 최댓값 (최솟값, 최댓값 자신 포함)

- 연산자 사용보다 가독성이 좋다.

<숫자 비교>
방법1. 연산자 이용
SELECT * FROM test WHERE weight >= 60 AND weight <= 70;

방법2. BETWEEN 이용
SELECT * FROM test WHERE weight BETWEEN 60 AND 70;

<문자 비교> -- 오라클에서는 문자열 비교가 가능하다.
방법1. 연산자 이용
SELECT * FROM test WHERE name >= 'K' AND name <= 'Z';

방법2. BETWEEN 이용
SELECT * FROM test WHERE name BETWEEN 'K' AND 'Z';

<날짜/시간 비교> --오라클은 따로 형식을 지원한다. YYYY-MM-DD
방법1. 연산자 이용
SELECT * FROM test WHERE date >= '2015-01-01' AND date <= '2021-05-13';

방법2. BETWEEN 이용
SELECT * FROM test WHERE date BETWEEN '2015-01-01' AND '2021-05-13';

 

[ IN ]

- WHERE절에 조건으로 사용

- 열거형 조건 > 제시된 값중 하나라도 일치하면 만족

- 컬럼명 IN (값, 값, 값, .... 값)

개발팀 + 홍보팀 + 인사팀 예제
방법1 
SELECT * FROM test WHERE team = '개발팀' OR team = '홍보팀' OR team = '인사팀';

방법2
SELECT * FROM test WHERE team IN('개발팀', '홍보팀', '인사팀');

 

[ LIKE ]

- WHERE절에 조건으로 사용

- 패턴 비교(정규 표현식과 유사)

- 문자형을 대상으로 동작(숫자형, 날짜형은 적용 불가)

- 칼럼명 LIKE '패턴 문자열'

- 패턴 문자열 구성 요소
  1) _ : 임의의 문자 1개 -> "."
  2) % : 임의의 문자 N개 

예제1
SELECT NAME FROM test WHERE NAME LIKE '홍길동';
SELECT NAME FROM test WHERE NAME = '홍길동';
SELECT NAME FROM test WHERE NAME LIKE '홍__'; --홍OO
SELECT NAME FROM test WHERE NAME LIKE '__신'; --OO신
SELECT NAME FROM test WHERE NAME LIKE '_길_'; --O길O
SELECT NAME FROM test WHERE NAME LIKE '김___'; --김OOO
SELECT NAME FROM test WHERE NAME LIKE '김_'; --김O


예제2
SELECT name FROM test;
SELECT name FROM test WHERE name LIKE 'E____'; --Eooo
SELECT name FROM test WHERE name LIKE 'E%'; --E로 시작되는
SELECT name FROM test WHERE name LIKE '%e'; --e로 끝나는
SELECT name FROM test WHERE name LIKE '%e%'; --e가 들어간
SELECT name FROM test WHERE name LIKE '%ea%'; --ea가 들어간
SELECT name FROM test WHERE name LIKE '%e%a%'; --e랑a가 들어간

 

[ RDBMS에서의 NULL ]
- 자바의 NULL 개념과 유사
- 컬럼값이 비어있는 상태(셀)
- 대다수의 언어는 NULL을 피연산자로 사용할 수 없다.
- NULL 조건 
  1) WHERE절에 조건으로 사용
  2) 컬럼명 IS NULL
  3) 컬럼명 IS NOT NULL

도서 대여 테이블 반납(대여 날짜, 반납 날짜) 예제
1. 아직 반납이 안된 대여 기록?
SELECT * FROM 도서대여 WHERE 반납날짜 IS NULL; 

2.반납 완료된 대여 기록?
SELECT * FROM 도서대여 WHERE 반납날짜 IS NOT NULL;

 

[ DISITINCT ]

- 컬럼 리스트에 사용됨

- 중복값을 제거한다.

- DISITINCT 컬럼명

< 중복된 이름 제거하여 하나만 가져오기>
SELECT DISTINCT name FROM test;

< 중복된 이름 제거하여, 나이까지 가져오기 >
SELECT DISTINCT name, age FROM test;
--> 여기서 주의할점이 중복된 이름(DISTINCT name) 제거와 동시에 나이를 가져올때
--> DISITINCT는 name만 보는것이 아닌 (name, age) 이렇게 묶어서 보는것을 주의하자.
--> 결론, DISTINCT 사용시 캘럼2개 이상일 때 중복값을 생각하고 작성하기.

MEMO >

# 오라클에서 작성법은 SELECT - FROM 절 다음 엔터를 치고 이용해도 되고, 한줄로 작성해도 된다. 자기한테 편하고 맞는걸 찾아서 쓰자

 

# 오라클에서 코드작성이 다 된 파일을 테이블 생성, 추가 할때 커서를 맨앞에 두고 F5키 누르면 순차로 자동 실행된다.

 

# 오라클도 오류노트 만들어서 작성하자.