Database - SELECT문 Part 2

Bomin Seo·2022년 7월 22일
0

WHERE절

  • WHERE절을 통하여 검색 조건을 명시할 수 있다.

    	SELECT *
    	FROM EMPLOYEE
    	WHERE DNO = 2;

문자열 비교

  • 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"는 인용 문자열을 결과에서 재사용할 때 사용한다.

숫자 표시에 영향을 주는 접미어

profile
KHU, SWCON

0개의 댓글