[Basic] WHERE, 연산자, NULL, ORDER BY

고보·2024년 1월 24일

1 WHERE절

SELECT studno, name, deptno
FROM student
WHERE grade = '1';
  • 원하는 데이터만 선택하는 조건 부여.
  • 칼럼 이름, 연산자, 상수, 산술 표현식을 결합한 다양한 형태로 가능
  • WHERE 절에 사용하는 데이터 타입 중 문자와 날짜는 ' '(작은 따옴표)로 묶고, 숫자는 그냥 사용.
  • 이렇게 ' ' 친 경우는 대소문자 구별.

2 연산자

2-1 비교 연산자

  • =: 같다
  • !=, <>: 같지 않다
  • >: 크다
  • >=: 크거나 같다
  • <: 작다
  • <=: 작거나 같다

2-2 논리 연산자

  • AND: 둘 다 참이면 참
  • OR: 둘 중 하나만 참이면 참
  • NOT: 거짓이면 참
  • 당연하게 파이썬과 달리 1 > a > 0으론 쓸 수 없다. 1 > a and a > 0으로 해야 하거나 아래의 SQL 연산자 사용..
  • ()도 사용 가능. 괄호부터 하고, 이걸 여러 개로 묶기 가능. (and) or (and) 처럼

2-3 SQL 연산자

  • BETWEEN a AND b: a, b를 포함한 a와 b의 값. >= a and <= b와 같다
  • IN (a, b, c, ..., n): a, b, c, ..., n 중 하나라도 일치하면 참. =를 OR로 다 연결한 것과 같다.
  • LIKE: 문자 패턴과 부분적으로 일치하면 참
SELECT name, grade, deptno
FROM student
WHERE name LIKE '김%';

이러면 길이와 상관 없이 김~이면 다 참

SELECT name, grade, deptno
FROM student
WHERE name LIKE '김_영';

이러면 3글자고 김_영이면 다 참

  • IS NULL IS NOT NULL : NULL 이면 참, NULL이 아니면 참

2-3-1 ESCAPE 문

  • ESCAPE 옵션: %나 를 실제 글자로 취급하는 방법. \ 이용.
    '황보\_ escaepe '\';: 이렇게
    나 % 앞에 \를 붙이고, 뒤에 escape '\'로 표기를 해주면 그 부분은 escape문이라는 뜻.

2-4 집합 연산자

  • 테이블끼리 연산해서 부분 집합을 반환하는 연산자
  • 합병 가능: 두 테이블의 칼럼 수가 같고, 대응되는 칼럼끼리 데이터 타입 같다. => 합병 가능하다
  • 종류
    • UNION: 중복되는 거 하나로 줄인 합집합
    • UNION ALL: 중복되는 거 별개로 친 합집합
    • MINUS: 차집합
    • INTERSECT: 교집합
SELECT studno, name
FROM student_heavy
UNION
SELECT studno, name
FROM student_tall;

이렇게 두 개의 SQL 질의문으로 나오는 테이블끼리 연산하는 것

2-5 연산자 우선순위

  • 1 괄호 => 2 비교 연산자, SQL 연산자 => 3 NOT => 4 AND => OR

3 NULL

  • 미확인 값, 칼럼에 아직 적용되지 않은 값.
    0 과 ' '과 다르다 (2/0은 에러지만 2/null은 null이다)
    NULL은 데이터가 부족하다는 뜻이므로 =, !=을 통한 비교 불가능. 그러므로 IS NULL IS NOT NULL 사용
  • 산술식이나 함수에 NULL이 적용되면 결과는 항상 NULL
    • 스칼라 함수는 (REPLACE, NVL, CONCAT 제외하고) NULL 변수 입력받으면 NULL 반환
    • 집계 함수는 NULL을 무시하고 수행(1000, NULL, 2000의 AVG는 1500)
  • Oracle의 경우 길이가 0인 문자형 데이터는 null로 취급. 향후 바뀔 수도 있으므로 주의.

4 ORDER BY

SELECT name, grade, tel
FROM student
ORDER BY name [ASC|DESC]
  • ASC가 default. 아래와 같이 된다.
    • 문자는 알파벳순, 한글은 가나다순
    • 숫자는 작은 것부터
    • 날짜는 과거부터
    • NULL은 가장 큰 값으로 취급. 오름차순 맨 마지막, 내림차순 가장 처음.
    • 동일 컬럼에 숫자, 영문, 한글이 섞여있을 때는 ASCII 숫자 순으로(숫자 => 영어 대문자(65 이후) => 영어 소문자(97 이후) => 한글 => NULL)
  • DESC는 내림차순.
  • SELECT 절에 포함되지 않는 컬럼도 ORDER BY에 올 수 있다

4-1 다중 열에 의한 정렬

SELECT ename, sal, comm
FROM emp
WHERE comm is not null
ORDER BY sal DESC, comm;
  • 이렇게 여러 개의 기준으로 정렬할 수 있음.
  • 위계는 먼저 쓴 순으로. sal로 먼저 정렬하고, 같은 sal 안에서 comm으로.
  • 각각 DESC|ASC 적용 가능
profile
일본에서 일하는 게임 기획자. 시시해서 죽어버리지 않게, 재밌고 의미 있는 컨텐츠에 관심 있습니다. 그 도구로 데이터, AI도 찝적댑니다.

0개의 댓글