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%';
* 탄탄히 다지기
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%'; |
■ 이번에는 문자열이 앞에 어떤 문자열이 몇 개가 오든 상관없이 N으로 끝나는 데이터를 찾아봅시다.
예 | SELECT * FROM EMP WHERE ENAME LIKE '%N'; -- %N으로 끝나는 데이터. |
이해. 와일드 카드는 앞에쓰면 ~ 끝나는 데이터, 뒤에쓰면 ~ 시작하는 데이터, 앞뒤로쓰면 사이에 어떤 문자를 지칭한다!
* 탄탄히 다지기
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를 포함하지 않은 사람만을 검색! |
select * from emp where ename not like '%A%';
1-4. NULL을 위한 연산자
■ 사원 테이블의 커미션 컬럼에 널이 저장되어 있으므로 = 연산자로 커미션을 받지 않는 사원에 대한 검색해 봅시다.
예 | SELECT * FROM EMP WHERE COMM=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이 아닌 데이터만 출력 |
* 탄탄히 다지기
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; |
* 탄탄히 다지기
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 테이블의 자료를 사원번호를 기준으로 내림차순으로 정렬하여 사원번호와 사원명 칼럼을 표시하시오.
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 오름차순으로 정렬 |
* 탄탄히 다지기
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 | 가장 마지막에 나온다. | 가장 먼저 나온다. |
'Study > OracleDB' 카테고리의 다른 글
11강 오라클 SQL 문자함수 (0) | 2022.09.06 |
---|---|
10강 오라클 SQL 주요함수, 숫자함수 (3) | 2022.09.06 |
8강 오라클 논리연산자, Between in (1) | 2022.09.06 |
7강 오라클 SQL 조건연산자 (4) | 2022.09.05 |
6강 오라클 SQL 연산자 (0) | 2022.09.05 |