09강 정렬 - ORDER BY
- ORDER BY 로 검색 결과 정렬
ORDER BY 구로 정렬하고 싶은 열 지정 -> 행이 정렬된다.
- ORDER BY DESC로 내림차순 정렬
ORDER BY 열명 일 때, default로 오름차순 정렬된다.
-> ORDER BT 열명 ASC 와 같다.
- 대소관계
문자열형 데이터는 알파벳, 한글 순이고 한글은 자음, 모음 순이다.
-> 문자열형 데이터의 대소관계는 사전식 순서에 의해 결정된다.
- ORDER BY는 테이블에 영향을 주지 않는다.
참조만 할 뿐, 물리적인 영향을 주지 않는다.
10강 복수의 열을 지정해 정렬하기
ex ) 상품코드와 해당 상품의 하위번호를 고려하여 정렬하라.
- 복수 열로 정렬 지정
언제나 같은 순서로 결과를 얻고 싶다면 반드시 ORDER BY 구로 순서를 지정해야 한다.
=> b 는 정렬되지 않는다. a 열 값이 똑같은 경우 순서를 정렬할 수 없기 때문이다.
- 정렬방법 지정
ASC | DESC 지정 가능
ASC 가 default 이며, 생략 가능하다.
- NULL 값의 정렬순서
대소비교가 불가능하다 따라서 가장 먼저 표시되거나 가장 나중에 표시된다.
MySQL의 경우 NULL 값을 가장 작은 값으로 취급한다.
11강 결과 행 제한하기 - LIMIT
- 행 수 제한
LIMIT 다음 최대 행 수를 수치로 지정한다.
만약 LIMIT 10으로 지정하면 10개의 행이 클라이언트로 반환된다.
(index 로 치면 0~9로 생각하면 될 것 같다.)
결과값은 같지만 내부처리 순서가 전혀 다르다.
LIMIT는 WHERE구로 검색한 후 ORDER BY 로 정렬된 뒤 최종적으로 처리하기 때문이다.
- 오프셋 지정
ex ) 6번째 행부터 (OFFSET) 5건 데이터(LIMIT) 검색
12강 수치 연산
- SELECT 구로 연산하기
- 열의 별명
별명이 한글로 지정되는 경우 더블쿼트("")로 둘러싸서 지정한다.
- WHERE 구에서 연산하기
만약 별명으로 amount 를 지정했을 때, where 구에서 amount>=2000 을 실행하면 amount 열이 존재하지 않는다는
에러가 발생한다.
-> WHERE 구와 SELECT 구의 내부처리 순서 때문이다. (WHERE 구 SELECT 구 순)
-> SELECT 에서 지정한 별명은 WHERE 실행 시, 지정되지 않았기 때문이다.
- NULL 값 연산
NULL 로 연산하면 NULL이 된다.
1 / NULL 수행 시, 1 / 0 이 'division by zero' 에러가 나는 것과 달리 결과값이 NULL 이 된다.
- ORDER BY 구에서 연산하기
-> ORDER BY 구는 가장 나중에 처리되기 때문에 별명을 사용할 수 있다.
- ROUND 함수
함수명 (인수1, 인수2 ... )
반올림을 할 때 사용하는 함수가 ROUND 함수다.
5961.60 은,
-4, -3, -2, -1 . 0, 1 순서이다.
13강 문자열 연산
- 문자열 결합
-> quantity 열은 INTEGER 형이지만 문자열 결합으로 인해 문자열형이 된다.
- SUBSTRING 함수
- TRIM 함수
여분의 스페이스를 제거한다. 따라서 고정길이 문자열에 많이 사용한다.
TRIM('ABC ') - 'ABC'
- CHARACTER_LENGTH 함수
문자열의 길이를 계산해 돌려준다.
VARCHAR 형의 문자열은 가변 길이이므로 길이가 서로 달라 비교 시 사용할 수 있다.
문자열의 길이는 문자 단위로 계산되어 수치로 반환된다.
-> 문자열 데이터도 결국 수치로 저장된다.
* 문자열 데이터의 길이는 문자세트에 따라 다르다.
14강 날짜 연산
ex ) 쇼핑사이트에서 입하, 출하, 주문 등의 많은 부분에 걸쳐 날짜 정보 사용
- SQL 에서의 날짜
사칙 연산이 가능하다.
-> 기간형(interval) 데이터를 반환하는 경우도 있다. (10일간, 2시간 10분 ... )
- 날짜의 덧셈과 뺄셈
INTERVAL 1 DAY 는 '1일 후' 라는 의미의 기간형 상수이다.
15강 CASE 문으로 데이터 변환하기
임의의 조건에 따라 독자적으로 변환 처리를 지정해 데이터를 변환하고 싶을 때 사용한다.
CASE
WHEN 1 THEN ...
WHEN 2 THEN ...
END
- CASE 문
WHEN 절에는 참과 거짓을 반환하는 조건식을 기술한다.
THEN 절에 기술한 식이 처리된다.
ELSE 절은 그 어떤 조건식도 만족하지 못한 경우 채택된다. (생략 가능)
-> a 열의 값이 NULL일 때 0으로 변환하고, NULL이 아니면 a열의 값을 반환한다.
- 또 하나의 CASE 문
문자화하는 것은 '디코드' 이고, 수치화하는것은 '인코드' 이다.
WHEN a=1 THEN '남자'
WHEN a=2 THEN '여자'
1. 검색 CASE
CASE WHEN 조건식 THEN 식 ...
2. 단순 CASE
CASE 식 WHEN 식 THEN 식 ...
- CASE 사용 시 주의사항
- ELSE 생략
ELSE 를 생략하면 ELSE NULL 이 된다.
따라서 ELSE 를 생략하지 않는 편이 낫다.
-WHEN 에 NULL 지정
비교 연산자 '=' 로는 NULL값과 같은지 아닌지를 비교할 수 없다.
1. a=1
2. a=2
3. a=NULL (X)
따라서 데이터 없음이 아닌 미지정이라는 결괏값이 나온다.
-> IS NULL을 사용해야 한다.
'SQL' 카테고리의 다른 글
[6장] 데이터베이스 객체 작성과 삭제 (0) | 2022.11.21 |
---|---|
[5장] 집계와 서브쿼리 (0) | 2022.11.07 |
[4장] 데이터의 추가, 삭제, 갱신 (0) | 2022.10.30 |
[2장] 테이블에서 데이터 검색 (0) | 2022.10.02 |
[1장] 데이터베이스와 SQL (0) | 2022.09.24 |