티스토리 뷰

SQL/SQLD 이론

[SQLD] SQL 기본 : 5절 WHERE 절

개발자 김챠챠 2025. 3. 5. 02:46

5절 WHERE 절


WHERE 절

SELECT * FROM [WHERE 조건문]

원하는 자료만을 검색하기 위해 검색 조건을 설정

WHERE 절에 조건이 없는 FTS(Full Table Scan)은 SQL 튜닝 1차 검토 대상

※ 병렬 처리 등을 이용해 FTS를 유용하게 사용하는 경우도 있음

 

연산자

  1. 비교연산자 : =, >, >=, <, <=
  2. SQL연산자
    • BETWEEN a AND b : a와 b 사이에 있는 값들
    • IN (list) : 리스트에 있는 값중에서 하나라도 일치 여부. 리스트값은 쉼표로 구분
    • LIKE '비교문자열' : 형태 일치 여부, 와일드 카드사용
      • % : 0개 이상의 문자열 (이름이 S로 시작하면, LIKE 'S%')
      • _ : 1개의 단일 문자 (두번째 글자가 A라면 LIKE '_A')
    • IS NULL : NULL 값인지의 여부
  3. 논리연산자
    • AND : 두 조건 모두 TRUE일 경우 TRUE
    • OR : 두 조건 중 한개라도 TRUE라면 TRUE
    • NOT : 뒤에 오는 조건절에 반대되는 결과 반환
  4. 부정비교연산자 : <>(ANSI/ISO 표준. !=, ^=도 사용가능), NOT 컬럼명 =, NOT 컬럼명 >
  5. 부정SQL연산자 : NOT BETWEEN a AND b, NOT IN (list), IS NOT NULL

우선순위 : ( ) → NOT → 비교연산자, SQL연산자 → AND → OR

 

문자 유형간 비교

비교 연산자의 양쪽이 모두 CHAR 타입

  • 길이가 서로 다르다면 작은쪽 맨 뒤에 공백을 추가하여 같은 길이로 변경
  • 서로 다른 문자가 나올 때까지 비교
  • 달라진 첫 문자의 값에 따라 크기를 결정
  • 맨 뒤의 공백의 수만 다르다면 서로 같은 값으로 결정

비교 연산자 중 어느 한쪽이 VARCHAR 타입

  • 서로 다른 문자가 나올 때 까지 비교
  • 길이가 다르다면 짧은 쪽이 끝날때까지만 비교, 길이가 긴 것이 크다고 판단
  • 길이가 같고 다른 것이 없다면 같다고 판단

상수값과 비교할 경우

  • 상수 쪽을 변수 타입과 동일하게 바꾸고 비교

ROWNUM, TOP

--Oracle
SELECT 컬럼명 FROM 테이블명 ROWNUM <= N or ROWNUM < N;
--SQL Server
SELECT TOP(N) 컬럼명 FROM 테이블명;
SELECT TOP(N) 컬럼명 FROM 테이블명 ORDER BY 컬럼명 DESC WITH TIES;

WHERE절에서 행의 갯수를 제한하는 목적

  • ROWNUM은 1부터 동작하기 때문에, N이 2 이상인경우 ROWNUM = 2 와 같이 = 연산자를 사용할 수 없음
  • Oracle은 ROWNUM으로 고유키나 인덱스 생성가능하지만 추천되지 않음
    (ex) UPDATE 컬럼명 SET 컬럼명 = ROWNUM)

SQL Server는 PERCENT(결과 집합의 처음 몇% 행)도 제공

  • WITH TIES(ORDER BY절이 있으면 마지막 행 같은 값 추가 출력)사용 가능하지만, ORDER BY 등으로 정렬하지 않으면 큰 의미가 없음

최종 수정일 : 2025/03/05

틀린 사항이 있다면 댓글로 알려주시면 감사하겠습니다.

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/12   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함