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 적용 가능