WHERE절
문자열 비교
- LIKE 구문과 와일드 문자 %, _를 사용하고 ' '를 통해 묶음으로써 문자열을 비교할 수 있다.
- % : 0개 이상의 임의의 문자
- _ : 1개의 임의의 문자
SELECT EMPNAME, TITLE, DNO
FROM EMPLOYEE
WHERE EMPNAME LIKE '이%'
다수 검색 조건
-
WHERE절에 NOT / AND / OR 을 사용하여 다수의 검색 조건을 입력할 수 있다.
SELECT EMPNAME, SALARY
FROM EMPLOYEE
WHERE TITLE = '과장' AND DNO = 1;
비교 연산자 순위
- 비교 연산 > NOT > AND > OR
- 연산자의 비교 순위를 고려하여 WHERE절을 기술하여야 한다.
부정 검색 조건
- 직급이 과장이면서 1번 부서에 속하지 않은 사람의 이름과 급여를 다음과 같은 질의문을 통하여 검색할 수 있다.
SELECT EMPNAME, SALARY
FROM EMPLOYEE
WHERE TITLE = '과장' AND DNO <> 1;
범위 사용 검색
- BETWEEN ~~ AND ~~~ 를 통하여 검색하거나 비교 연산자의 조합으로 범위 검색을 시행할 수 있다.
SELECT EMPNAME, TITLE, SALARY
FROM EMPLOYEE
WHERE SALARY BETWEEN 300000 AND 4500000;
SELECT EMPNAME, TITLE, SALARY
FROM EMPLOYEE
WHERE SALARY >= 300000 AND SALARY <= 4500000;
리스트 사용 검색
- Att IN (A, B)와 같은 구문을 사용하여 리스트 사용 검색을 수행할 수 있다.
SELECT *
FROM EMPLOYEE
WHERE DNO IN (1, 3);
- 1번 부서와 3번 부서에 속한 사원들의 데이터를 보여준다. (1~3번 부서가 아닌 1, 3번 부서)
산술 연산자 사용
- SELECT 절에 산술연산자(+, -, /, *)를 사용하여 애트리뷰트를 산술할 수 있다.
SELECT EMPNAME, SALARY, SALARY * 1.1 AS NEWSALARY
FROM EMPLOYEE
WHERE TITLE = '과장'
NULL VALUE
-
널값을 포함한 다른 값과 널값을 연산하면 결과는 널값이 나온다
-
COUNT(*)를 제외한 집단함수들은 널값을 무시한다.
-
널값과의 비교 결과는 무조건 널값이 산출된다.
- 널값을 가진 데이터를 검색하기 위해서는 다음과 같은 질의문을 사용해야 한다.
WHEHE DNO IS NULLL;
WHERE DNO IS NOT NULL;
-
다음의 비교 결과는 모두 거짓이 도출된다.
NULL > 300
NULL = 300
NULL <> 300
NULL = NULL
NULL <> NULL
추가 고려 사항
- WHERE MANAGER_ID IN (NULL, 100, 200)
- MANAGER_ID = NULL or 100 or 200
- 100번, 200번인 매니저만 출력된다.
- WHERE MANAGER_ID NOT IN (NULL, 100, 200)
- MANAGER_ID = NULL and 100 and 200
- 아무것도 출력되지 않는다.
Three value logic
-
true / false / unknown의 논리 연산
-
unknown에 대한 or 연산
-
unknown에 대한 and 연산
-
unknown에 대한 not 연산
-
true = 1, false = 0, unknown = 0.5로 둔다면
- c1 and c2 = min(c1, c2)
- c1 or c2 = max(c1, c2)
- not(c1) = 1 - c1
으로 계산할 수 있다.
문자함수
LOWER 함수
- WHERE LOWER(last_name) = 'sql'; 처럼 LOWER함수를 사용하면 데이터를 모두 소문자로 바꾸어 검색을 진행한다.
UPPER 함수
- WHERE UPPER(last_name) = 'SQL'; 처럼 UPPER함수를 사용하면 데이터를 모두 대문자로 바꾸어 검색을 진행한다.
INITCAP 함수
- WHERE INITCAP(last_name) = 'Sql Course'; 처럼 INITCAP함수를 사용하면 데이터를 첫 글자가 대문자로 시작하도록 바꾸어 검색을 진행한다.
CONCAT 함수
- CONCAT(str1, str2) 함수는 두 문자열을 연결한다.\
SUBSTR 함수
- SUBSTR(str1,startnum,endnum) 함수는 문자열의 [startnum, endnum]인덱스를 가지는 문자열을 출력한다.
LENGTH 함수
- LENGTH(str) 함수는 문자열의 길이를 검색한다.
INSTR 함수
- INSTR(str, 'char') 함수는 문자열 내에 char에 해당하는 문자가 있는 인덱스를 검색한다.
LPAD & RPAD
- LPAD(SALARY, 10, )등과 같이 서술한다면 SALARY를 10자리로 출력하며 출력값 왼쪽에 로 빈자리를 PADDING한다.
숫자함수
ROUND(column, n)
- 컬럼 또는 값에 대해 소수점 n번째 자리에서 반올림한다.
- n이 생략되면 소수점을 나타내지 않는다.
TRUNC(column, n)
- 컬럼 또는 값에 대해 소수점 n번째 자리의 나머지는 버린다.
- n이 생략되면 기본값으로 0을 설정한다.
SELECT ROUND(45.9323, 2)
FROM DUAL
DUAL
- FROM절은 필수적으로 기재해야하기 때문에 FROM절이 필요하지 않은 질의문인 경우 Dummy table인 DUAL을 호출하여 사용한다
날짜 함수
MONTHS_BETWEEN
- 두 날짜 사이의 달 수를 반환한다.
- MONTHS_BETWEEN('95/09/01', ‘94/01/11‘)
ADD_MONTHS
- 날짜에 달수를 더한다.
- ADD_MONTHS(‘94/01/11', 6)
NEXT_DAY
- 명시한 날짜 이후의 첫번째 해당요일 일자를 나타낸다.
- NEXT_DAY('95/09/01', ‘일요일‘)
LAST_DAY
- 달의 마지막 날을 지칭한다.
- LAST_DAY('95/02/01‘)
ROUND
TRUNC
기타 형식
- / , . 는 구두점을 결과에 재사용할 때 사용한다.
- "of the"는 인용 문자열을 결과에서 재사용할 때 사용한다.
숫자 표시에 영향을 주는 접미어