[SQL] 기초 2

Walter Mitty·2022년 11월 7일
0

SQL

목록 보기
9/15

WHERE 절

WHERE 절은,

  • 반환되는 행을 제한한다
  • FROM 절 다음에 온다
  • 만족해야 할 조건을 포함하고 있다
    • 조건이 참이면 조건을 만족하는 행이 반환
    WHERE		조건을 만족하는 행만 질의하도록 제한
    condition   열 이름, 표현식, 상수 및 비교 연산자로 구성
  • 열 값, 리터럴 값, 산술식 또는 함수를 비교할 수 있다. 다음 세 가지 요소로 구성
    • 열 이름
    • 비교 조건
    • 열 이름, 상수 또는 값 목록
  • 문자열은 대소문자를 구분한다.

따라서, 기본 틀은

SELECT * or {[DISTINCT] column | expression [alias],...}
FROM table
[WHERE condition(s)];

연습하면서 알게된 것! 외우기
1. 빈 공백이 있으면 ""
2. 문자열,날짜, _ 가 있으면 ''
3. 숫자나 상수는 안해도됨
4. 중간에 어떤문자열을 포함한거 구하려면 LIKE '%어떤문자열%'


비교조건

연산자의미
BETWEEN ... AND ...두 값 사이(지정한 값 포함)
IN(set)값 목록 중의 값과 일치
LIKE문자 패턴 일치
IS NULL널 값

  • BETWEEM 조건
    • 값의 범위에 따라 행을 표시한다.
    • 하한값과 상한값 중 하한값 먼저 지정해야한다.

  • IN 조건
    • 값이 목록에 있는지 확인할 수 있다.

      • 값이 특정 값 집합에 있는지 확인하려고 사용.
      • IN의 조건을 멤버조건이라고 한다.
    • 모든 데이터 유형에 사용 가능.

      • 확인하려는 값이 숫자인 경우
      select employee_id, last_name, salary, manager_id
      from employees
      where manager_id in (100,101,201);
      • 확인하려는 값이 문자 혹은 날짜인 경우 → '' 사용
      select employee_id, last_name, salary, manager_id
      from employees
      where last_name in ('Hartstein', 'Vargas');

  • LIKE 조건
    • 유효한 검색 문자열 값인 대체 문자를 사용하여 검색할 수 있다.
    • 검색 조건은 리터럴 문자 또는 숫자를 포함할 수 있다.
      • %에는 문자가 오지 않거나 여러 개 올 수 있습니다.
      • _ 에는 문자가 하나만 올 수 있습니다.
    • LIKE를 쓴다는것은 완전히 똑같은게 아니라 S로 시작하는 것을 말한다(혹은 s로 끝나는 것 등등을 표현할 수 있다)
      • %위치에 문자가와도되고 안와도된다는것.
      • __당 문자 하나씩 와야한다.
    • 검색할 값을 정확하게 알지 못하는 경우 LIKE 조건을 사용하여 문자 패턴이 일치하는 행 선택 가능하다.
      • 문자 패턴 일치 연산을 대체 문자검색이라고도 한다.
    • 대/소문자 구분한다!! 대문자 'S'로 시작하는 이름 다 출력!
    • 숫자도 사용 가능~~

연습

  • %_ 기호는 리터럴 문자를 결합할 때 사용된다.
    • 이름의 두번째 문자가 'o'인 직원 찾기 (세번째는 __O)
  • ESCAPE 식별자를 사용하여 % 또는 _ 자체를 검색할 수 있다.
    • 검색할 문자에 실제로 % 또는 _ 문자가 포함된 경우 ESCAPE 옵션을 사용해서 이스케이프 문자를 지정한다.
      • 'SA_'를 포함하는 문자열을 검색하는 경우
      select employee_id, last_name, job_id
      			from employees
      			where job_id like 'SA\_%' escape '\';
      ESCAPE 옵션은 백슬래쉬()를 이스케이프 문자로 식별한다. 그래서 이스케이프 문자가 밑줄_앞에 있으므로 오라클 서버가 밑줄을 리터럴로 해석한다.

  • NULL 조건 사용
    • IS NULL 연산자로 NULL 여부 테스트.
  • NULL 조건에는 두가지가 있다.
    • IS NULL - 널 여부 테스트
      • 널 값은 알 수 없는 값으로서 사용, 할당 및 적용 불가
      • 어떤 값과도 동일성 여부를 판별 불가 → =를 사용하여 테스트 불가
      • 커미션 받지 않는 업무에 해당하는 모든 사원의 이름, 업무 ID 및 커미션 표시
    • IS NOT NULL

논리조건

  • 두 구성 요소 조건의 결과를 결합해서 하나의 결과를 생성하거나
  • 단일 조건의 결과를 부정시키거나
  • 조건의 결과가 참인 경우에만 행이 반환된다.
연산자의미
AND구성 요소 조건이 모두 TRUE면 TRUE를 반환
OR구성 요소 조건 중 하나라도 TRUE면 TRUE를 반환
NOT뒤따르는 조건이 FALSE면 TRUE를 반환

  • AND 연산자
    • AND는 조건이 모두 TRUE여야 한다.


  • OR 연산자
    • 조건 중 하나가 TRUE면 된다.

  • NOT 연산자
    • job_id가 IT_PROG, ST_CLERK, SA_REP 가 아닌 모든 사원의 이름과 job_id가 표시된다.

  • 참고: NOT 연산자는 BETWEEN, LIKE, NULL 등 다른 SQL 연산자와 함께 사용 가능
    ... WHERE job_id NOT IN ('AC_ACCOUNT', 'AD_VP')
    ... WHERE job_id NOT BETWEEN 10000 AND 15000
    ... WHERE job_id NOT LIKE '%A%'
    ... WHERE commission_pct IS NOT NULL

괄호를 사용하여 기본 순서 무시하고 우선순위를 변경할 수 있다.


우선순위 예제

예제1)

select last_name, job_id, salary
from employees
where job_id = 'SA_REP'
or job_id = 'AD_PRES'
and salary > 15000;

예제에는 두가지 조건이 있다

  • 첫번째 조건 = job_id가 'AD_PRES'면서, salary가 15000이 넘어야한다. AND가 우선순위!
  • 두번쨰 조건 = job_id가 'SA_REP'거나 'AD_PRES' 여야 한다.

따라서 'AD_PRES'(사장)이면서 급여가 $15,000을 넘는 사람 또는 'SA_REP'(영업사원)인 사람의 행들을 SELECT!

예제2)

select last_name, job_id, salary
from employees
where (job_id = 'SA_REP'
or job_id = 'AD_PRES')
and salary > 15000;

예제에는 두가지 조건이 있다

  • 첫번째 조건 = job_id가 'AD_PRES'이거나 'SA_REP'여야 한다. ( )가 우선순위!
  • 두번쨰 조건 = salary가 15000이 넘어야한다.

따라서 'AD_PRES'(사장)이거나 'SA_REP'(영업사원)인 사람이면서 급여가 $15,000을 넘는 사람의 행들을 SELECT!

ORDER BY 절

ORDER BY

  • ORDER BY를 사용해서 행을 정렬

    • ASC: 오름차순, 기본값
    • DESC: 내림차순
  • ORDER BY 절은 SELECT문의 가장 끝 에 둔다.

  • 정렬 조건으로 표현식, 별칭, 또는 열 위치를 지정할 수 있다.

  • 데이터 기본 정렬

    • 숫자 : 작은 값부터 표시됨
    • 날짜 : 이른 값부터 표시됨
    • 문자 : 영문자순으로 표시됨
    • 널 : 오름차순에서는 마지막에 표시되고, 내림차순에서는 처음에 표시됨
  • 열 별칭을 기준으로 정렬

select employee_id, last_name, salary*12 annsal
from employees
order by annsal;

0개의 댓글