본문 바로가기

Study/OracleDB

9강 오라클 SQL Like, sort 정렬

728x90

Like, 정렬

 이 장에서 다룰 내용

1. like

2. 정렬을 위한 ORDER BY 절

01. LIKE 연산자와 와일드카드

■ LIKE 연산자는 검색하고자 하는 값을 정확히 모를 경우에도 검색하도록 하기 위해서 와일드카드와 함께 사용하여 원하는 내용을 검색하도록 합니다. 다음은 LIKE 연산자의 형식입니다.

형식 column_name LIKE pattern

■ LIKE 다음에는 pattern을 기술해야 하는데 pattern에 다음과 같이 두 가지 와일드카드가 사용됩니다.

와일드카드 의미
% 문자가 없거나, 하나 이상의 문자가 어떤 값이 와도 상관없다.
- 하나의 문자가 어떤 값이 와도 상관없다.

■ 찾으려는 이름이 F로 시작 하는 것은 알지만 그 뒤의 문자는 모를 경우 ename='F'로 검색하게 되면 될까요?

 - ename = 'F' 표현은 이름이 정확히 F인 사람만을 검색하겠다는 의미이기에 이름이 'F'로 시작하는 사원을 검색하지 못합니다.

■ 검색하고자 하는 값을 정확히 모를 경우 즉, 특정 문자 포함되기만 하고 그 이전이나 이후에 어떤 문자가 몇 개가 오든지 상관없다는 의미를 표현하기 위해서는 LIKE 연산자와 함께 %를 사용해야 합니다.

SELECT *
FROM EMP
WHERE ENAME LIKE 'F%'
                    -- 'F'가 포함되고 이후 어떤 문자가 몇개가 오든지 상관없음.

select * from emp where ename like 'F%';

* 탄탄히 다지기

탄탄히 다지기(1)

6. select * from emp where ename like 'J%';

7. select * from emp where ename like '%A%';

-- A% A로 시작하는 모든것.

-- %A% A가 포함되어 있는 모든 것.

 

1-1. 와일드카드(%) 사용하기

■ 이번에는 이름 중 A를 포함하는 사원을 검색해봅시다.

■ 문자 A 앞뒤에 %를 기술하면 문자열 중간에 A 문자만 있으면 앞뒤에 어떤 문자열이 몇 개가 오든 상관없이 찾습니다.

SELECT *
FROM EMP
WHERE ENAME LIKE '%A%';

%A%(와일드카드 문자)

■ 이번에는 문자열이 앞에 어떤 문자열이 몇 개가 오든 상관없이 N으로 끝나는 데이터를 찾아봅시다.

SELECT *
FROM EMP
WHERE ENAME LIKE '%N';
                                -- %N으로 끝나는 데이터.

%N

이해. 와일드 카드는 앞에쓰면 ~ 끝나는 데이터, 뒤에쓰면 ~ 시작하는 데이터, 앞뒤로쓰면 사이에 어떤 문자를 지칭한다!

* 탄탄히 다지기

탄탄히 다지기(2)

7.1 select empno, ename from emp where ename like 'K%';

7.2 select empno, ename from emp where ename like '%K%';

7.3 select empno, ename from emp where ename like '%K';

 

1-2. 와일드카드(_) 사용하기

■ _ 역시 %와 마찬가지로 어떤 문자가 오든 상관없다는 의미로 사용되는 와일드카드입니다.

■ 차이점은 %는 몇 개의 문자가 오든 상관없지만 _는 단 한 문자에 대해서만 와일드 카드 역활을 합니다.

■ 다음은 이름의 두 번째 글자가 A인 사원을 찾는 예제입니다.

SELECT *
FROM EMP
WHERE ENAME LIKE '_A%';
-- _A% 두 번째 글자가 A인 사원을 찾는다.

_(와일드 카드) 사용법, 두번째 글자 찾기.

■ 세 번째 글자가 A인 자료를 검색하려면 __A처럼 기술해야 합니다.

SELECT *
FROM EMP
WHERE ENAME LIKE '__A%';
-- __A% 세 번째 글자가 A인 사원을 찾는다.

세 번째 글자 찾기.

1-3. NOT LIKE 연산자

  이름에 A를 포함하지 않은 사람만을 검색하려고 할 경우에 NOT LIKE 연산자를 사용합니다.

SELECT *
FROM EMP
WHERE ENAME NOT LIKE '%A%';
-- A를 포함하지 않은 사람만을 검색!

NOT LIKE(제거)

select * from emp where ename not like '%A%';

 

1-4. NULL을 위한 연산자

■ 사원 테이블의 커미션 컬럼에 널이 저장되어 있으므로 = 연산자로 커미션을 받지 않는 사원에 대한 검색해 봅시다.

SELECT *
FROM EMP
WHERE COMM=NULL;

■ NULL 값을 가진 데이터와 비교 연산한 결과는 다음과 같습니다.

왜냐하면 NULL이 저장되어 있는 경우에는 = 연산자로 판단할 수 없기 때문입니다.

=으로 NULL 유무 판단 불가!

 

1-5. IS NULL과 IS NOT  NULL

■ 어떤 컬럼을 NULL 즉, 모르는 값과 같다(=)라는 것은 의미상으로 말이 되지 않기 때문에 = 대신 IS NULL 연산자를 사용해야 합니다.

■ IS NULL 연산자 역시 조건절에 사용되면 대상 컬럼과 연산자, 비교할 값 세부분으로 구성되어야 합니다.

형식 대상컬럼 IS (연산자) NULL(비교값)

■ 이번에는 IS NULL 연산자를 사용하여 커미션을 받지 않는 사원을 검색해 봅시다.

SELECT *
FROM EMP
WHERE COMM IS NULL;
-- COMM이 NULL인 데이터 출력

■ 이번에는 커미션을 받는 사원에 대해 검색해 봅시다. 문장대로 해석하면 커미션(COMM) 칼럼이 NULL 아닌 자료만 추출하면 되므로 IS NOT NULL 연산자를 사용하면 됩니다.

SELECT *
FROM EMP
WHERE COMM IS NOT NULL;
-- COMM이 NULL이 아닌 데이터만 출력

 

* 탄탄히 다지기

탄탄히 다지기(3)

select * from emp where MGR is null;

2. 정렬을 위한 ORDER BY 절

■ 정렬이란 크기 순서대로 나열하는 것을 의미합니다.

■ 오름차순(ascending어센딩) 정렬 방식

 ▪ 작은 것이 위에 출력되고 아래로 갈수록 큰 값이 출력

■ 내림차순(descending디센딩) 정렬 방식

 ▪ 큰 값이 위에 출력되고 아래로 갈수록 작은 값이 출력

■ 로우를 정렬하기 위해서는 SELECT 문에 ORDER BY 절을 추가하고 어떤 컬럼을 기준으로 어떤 정렬을 할 것인지를 결정해야 합니다.

  ASC(오름차순) 어센딩 DESC(내림차순) 디센딩
숫자 작은 값부터 정렬 1, 2, 3, 4, 5 큰 값부터 정렬 5, 4, 3, 2, 1
문자 사전 순서로 정렬 사전 반대 순서로 정렬
날짜 빠른 날짜 순서로 정렬 늦은 날짜 순서로 정렬
NULL 가장 마지막에 나온다. 가장 먼저 나온다.

 

2-1. 오름차순 정렬을 위한 ASC

  오름차순 정렬은 작은 값부터 큰 값으로 정렬하는 것을 의미합니다.(예:1~9, 'A' ~ 'Z')이를 위해서는 ASC를 칼럼 다음에 기술해야 하는데 만일 생략하게 되면 디폴트로 ASC로 지정되어 있기 때문에 오름차순으로 출력됩니다.

■ 다음은 급여 컬럼을 기준으로 오름차순으로 정렬한 예입니다.

SELECT *
FROM EMP
ORDER BY SAL ASC;

■ 정렬방식을 지정하지 않은 경우에는 디폴트로 오름차순으로 정렬합니다.

SELECT *
FROM EMP
ORDER BY SAL;

 

* 탄탄히 다지기

탄탄히 다지기(4)

select empno, ename, job, hiredate from emp order by hiredate;

-- 안써도 디폴트가 asc

select empno, ename, job, hiredate from emp order by hiredate asc;

 

2-2. 내림차순 정렬을 위한 DESC

■ 내림차순 정렬은 큰 값부터 작은 값으로 정렬을 하는 것이다.(예: 9~1, 'Z'~'A')

■ 이번에는 급여를 많이 받은 사람부터 적게 받는 사람 순으로 순차적으로 출력해봅시다.

SELECT *
FROM EMP
ORDER BY SAL DESC;

  큰 값이 위에 출력되고 아래로 갈수록 작은 값이 출력되도록 하려면 내림차순(descending)으로 정렬해야 하기 때문에 칼럼 다음에 DESC를 기술해야 합니다.

 

* 탄탄히 다지기

10. EMP 테이블의 자료를 사원번호를 기준으로 내림차순으로 정렬하여 사원번호와 사원명 칼럼을 표시하시오.

탄탄히 다지기(5)

select empno, ename from emp order by empno desc;

 

2-3. 문자 순으로 출력

■ 크기에 대한 비교는 수치 데이터 뿐만 아니라 문자 데이터나 날짜 데이터에 대해서도 가능합니다.

■ 문자 데이터의 경우 아스키 코드 값으로 저장되므로 아스키 코드 값을 기준으로 정렬됩니다.

■ 오름차순인 경우에는 A, B, ...Z 순으로 출력되고 내림차순인 경우에는 Z, Y, ...A 순으로 출력됩니다.

■ 다음은 사원의 이름을 알파벳 순(오름차순)으로 출력하는 예제입니다.

SELECT *
FROM EMP
ORDER BY ENAME;

 

2-4. 날짜 순으로 출력

■ 날짜의 경우에도 오름차순 혹은 내림차순으로 출력할 수 있습니다.

■ 오름차순으로 지정하면 가장 오래된 과거의 시점이 가장 위에 출력되고 아래로 갈수록 최근 시점이 출력됩니다.

■ 내림차순인 경우에는 최근 시점부터 출력합니다.

■ 다음은 가장 최근에 입사한 사람부터 출력하는 예제입니다.

SELECT *
FROM EMP
ORDER BY HIREDATE DESC;

 

2-5. 정렬 방식에 여러 가지 조건 제시

■ 급여를 많아 받는 사람부터 적게 받는 사람 순으로 순차적으로 출력하는 결과 화면을 살펴보면 동일한 급여를 받는 사람이 존재합니다.

■ 급여가 같은 사람이 존재할 경우 이름의 철자가 빠른 사람부터 출력되도록 하려면 정렬 방식을 여러 가지로 지정해야 합니다.

SELECT *
FROM EMP
ORDER BY SAL DESC, ENAME ASC;
-- SAL은 내림차순으로, ENAME 오름차순으로 정렬

* 탄탄히 다지기

탄탄히 다지기(6)

select deptno, hiredate from emp order by deptno asc, hiredate desc;

 

학습정리.

LIKE 연산자는 검색하고자 하는 값을 정확히 모를 경우에도 검색 가능하도록 하기 위해서 와일드카드와 함께 사용하여 원하는 내용을 검색하도록 합니다. 다음은 LIKE 연산자의 형식입니다.

형식 column_name like patten

LIKE 다음에는 patten을 기술해야 하는데 pattern에 다음과 같이 두 가지 와일드카드가 사용됩니다.

와일드카드 의미
% 문자가 없거나, 하나 이상의 문자가 어떤 값이 와도 상관없다.
- 하나의 문자가 대해서만 어떤 값이 와도 상관없다.

 

정렬이란 크기 순서대로 나열하는 것을 의미합니다.

오름차순(ascending) 정렬 방식

 - 작은 것이 위에 출력되고 아래로 갈수록 큰 값이 출력

내림차순(descending) 정렬 방식

 - 큰 값이 위에 출력되고 아래로 갈수록 작은 값이 출력

로우를 정렬하기 위해서는 SELECT 문에 ORDER BY 절을 추가하고 어떤 컬럼을 기준으로 어떤 정렬을 할 것인지를 결정해야 합니다.

  ASC(오름차순) 어센딩 DESC(내림차순) 디센딩
숫자 작은 값부터 정렬 1, 2, 3, 4, 5 큰 값부터 정렬 5, 4, 3, 2, 1
문자 사전 순서로 정렬 사전 반대 순서로 정렬
날짜 빠른 날짜 순서로 정렬 늦은 날짜 순서로 정렬
NULL 가장 마지막에 나온다. 가장 먼저 나온다.

 

반응형