-- 001. 테이블에서 특정 열 선택하기
-- 사원 테이블에서 사원 번호와 이름과 월급을 출력해 보겠습니다.
SELECT empno, ename, sal, deptno
FROM emp;
-- 002. 테이블에서 모든 열 선택하기
-- 사원 테이블을 모든 열(column)들을 전부 출력해 보겠습니다.
SELECT *
FROM emp;
-- 테이블의 모든 컬럼을 출력하고 맨 끝에 다시 한번 특정 컬럼을 한번 더 출력해야 하는 경우가 있습니다.
-- 이 경우 *(별표) 앞에 '테이블명.'을 붙여 주어 작성하고 그 다음 한번 더 출력하고자 하는 컬럼명을 작성합니다.
SELECT dept.*, deptno FROM dept;
-- 003. 컬럼 별칭을 사용하여 출력되는 컬럼명 변경하기
-- 사원 테이블의 사원 번호와 이름과 월급을 출력하는데 컬럼명을 한글로 '사원 번호', '사원 이름'으로 출력해 보겠습니다.
-- 대소문자를 구분하여 컬럼 별칭을 출력하고자 할 때는 별칭 양쪽에 더블 쿼테이션 마크를 감싸 줘야합니다.
-- 컬럼 별칭에 더블 쿼테이션 마크를 사용해야 하는 경우는 다음과 같습니다.
-- 1. 대소문자를 구분하여 출력할 때
-- 2. 공백문자를 출력할 때
-- 3. 특수문자를 출력할 때($,_,#만 가능)
SELECT empno as 사원번호, ename as 사원이름, sal as "Salary"
FROM emp;
-- 수식을 사용할 경우 출력되는 컬럼명도 수식으로 출력됩니다. 그런데 수식명이 아닌 한글'월급'으로 컬럼명을 출력하고 싶다면
-- 수식 뒤에 as를 작성하고 컬럼 별칭을 사용하면 됩니다.
SELECT ename, sal *(12 + 3000) as 월급
FROM emp
ORDER BY 월급 desc;
-- 004. 연결 연산자 사용하기(||)
-- 사원 테이블의 이름과 월급을 서로 붙여서 출력해 보겠습니다.
SELECT ename || sal
FROM emp;
-- 연결 연산자를 이용하면 컬럼과 컬럼을 서로 연결해서 출력할 수 있습니다.
SELECT ename || '의 월급은 ' || sal || '입니다' as 월급정보
FROM emp;
SELECT ename ||'의 직업은' || job || '입니다' as 직업정보
FROM emp;
-- 005. 주옥된 데이터를 제거해서 출력하기(DISTINCT)
-- 사원 테이블에서 직업을 출력하는데 중복된 데이터를 제외하고 출력해 보겠습니다.
SELECT DISTINCT job
FROM emp;
-- DISTINCT 대신 UNIQUE를 사용해도 됩니다.
SELECT UNIQUE job
FROM emp;
-- 006. 데이터를 정렬해서 출력하기(ORDER BY)
-- 실행순서는 다음과 같다. 1) FROM 2) SELECT 3) ORDER BY
-- 이름과 월급을 출력하는데 월급이 낮은 사원부터 출력해 보겠습니다.
SELECT ename, sal
FROM emp
ORDER BY sal asc;
-- ORDER BY절에는 다음과 같이 컬럼을 여러 개 작성할 수도 있습니다.
SELECT ename, sal as 월급
FROM emp
ORDER BY 월급 asc;
-- 부서 번호를 먼저 asceding 하게 정렬하고, 부서 번호를 ascending하게 정렬된 것을 기준으로 월급을 desceding하게 정렬하고 있습니다.
SELECT ename, deptno, sal
FROM emp
ORDER BY deptno asc, sal desc;
-- ORDER BY절에 컬럼명 대신 숫자를 적어줄 수도 있습니다.
SELECT ename, deptno, sal
FROM emp
ORDER BY 2 ASC, 3 DESC;
-- 007. WHERE절 배우기 (1 - 숫자 데이터 검색)
-- 월급이 3000인 사원들의 이름, 월급, 직업을 출력해보겠습니다.
SELECT ename, sal, job
FROM emp
WHERE sal = 3000;
-- 월급이 3000 이상인 사원들의 이름과 월급을 출력하는 SQL 문장을 작성하면 다음과 같습니다.
SELECT ename AS 이름, sal AS 월급
FROM emp
WHERE sal >= 3000;
-- 08. WHERE절 배우기 (2 - 문자와 날짜 검색)
-- 이름이 SCOTT인 사원의 이름, 월급, 직업, 입사일, 부서 번호를 출력해 보겠습니다.
SELECT ename, sal, job, hiredate, deptno
FROM emp
WHERE ename = 'SCOTT';
-- 81년 11월 17일에 입사한 사원의 이름과 입사일을 출력합니다.
SELECT ename, hiredate
FROM emp
WHERE hiredate = '81/11/17';
-- 현재 접속한 세션의 날짜 형식은 NLS_SESSION_PARAMETERS
SELECT *
FROM NLS_SESSION_PARAMETERS
WHERE PARAMETER = 'NLS_DATE_FORMAT';
-- ALTER SESSION명령어는 현제 내가 접속한 세션의 파라미터를 변경하는 명령어입니다.
-- 세션이란 데이터베이스 유저로 로그인해서 로그아웃할 때까지의 한 단위를 말합니다.
-- 바로 이 세션의 파라미터인 NLS_DATE_FORMAT은 현재 세션에서만 유효한 파라미터입니다. SCOTT으로 접속한 상태라면 다시 로그아웃을 했다가 접속하면 NLS_DATE_FORMAT은 RR/MM/DD인 기본값으로 복귀되어 세팅됩니다.
ALTER SESSION SET NLS_DATE_FORMAT = 'RR/MM/DD';
-- 09. 산술 연산자 배우기(*,/,+,-)
-- 연봉이 3600 이상인 사원들의 이름과 연봉을 출력해 보겠습니다.
SELECT ename, sal*12 AS 연봉
FROM emp
WHERE sal*12 >= 36000;
-- 부서 번호가 10번인 사원들의 이름, 월급, 커미션, 월급 + 커미션을 출력하는 SQL입니다.
SELECT ename, sal, comm, sal + comm
FROM emp
WHERE deptno = 10;
-- 커미션을 NULL이 아닌 숫자로 변경해주어야 월급 + 커미션 값이 출력될 수 있습니다.
-- NVL은 NULL 데이터를 처리하는 함수입니다.
SELECT ename, sal, comm, sal + nvl(comm, 0)
FROM emp
WHERE deptno = 10;
-- 10~12. 비교 연산자 배우기
-- 월급이 1200 이하인 사원들의 이름과 월급, 직업, 부서 번호를 출력해 보겠습니다.
SELECT ename, sal, job, deptno
FROM emp
WHERE sal <= 1200;
-- 월급이 1000에서 3000 사이인 사원들의 이름과 월급을 출력해 보겠습니다.
-- BETWEEN 하한값 AND 상한값 순으로 작성해야 검색이 됩니다.
SELECT ename, sal
FROM emp
WHERE sal BETWEEN 1000 AND 3000;
SELECT ename, sal
FROM emp
WHERE (sal >= 1000 AND sal <= 3000);
-- 다음의 쿼리는 월급이 1000에서 3000사이가 아닌 사원들의 이름과 월급을 조회합니다.
SELECT ename, sal
FROM emp
WHERE sal NOT BETWEEN 1000 AND 3000;
SELECT ename, sal
FROM emp
WHERE (sal < 1000 OR 3000 > sal);
-- 1982년도에 입사한 사원들의 이름과 입사일을 조회하는 쿼리입니다.
SELECT ename, hiredate
FROM emp
WHERE hiredate BETWEEN '82/01/01' AND '82/12/31';
-- 이름의 첫 글자가 S로 시작하는 사원들의 이름과 월급을 출력해 보겠습니다.
-- 와일드 카드는 이 자리에 어떠한 철자가 와도 상관없고 철자의 개수가 몇 개가 되든 관계없다는 뜻입니다.
-- %는 와일드 카드(Wild Card)라고 합니다. 이퀄 연산자(=)가 아닌 LIKE 연산자를 사용해야 합니다.
SELECT ename, sal
FROM emp
WHERE ename LIKE 'S%';
-- 이름의 두 번째 철자가 M인 사원의 이름을 출력합니다.
-- 언더바(_)는 어떠한 철자가 와도 관계없으나 자리수는 한 자리여야 된다는 의미입니다.
SELECT ename
FROM emp
WHERE ename LIKE '_M%';
-- 이름의 끝 글자가 'T'로 끝나는 사원들의 이름을 출력합니다.
SELECT ename
FROM emp
WHERE ename LIKE '%T';
-- 이름에 A를 포함하고 있는 사원들의 이름을 출력합니다.
SELECT ename
FROM emp
WHERE ename LIKE '%A%';
-- 13. 비교 연산자 배우기 (IS NULL)
-- 커미션이 NULL인 사원들의 이름과 커미션을 출력해 보겠습니다.
SELECT ename, comm
FROM emp
WHERE comm IS NULL;
-- 14. 비교 연산자 배우기 (IN)
-- 직업이 SALESMAN, ANALYST, MANAGER인 사원들의 이름, 월급, 직업을 출력해 보겠습니다.
SELECT ename, sal, job
FROM emp
WHERE job in ('SALESMAN', 'ANALYST', 'MANAGER');
SELECT ename, sal, job
FROM emp
WHERE (job = 'SALESMAN' or job ='ANALYST' or job = 'MANAGER');
SELECT ename, sal, job
FROM emp
WHERE job NOT in ('SALESMAN', 'ANALYST', 'MANAGER');
SELECT ename, sal, job
FROM emp
WHERE (job != 'SALESMAN' and job != 'ANALYST' and job != 'MANAGER');
-- 15. 논리 연산자 배우기 (AND, OR, NOT)
-- 직업이 SALESMAN이고 월급이 1200 이상인 사원들의 이름, 월급, 직업을 출력해 보겠습니다.
SELECT ename, sal, job
FROM emp
WHERE job = 'SALESMAN' and sal >= 1200;
'DB' 카테고리의 다른 글
[데이터모델링] 1.4. 데이터베이스 네이밍 규칙 (0) | 2024.10.29 |
---|---|
[데이터 모델링] 1.3.PK(기본키),FK(외래키) (0) | 2024.10.29 |
[데이터모델링] 1.2. 관계형 데이터베이스(RDBMS)의 기본 구성 (2) | 2024.10.29 |
[데이터모델링] 1.1. 데이터베이스 모델링(Database Modeling)이란? (0) | 2024.10.29 |
[초보자를 위한 SQL200제] Chapter2 문제풀이 (0) | 2024.02.08 |