게으른 완벽주의자의 개발자 도전기
DataBase기초수업(AS, COUNT, NVL, BETWEEN, 문자열 연결(||), IN, 오름차순, 내림차순, 와일드카드) 본문
SELECT에 여러가지 방법을 활용해서 데이터 도출하는 법을 알아보고자 한다.
1. AS 별칭사용
AS를 사용하여 조회 컬럼의 이름을 변경할 수 있다
즉, AS 별칭명으로 사용하며, AS를 생략해도 적용 된다.
★이 별칭은 현재 조회된 테이블에만 적용되는 것
모든 사원의 사번, 이름, 급여, 연봉(급여*12)을 조회
SELECT EMPNO 사번, ENAME 사원명, SAL AS 월급, SAL*12 AS 연봉
FROM EMP;
2. NULL
NULL정해지지 않은 것
-> 연산 시 NULL값이 연산되면 연산 결과는 무조건 NULL이 나온다.
SELECT SAL*12 + COMM FROM EMP;
COMM(인센티브)값에는 0 300 NULL값이 섞여져 있다.
이 경우 연산을 하면 NULL값이 속해져 있는 데이터는 NULL값이 나오는걸 볼 수 있다.
1) COUNT(컬럼명)
COUNT로 컬럼명을 감싸면 NULL값을 제외하고 COUNT된 값이 나온다.
SELECT COUNT(EMPNO) FROM EMP;
SELECT SUM(SAL) FROM EMP;
i) 전체 직원의 인센티브의 평균을 구해라
SELECT SUM(COMM)/COUNT(COMM) AS AVG FROM EMP;
2) NYL(컬럼명, 원하는 값)
NVL(컬럼명,원하는 값) : NULL값을 원하는 값으로 조회 시 사용한다.
SELECT COMM, NVL(COMM, 0) FROM EMP;
-> 컬럼의 값이 NULL일 때는 NULL을 0으로 나오게 하겠다..
게시글이 하나도 없을 때(NULL)는 글번호를 1로 조회하게 만드세요
SELECT NVL(MAX(BOARD_NUM), 0) +1 FROM BOARD;
3. 문자열 연결 (||)
사번과 사원명을 연결하여 하나의 컬럼으로 조회해라 EX)1001_김사랑
SELECT EMPNO || '_' || ENAME FROM EMP;
하이픈 부분은 ' ' 로 연결한다
4. 중복없이 조회 DISTINCT 콜론명
--부서번호가 10 20 30 밖에 없을 때, 중복 없이 조회하고자 한다
SELECT DISTINCT DEPTNO FROM EMP;
5. BETWEEN A AND B A와 B 사이값
급여가 300~600사이이고, 커미션이 NULL인 사원의 모든 정보 조회
SELECT * FROM EMP WHERE SAL BETWEEN 300 AND 600 AND COMM IS NULL;
★쌤께서 실무에선 잘 안쓴다고 한다. WHY? 처리 속도가
SAL >=300 AND SAL <=600 이게 훨씬 더 빠르기 때문이라고 했다.
6. OR 이거나 IN(A, B, C)
급여가 300이거나 500이거나 600인 사원의 모든 정보 조회
SELECT * FROM EMP WHERE SAL=300 OR SAL=500 OR SAL=600;
SELECT * FROM EMP WHERE SAL IN(300, 500, 600);
(실무에선 둘다 사용한다. )
7. 괄호로 순서 정해주기
급여가 300이거나 500인 사원 중 커미션이 NULL인 사원 모든 정보 조회
SELECT * FROM EMP WHERE (SAL=300 OR SAL=500) AND COMM IS NULL;
★AND OR 쓸 때 먼저 쓸 연산 괄호로 정해줘야 한다.
8. 정렬하기( 오름차순ASC, 내림차순DESC)
급여가 높은 순으로 조회하라
SELECT * FROM EMP
ORDER BY SAL DESC;
내림차순(밑으로 갈수록 값이 점점 작아진다. 생략해서 사용불가 )
급여가 낮은 순으로 조회하라
SELECT * FROM EMP
ORDER BY SAL ASC;
오름차순(밑으로 갈수록 값이 점점 커진다. 생략해서 사용 가능)
조건의 순서
-> SELECT FROM WHERE 정렬 ORDER BY 컬럼명 ASC(오름차순, 생략가능) DESE(내림차순)
부서번호가 30이 아니고, 급여가 300이상이면서 직급은 사원인 사원들의
사번, 이름, 급여 조회하되, 이름기준 오름차순으로 정렬
SELECT EMPNO, ENAME, SAL
FROM EMP
WHERE DEPTNO !=30
AND SAL>=300
AND JOB ='사원'
ORDER BY ENAME ASC;
모든 사원의 정보를 조회하되, 직급기준 오름차순으로 정렬하고,
만약 직급이 같다면 급여기준 내림차순으로 정렬하라
(정렬을 연결하고자 할 땐 , 로 연결한다.)
SELECT * FROM EMP
ORDER BY JOB ASC, SAL DESC;
9. 와일드카드 ( % , _ )
_ : 하나의 어떤 글자를 의미
'김_' : 김으로 시작하는 두글자
'__김' : 김으로 끝나는 세글자
'_김__' : 두번째 글자가 김인 네글자
% : 0개 이상의 어떤 글자를 의미
'김%' : 김으로 시작하는 모든 글자 (글자수 제한 없다. 김 한글자도 가능하다.)
'_김%' : 두번째 글자가 김인 모든 글자
-- 사원 이름에 '김'이라는 글자가 들어간 사원의 모든 정보 조회
SELECT *
FROM EMP
WHERE ENAME LIKE '%김%';
--김이 포함되지 않는 사원
SELECT *
FROM EMP
WHERE ENAME NOT LIKE '%김%';
'SQL' 카테고리의 다른 글
ITEM_CODE(ITEM_001)쿼리로 만들기(LPAD, TO_NUMBER, SUBSTR, MAX, NVL, || 활용하기) (0) | 2022.08.13 |
---|---|
오라클SQL Developer실행안됨 (windows를 복원하는 중) (0) | 2022.08.06 |
DataBase 주요 함수 정리 (0) | 2022.08.03 |
Data Base 기초 수업(게시글 번호 부여, 게시글 날짜 부여) (0) | 2022.07.30 |
DataBase 기초수업 (select, delete, update, 테이블 생성) (0) | 2022.07.30 |