[초보자를 위한 SQL 200제]
1. 특정 열 선택하기
SELECT empno, ename, sal
FROM emp;
- 모든 쿼리 끝에 세미콜론
2. 테이블에서 모든 열 출력하기
SELECT *
FROM emp;
- *: 모든 열 선택
- 모든 열 출력하고 맨 끝에 다시 한 번 특정 컬럼 출력해야 하는 경우) SELECT table.*, column FROM table;
(ex) SELECT dept.*, deptno FROM dept;
3. 컬럼 별칭을 사용하여 출력되는 컬럼명 변경하기
SELECT empno as 사원 번호, ename as 사원 이름, sal as "Salary"
FROM emp;
- 컬럼명 as 컬럼 별칭(alias)
- 컬럼 별칭에 " " 로 감싸줘야 하는 경우
- 대소문자 구분하여 출력할 때
- 공백문자 출력할 때
- 특수문자 출력할 때 ($, _, # 만 가능)
- 수식을 사용하여 결과 출력할 때 별칭 유용함 -> ORDER BY 절 사용할 때 유용
#(ex) 월급 = sal * (12 + 3000)
SELECT ename, sal * (12 + 3000) as 월급
FROM emp;
4. 연결 연산자 사용하기 ( || )
SELECT ename || sal
FROM emp;
- 컬럼과 컬럼 연결하여 출력
- (ex)
ENAME||SAL |
KING5000 |
BLAKE2850 |
JONE2975 |
SELECT ename || '의 월급은 ' || sal || '입니다.' as 월급정보
FROM emp;
월급정보 |
KING의 월급은 5000입니다. |
BLAKE의 월급은 2850입니다. |
JONE의 월급은 2975입니다. |
5. 중복된 데이터 제거해서 출력하기 (DISTINCT)
SELECT DISTINCT job
FROM emp;
SELECT UNIQUE job
FROM emp;
- 컬럼에 있는 데이터들 중 중복된 것은 하나씩만 출력 (UNIQUE한 값만 출력)
6. 데이터 정렬해서 출력하기 (ORDER BY)
SELECT ename, sal
FROM emp
ORDER BY sal asc;
- asc: 오름차순, desc: 내림차순
- ORDER BY 절은 작성 시에도, 실행 시에도 맨 마지막에 실행됨
-> SELECT 절에 사용한 컬럼 별칭을 ORDER BY 절에 사용할 수 있음
SELECT ename, sal as 월급
FROM emp
ORDER BY 월급 asc;
- ORDER BY 절에 컬럼 여러개 작성 가능
SELECT ename, deptno, sal
FROM emp
ORDER BY deptno asc, sal desc;
-> 먼저 deptno를 오름차순 정렬한 것을 기준으로, 같은 deptno 내에서는 sal 내림차순 정렬
- 컬럼명 대신 숫자로도 작성 가능 -> SELECT 절 컬럼 순서
7. WHERE 절 배우기
(1) 숫자 데이터 검색
ex) 월급이 3000인 직원들의 이름, 월급, 직업 출력
SELECT ename, sal, job
FROM emp
WHERE sal = 3000;
- 원하는 검색 조건을 WHERE 절에 작성하여 데이터 검색
- WHERE 절은 FROM 절 다음에 작성
- 비교 연산자
연산자 | 의미 |
> | 크다 |
< | 작다 |
>= | 크거나 같다 |
<= | 작거나 같다 |
= | 같다 |
!= | 같지 않다 |
^= | 같지 않다 |
<> | 같지 않다 |
BETWEEN AND | ~ 사이에 있는 |
LIKE | 일치하는 문자 패턴 검색 |
IS NULL | NULL값인지 여부 |
IN | 값 리스트 중 일치하는 값 검색 |
- ORACLE은 FROM절 -> WHERE절 -> SELECT절 순서로 실행하기 때문에 WHERE 절에 컬럼 별칭 사용하면 에러남
(2) 문자와 날짜 검색
(ex) 이름이 SCOTT인 사원의 이름, 월급, 직업, 입사일, 부서번호
SELECT ename, sal, job, hiredate, deptno
FROM emp
WHERE ename = 'SCOTT';
(ex) 81년 11월 17일에 입사한 사원의 이름과 입사일
SELECT ename, hiredate
FROM emp
WHERE hiredate = '81/11/17';
- 현재 접속한 세션의 날짜 형식에 맞춰 작성
# 현재 접속한 세션의 날짜 형식 확인
SELECT *
FROM NLS_SESSION_PARAMETERS
WHERE PARAMETER = 'NLS_DATE_FORMAT';
# 현재 접속한 세션의 파라미터 변경
ALTER SESSION SET NLS_DATE_FORMAT = 'YY/MM/DD';
9. 산술 연산자 배우기 (*, /, +, -)
(ex) 연봉이 36000 이상인 사람들의 이름과 연봉 출력
SELECT ename, sal*12 as 연봉
FROM emp
WHERER sal*12 >= 36000;
(ex) 부서 번호가 10번인 사람들의 이름, 월급, 커미션, 월급 + 커미션 출력
SELECT ename, sal, comm, sal + comm
FROM emp
WHERE deptno = 10;
- 산술식의 컬럼값이 NULL인 경우 결과값도 NULL
- NVL함수: 컬럼값이 NULL이면 0으로 출력하는 함수
10. 비교연산자 배우기
(1) <, >, <=, >=, !=, ^=, <>, =
(ex) 월급이 1200 이하인 사원들의 이름, 월급, 직업, 부서 번호 출력
SELECT ename, sal, job, deptno
FROM emp
WHERE sal <= 1200;
(2) BETWEEN AND
(ex) 월급이 1000에서 3000 사이인 사원들의 이름과 월급 출력
SELECT ename, sal
FROM emp
WHERE sal BETWEEN 1000 AND 3000;
SELECT ename, sal
FROM emp
WHERE (sal >= 1000 AND sal <= 3000);
- BETWEEN 하한값 AND 상한값
# 월급이 1000에서 3000 사이가 아닌 사원들
SELECT ename, sal
FROM emp
WHERE sal NOT BETWEEN 1000 AND 3000;
SELECT ename, sal
FROM emp
WHERE (sal < 1000 AND sal > 3000);
(ex) 1982년도에 입사한 사원들의 이름과 입사일 출력
SELECT ename, hiredate
FROM emp
WHERE hiredate BETWEEN '1982/01/01' AND '1982/12/31';
(3) LIKE
(ex) 이름의 첫 글자가 S인 사원들의 이름과 월급 출력
SELECT ename, sal
FROM emp
WHERE ename LIKE 'S%';
- % : 와일드 카드. 0개 이상의 임의의 문자와 일치 -> 'LIKE' 연산자와 함께 쓸 경우!
(ex) 이름 두번째 글자가 M인 사원의 이름 출력
SELECT ename
FROM emp
WHRERE ename LIKE '_M%';
- _ : 언더바. 한 자리수의 어떤 철자. 하나의 문자와 일치
(ex) 이름의 끝 글자가 T인 사원의 이름 출력
SELECT ename
FROM emp
WHERE ename LIKE '%T';
(ex) 이름에 A 포함하고 있는 사원들의 이름 출력
SELECT ename
FROM emp
WHERE ename LIKE '%A%';
(4) IS NULL
- NULL : 데이터가 할당되지 않은 상태. 알 수 없는 값. -> = 연산자로 비교 불가
# 커미션이 NULL인 사원들의 이름과 커미션 출력
SELECT ename, comm
FROM emp
WHERE comm IS NULL;
(5) IN
(ex) 직업이 salesman, analyst, manager인 사원들의 이름, 월급, 직업 출력
SELECT ename, sal, job
FROM emp
WHERE job IN ('SALESMAN', 'ANALYST', 'MANAGER');
- = 연산자는 하나의 값만 조회, IN 연산자는 여러 리스트의 값 조회 가능
11. 논리 연산자 배우기 (AND, OR, NOT)
(ex) 직업이 SALESMAN이고 월급이 1200 이상인 사원들의 이름, 월급 직업
SELECT ename, sal, job
FROM emp
WHERE job = 'SALESMAN' AND sal >= 1200;
'Database > SQL' 카테고리의 다른 글
[Lecture] 2. DBMS 개념과 아키텍쳐 (0) | 2022.03.21 |
---|---|
[Lecture] 1. 데이터베이스 시스템 (0) | 2022.03.21 |
[MySQL] SQL 옵티마이저 (0) | 2021.01.18 |
[MySQL] 데이터 제어어 : DCL (0) | 2021.01.18 |
[MySQL] Titanic 예제 (0) | 2021.01.11 |