<ORDER BY절>
SELECT문 가장 마지막 줄에 작성, 상행순서또한 가장 마지막에 실행한다.
[표현법]
SELECT 조회할 컬럼...
FROM 조회할 테이블
WHERE 조건식
ORDER BY 정렬기준이 될 컬럼명 | 별칭 | 컬럼순번 [ASC | DESC] [NULLS FIRST | NULLS LAS
ASC: 오름차순(작은 값으로 시작해서 점점 커지는 것) --> 기본값
DESC: 내림차순(큰 값으로 시작해서 값이 점점 줄어드는 것)
NULL은 기본적으로 가장 큰 값으로 분류해서 정렬한다.
NULLS FIRST: 정렬하고자 하는 컬럼값에 NULL이 있을 경우 해당 데이터 맨 앞에 배치 (DESC일 때 기본값)
NULLS LAST: 정렬하고자 하는 컬럼값에 NULL이 있을 경우 해당 데이터 맨 뒤에 배치 (ASC일 때 기본값)
SELECT *
FROM EMPLOYEE
--ORDER BY BONUS;
--ORDER BY BONUS ASC;
--ODDER BY BONUS ASC NULLS FIRST;
--ORDER BY BONUS DESC; --NULLS FIRST가 기본값으로 적용
--정렬기준에 컬럼같이 동일할 경우 그 다음차순을 위해서 여러개를 제시할 수 있다.
ORDER BY BONUS DESC, SALARY ASC;
전 사원의 사원명, 연봉 조회(이 때 연봉을 기준으로 내림차순 정렬)하는 경우는 ORDER BY 절을 활용해 3가지 방법으로 적을 수 있는데,
SELECT EMP_NAME,SALARY*12 연봉
FROM EMPLOYEE
--ORDER BY SALARY*12 DESC;
--ORDER BY 연봉 DESC;
--ORDER BY 2 DESC;
다음과 같이
1.직접 산술연산한 SALARY*12
2.SALARY*12를 별칭으로 '연봉'을 적어 사용
3.SELECT문에서 SALARY*12를 2번째로 사용했기 때문에 '2'를 적어 사용
이렇게 3가지가 있다.강사님께서 3번째 방법은 부적절하다고 하셨는데, 확실히 첫 번째 아니면 두 번째 방법을 사용하는게 좋아보인다.
<형변환 함수>
TO_CHAR : 숫자타입 또는 날짜타입의 값을 문자타입으로 변환시켜주는 함수
SELECT TO_CHAR(12,'99999') FROM DUAL; --9의 자리수만큼 공간을 확보
SELECT TO_CHAR(12,'00000') FROM DUAL; --0의 자리수만큼 공간확보, 빈칸을 0으로 채움
SELECT TO_CHAR(2000000,'L9999999') FROM DUAL; --현재 설정된 나라의 로컬 화폐단위 나타냄
SELECT TO_CHAR(2000000,'9,999,999') FROM DUAL;
날짜타입 > 문자타입
SELECT TO_CHAR(SYSDATE,' AM HH:MI:SS') FROM DUAL; --AM,PM 어떤 것을 사용하건 형식을 정해주는 것
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD DAY DY') FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'YYYY"년"-MM"월"-DD"일" HH"시"MM"분"SS"초"') FROM DUAL;
년-월-일을 다음과 같은 형식에 맞게 사용해야 문제없이 문자타입으로 변환된다.
마지막 줄과 같이 응용해서 표현할 수도 있다.
문자타입 > 날짜타입
SELECT TO_DATE(20100101) FROM DUAL;
SELECT TO_DATE(611218) FROM DUAL; --기본적으로 연도를 2자리만 입력시 RR룰이 적용된다.
년,월,일 순으로 다음과 같이 기재하면 날짜타입으로 형변환이 된다.
SELECT TO_DATE(051010) FROM DUAL; --0으로 시작하는 숫자는 없다.(오류)
SELECT TO_DATE('051010') FROM DUAL;
SQL에서 0으로 시작하는 숫자는 없으므로 맨 앞이 0이 나올 경우 다음과 같이 리터럴 형식으로 바꿔 형변환을 해준다.
<NULL 처리 함수>
*NVL(컬럼,해당컬럼이 NULL일 경우 보여줄 값)
SELECT EMP_NAME, NVL(BONUS, 0)
FROM EMPLOYEE;
위와 같이 표현하면 BONUS가 NULL값인 경우 이 값들을 0으로 교체해준다.
*NVL2(컬럼, 반환값1,반환값2)
--반환값1 : 해당컬럼이 존재하면 보여줄 값
--반환값2 : 해당컬럼이 존재하지 않으면 보여줄 값
SELECT EMP_NAME,BONUS,NVL2(BONUS, 'O','X')
FROM EMPLOYEE;
BONUS가 존재할 경우 (NULL이 아닌 경우) O를 출력하고 BONUS가 NULL인 경우,
X를 출력한다.
<선택 함수>
#DECODE(비교하고자하는 대상, 비교값1, 결과값1, 비교값2, 결과값2..)
SELECT EMP_ID,EMP_NAME,EMP_NO,
DECODE (SUBSTR(EMP_NO,8,1),'1','남','2','여','3','남','4','여')
FROM EMPLOYEE;
주민등록번호의 8번째 자리 (첫 번째 뒷자리숫자)가 1 혹은 3일 경우 '남'으로 띄워주고
2 또는 4일 경우 '여'로 나타낸다. 각각의 값에 따라 분류해주는 유용한 함수이다.
#CASE WHEN THEN
CASE
WHEN 조건식1 THEN 결과값1
WHEN 조건식2 THEN 결과값2
...
ELSE 결과값
END
조건식에 해당하는 케이스에 따라 결과값을 추출한다.
'SQL' 카테고리의 다른 글
| 정규화에 대하여 (4) | 2025.05.01 |
|---|---|
| 기본 키(primary key)와 외래 키(foreign key) (0) | 2025.05.01 |
| DDL(CREATE)+1시간 동안 오류를 못 찾은 ORA-00907: 누락된 우괄호.. (3) | 2024.12.23 |
| JOIN (0) | 2024.12.18 |
| 함수(FUNCTION) (0) | 2024.12.18 |