JAVA 웹개발 과정 국비 16일차 정리

16일차

※ 배우는 과정이므로 정확하지 않을 수 있습니다.
잘못된 점은 알려주시면 수정하도록 하겠습니다!


1. SQL 이어서..

1) 특정 날짜와 비교하는 WHERE 절

형식 : ‘년/월/일’ 을 맞춰준다. ‘ ‘(작은 따옴표)를 사용한다.
날짜도 숫자처럼 대소비교 가능하다.

SELECT * FROM employee WHERE hire_date>'90/01/01' AND hire_date<'00/01/01';
SELECT * FROM employee WHERE hire_date BETWEEN '90/01/01' AND '00/01/01';

2) NULL 값을 가진 컬럼을 출력

IS NULL 사용.
반대의미는 IS NOT NULL 을 사용한다.

SELECT * FROM employee WHERE bonus IS NULL;
SELECT * FROM employee WHERE bonus IS NOT NULL;

3) ~거나 ~거나 ~거나 조건을 쉽게

IN (조건, 조건, 조건) 키워드를 활용한다.

SELECT * FROM employee WHERE emp_id=200 OR emp_id=201 OR emp_id=202 OR emp_id=203; 
-- 200,201,020,203 에 해당하는 emp_id를 가진 대상만 선택
SELECT * FROM employee WHERE emp_id NOT IN (200,201,202,203); 
-- 200,201,202,203 이 아닌 emp_id 대상만 선택

4) 문자 포함 키워드 LIKE

LIKE + % : 아무글자나 0글자 이상 포함
LIKE + _ : 아무글자나 1글자 이상 포함

SELECT * FROM employee WHERE emp_name LIKE '유%';
-- 이름이 '유'이거나, 유0 이거나, 유00 이거나 ... 유로 시작하는 이름
SELECT * FROM employee WHERE emp_name LIKE '%하%';
-- 이름에 '하'가 들어가는 사람. 이름 가운데가 '하'인 사람이라고 생각하지 말자.
SELECT * FROM employee WHERE emp_name LIKE '__진';
-- 3글자 이름 중 마지막 글자가 '진'인 이름

**언더바 기준 앞글자 3글자인 이메일을 검색하고 싶다면?

ESCAPE를 사용한다.
자바에서의 \(역슬래쉬) 기능을 한다.
ESCAPE 문자는 아무거나 상관 없지만 강사님은 #을 쓴다고 하셨다.

SELECT * FROM employee WHERE email LIKE '___#_%' ESCAPE'#';

5) ORDER BY (데이터 정렬)

가장 마지막에 붙는 절이다. 오름차순(ASC), 내림차순(DESC)을 적용할 수 있다.
아무것도 적어주지 않으면 기본적으로 오름차순이다.
숫자를 쓰면 몇 번 컬럼 기준으로 정렬할지 정하는 것이다.
하나 이상의 컬럼으로 정렬할 수 있다.

SELECT * FROM employee ORDER BY salary;
SELECT * FROM employee ORDER BY hire_date DESC;
SELECT * FROM employee ORDER BY 9;
SELECT * FROM employee ORDER BY dept_code,job_code;
SELECT * FROM employee ORDER BY 6 DESC, 7 DESC;

2. Oracle 내장 함수 (Function)

자바의 메소드와 동일하다.
파라미터를 받아서 코드를 실행하고 리턴값을 가진다.

  • 단일 행 함수
    • 한 행, 한 행에 다 적용이 되는 함수.
    • ex ) NVL, FLOOR 함수
    • 대부분 함수가 속한다.
  • 그룹 함수
    • 모든 행에 대해서 딱 1번 실행되는 함수.

1) 단일 행 함수

① NVL(컬럼명, ‘지정값’)

Null VaLue의 약자
메소드에 값이 전달 되었을 때, 전달된 값이 null인 경우 지정한 값으로 반환하고, null이 아니면 전달된 값 그대로 반환한다.

SELECT emp_name, NVL(dept_code,'인턴') FROM employee;
-- dept_code 값이 null이면 '인턴'을 출력, 값이 있다면 그대로 출력한다.

② LENGTH(‘문자열’) : NUMBER

파라미터로 전달 된 문자열의 길이를 반환하는 함수

SELECT LENGTH('가나다') FROM dual;
-- 3 출력

③ LENGTHB(‘문자열’) : NUMBER

파라미터로 전달 된 문자열의 바이트를 반환하는 함수
영문자(1BYTE), 공백(1BYTE), 한글(1BYTE) 로 각각 계산된다.

SELECT lengthb('ABCDEFG') FROM dual;
-- 7 출력 
SELECT lengthb('가나다') FROM dual;
-- 9 출력

④ INSTR(‘문자열’, ‘찾는문자’, 시작순서, 몇번째) : NUMBER

시작순서몇번째 파라미터는 default 값이 1이므로 생략해도 상관 없다.
복습하면서 깨달은건데, 시작순서와 반환하는 문자열의 위치는 상관이 없다. 즉, 길이가 10인 문장에서 5에서 시작해서 마지막 문자를 찾나, 1에서 시작해서 마지막 문자를 찾나 반환 값은 10이다.
아래 예제 문장 맨 마지막 두 문장을 보면 알 수 있다.

SELECT instr('Hello World Hi High','H', 2, 2) FROM dual;
-- 16 출력
SELECT instr('Hello World Hi High','H', 3, 1) FROM dual;
-- 13 출력
SELECT instr('Hello World Hi High', 'H') FROM dual;
-- 1 출력
SELECT instr('Hello World Hi High', 'H', 2) FROM dual;
-- 13 출력
SELECT instr('Hello World Hi High','h',5,1) FROM dual;
-- 19 출력
SELECT instr('Hello World Hi High','h',1,1) FROM dual;
-- 19 출력

2. 그 외..

  • WHERE 절에 AND 와 OR 도 우선순위가 적용되므로 괄호를 잘 쳐주자.

댓글남기기