brunch

You can make anything
by writing

C.S.Lewis

by 우여 Dec 10. 2023

비전공자의 SQL 공부 기록용 (2)

비전공자의 공부

5. 중복된 데이터를 제거해서 출력하기 - DISTINCT
같은 내용이 반복될 때 중복된 데이터를 제거하고 출력하려면 'DISTINCT' 키워드 또는 'UNIQUE' 키워드를 이용하면 됩니다. 칼럼명 앞에 DISTINCT 또는 UNIQUE를 작성하고 실행하면 중복행이 제거되고 UNIQUE 한 값만 출력됩니다.

--

SELECT DISTINCT (또는 UNIQUE) 칼럼 1
FROM 테이블 명;

--



6. 데이터를 정렬해서 출력하기 - ORDER BY
데이터를 정렬해서 출력하려면 ORDER BY절을 사용하면 됩니다. ORDER BY 절 다음에 정렬하고자 하는 데이터의 칼럼명을 기술하고, 정렬 방식(오름차순, 내림차순)에 대한 옵션을 칼럼명 다음에 작성합니다

* 칼럼명 옆에 정렬 옵션을 지정하지 않으면 기본값으로 오름차순으로 정렬합니다 (default = ASC)

-- 오름차순
SELECT 칼럼 1, 칼럼 2
FROM 테이블명
ORDER BY 칼럼 1 ASC(또는 ASCENDING);

-- 내림차순
SELECT 칼럼 1, 칼럼 2
FROM 테이블명
ORDER BY 칼럼 1 DESC(또는 DESCENDING)

칼럼별칭 사용 가능
ORDER BY 절은 SQL 작성 시 가장 마지막에 작성하며 오라클이 실행할 때도 가장 마지막에 실행합니다. 때문에 SELECT절에서 사용한 칼럼별칭을 ORDER BY절에서 사용할 수 있습니다.
--
SELECT ENAME, SAL*(1+0.5) AS 보너스
FROM EMP
ORDER BY 보너스 ASC;
--
 
정렬 기준 2개 이상 선택 가능
ORDER BY절에는 다음과 같이 칼럼을 여러 개 작성할 수 있습니다.
--
SELECT ENAME, DEPTNO, SAL
FROM EMP
ORDER BY DEPTNO ASC, SAL DESC;
--
위 SQL ORDER BY절에서 가장 먼저 부서 번호(DEPTNO)를 오름차순으로, 월급(SAL)을 내림차순으로 정의하고 있다. 따라서 결과는 다음과 같이 부서 번호를 먼저 오름차순으로 정렬하고, 부서 번호를 오름차순으로 정렬된 것을 기준으로 월급을 내림차순으로 정렬하고 있다.


칼럼명 대신 번호 사용 가능
ORDER BY절에 칼럼명 대신 숫자를 적어줄 수도 있다. 여기서 사용하는 숫자는 SELECT절 칼럼의 순서이다.
--
SELECT ENAME, DEPTNO, SAL
FROM EMP
ORDER BY 2 ASC, 3 DESC;

--



7. WHERE절 배우기 (숫자 데이터 검색)
WHERE 절은 검색하기 원하는 조건을 작성하여 데이터를 검색한다. WHERE절의 검색 조건으로 사용하는 비교 연산자는 다음과 같다.


1) 비교연산자
> 는 크다
< 는 작다
>= 는 크거나 같다
<= 는 작거나 같다
= 는 같다
!= , ^= , <>는 같지 않다


2) 기타 비교 연산자
BETWEEN AND는 ~사이에 있는
LIKE는 일치하는 문자패턴 검색
IS NULL 은 NULL 여부
IN 은 값 리스트 중 일치하는 값 검색


별칭을 쓸 때 주의할 점
-- 부적합한 식별자오류
SELECT ENAME, JOB, SAL AS '월급'
FROM EMP
WHERE 월급 = 3000;
--
SQL이 작성되는 순서는 SELECT - FROM - WHERE 순이지만 실제로 실행되는 순서는 FROM - WHERE - SELECT로, 오라클은 FROM 절을 실행하고 나서 WHERE 절을 실행하기 때문에 WHERE절에서 별칭을 쓸 경우 에러가 발생합니다. FROM 절을 실행하면서 데이터베이스에서 EMP테이블을 가져오고 WHERE을 실행하면서 EMP테이블에서 한글로 된 '월급'칼럼을 찾아보지만 없기 때문에 부적합한 식별자라고 수행되며 오류가 발생합니다.



8. WHERE절 배우기 (문자와 날짜 검색)
WHERE절에서 문자와 날짜에 대한 조건을 제시할 경우 숫자와 다르게 따옴표('')로 감싸 주어야 합니다. 이는 따옴표 안에 있는 것이 숫자가 아닌 문자임을 오라클에게 알려주는 것입니다.

날짜 데이터 검색의 경우 현재 접속한 세션의 날짜 형식에 맞춰 작성해주어야 합니다. 예를 들어 '81/11/17'의 경우 연도/월/일로 된 날짜 형식입니다. 그러나 우리나라와는 다르게 미국이나 영국의 날짜 형식은 '일/월/연도' 형식이므로 '17/11/81'로 검색해야 합니다. 나라마다 날짜 형식이 다르기 때문에 날짜 검색을 하기 전에 현재 접속한 세션의 날짜 형식을 확인하는 것이 필요합니다.
현재 접속한 세션의 날짜 형식은 NSL_SESSION_PARAMETERS를 조회하여 확인합니다.
--
SELECT *
FROM NLS_SESSION_PARAMETERS
WHERE PARAMETER = 'NLS_DATE_FORMAT';

--

YYYY 연도 4자리

YY 또는 RR 연도 2자리

MM 달의 2자리 값

MON 달의 영문 약어

DD 숫자 형식의 일

DAY 요일

DY 요일 약어

D 요일의 숫자


YY와 RR의 차이
여기서 YY와 RR은 서로 다릅니다. 그 이유를 알기 위해  예를 들어보면 81년도를  YY로 검색할 경우, YY는 81년을 2081년으로 인식하고 검색합니다. 즉 YY는 81년도를 현재 세기의 연도로 인식하기 때문에 2081년을 검색합니다.
하지만 81년을 RR로 검색할 경우 현재 세기를 기준으로 이전 세기로 인식하기 때문에 81년을 1981년으로 인식하고 검색합니다. 따라서 RR/MM/DD 형태일 때와 YY/MM/DD일 때의 검색은 완전히 다른 시기를 검색하는 것과 같습니다.


9. 산술 연산자 배우기 - * / + -
산술 연산자의 경우 일반적인 계산과 같이 우선순위가 있기 때문에 곱하기와 더하기가 같은 식에 있으면 곱하기부터 실행합니다. 만약 더하기부터 실행하고 싶다면 괄호를 사용하면 됩니다.

--

SELECT 300+200*2 FROM DUAL;  -> 700

SELECT (300+200)*2 FROM DUAL; -> 1000

--



작가의 이전글 비전공자의 SQL 공부 기록용 (1)
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari