SELECT문
- 테이블에 입력된 데이터 내용을 검색하고 싶을때 SELECT 문을 사용한다.
- 불러온 table의 순서는 보장할 수 없다.
- 원하는 row를 선택해서 불러 올 수 있다.
- 반환되는 데이터의 종류에 따라서 3가지 처리 기능이 있다.
(1) Selection 기능 : SELECT문요청시 테이블의 행(record)이 반환되는 기능
(2) Projection 기능 : SELECT문 요청시 테이블의 열(column)이 반환되는 기능
(3) Join 기능 : 여러 테이블에 공통적으로 존재하는 column을 사용하여 한꺼번에 서로다른 테이블에 저장된 데이터를 가져오는 기능 - SELECT문의 결과도 하나의 TABLE이다.
실행 순서
5. SELECT : column 명
1. FROM : table 명
2. WHERE : 조건절. TRUE인 값만 출력한다. EX)비교 연산자
3. GROUP BY : column명
4. HAVING : 조건절
6. ORDER BY : coulmn명 [ASC|DESC] - 오름차순 또는 내림 차순
column 보기
// 모든 column 보기
SELECT * FROM 테이블명;
//특정 column 보기
SELECT column명1, column명2,... FROM 테이블명
산술연산자 사용
- 산술연산자 : 더하기(+), 빼기(-), 나누기(/), 곱하기(*)
- *, /연산자가 +, - 연산자보다 우선순위이다.
곱하기 보다 더하기를 먼저 연산하기 위해서는 괄호를 사용해준다.
SELECT sal, sal*1.1 FROM emp WHERE DEPTNO=10;
별칭사용(Alias)
- SELECT문의 결과가 출력될 때 column의 이름과 연산식이 column에 대한 헤딩으로 출력됨
column명 자체가 변경되는 것은 아님
(SELECT 문, WHERE절, INNER JOIN에 별칭 사용 가능) - AS는 생략가능하다.
- 공백문자 또는 특수문자($, _, #)를 사용하기 위해서는 반드시 " "로 감싸주어야한다.
- column명에 alias를 지정해 주었다면 column명 대신 alias를 사용할 수 있다.
(단, ALIAS를 지정해 준 후 참조시에 실행순서를 반드시 확인해야한다.)
//employees 테이블의 last_name, salary, salary*12를 별칭을 사용하여 출력하는 문장
SELECT last_name as 이름, salary 월급, salary*12 as "연 봉" FROM employees;
//column명에 alias를 지정해 주었다면 column명 대신 alias를 사용할 수 있다.
1 SELECT DEPTNO, ROUND(AVG(SAL)) avg_sal
2 FROM EMP
3 WHERE SAL>=2000
4 GROUP BY DEPTNO
5 ORDER BY avg_sal DESC
NULL
- 데이터가 없는 경우 NULL값을 갖는다고 한다.
- NULL은 값 자체가 없는 것이기 때문에 연산하거나 비교할 수 없다.
만약 연산자를 사용했다면 항상 NULL값이 반환된다.
연결연산자 ( | | )
- 문자열을 연결해서 하나의 데이터로 리턴한다.
- 기존의 컬럼에 다른 컬럼값을 연결하거나 새로운 값을 추가할때 사용된다.
//문법
SELECT 컬럼명||컬럼명
FROM 테이블명;
//예시
SELECT ename||'의 직업은'||job||'입니다.' FROM emp;
DISTINCT
- SELECT문 바로 뒤에 DISTINCT 키워드를 사용하면 중복되는 ROW를 제거 해주고, 오름차순으로 정렬한다.
- DISTINCT 키워드 뒤에 여러개의 컬럼을 설정할 수 있다.
이때는 모든 컬럼들이 DISTINCT의 영향을 받게 된다.
//문법
SELECT DISTINCT 컬럼명
FROM 테이블명;
WHERE 절
- ROW를 추려낼때 사용
- 특정 조건에 일치하는 데이터를 조회하는 경우에 사용
- FROM절 바로 다음에 사용됨.
SELECT column명
FROM 테이블명
WHERE 조건식;
연산자 우선 순위
연산자 우선 순위 | 설명 |
1 | 괄호( ) |
2 | NOT 연산자 |
3 | 비교 연산자 |
4 | AND 연산자 |
5 | OR 연산자 |
비교연산자
연산자 | 설명 |
= | 같다 |
!= , <> , ^= | 같지 않다 |
> | 보다 크다 |
>= | 보다 크거나 같다 |
< | 보다 작다 |
<= | 보다 작거나 같다 |
//employees테이블에서 월급이 10000이상인 사원의 사원번호, 이름, 직업을 출력하세요\
SELECT '사원번호', '이름', '직업'
FROM employees
WHERE '월급'>=10000;
논리 연산자( AND / OR / NOT)
연산자 | 설명 |
AND |
두 가지 조건을 모두 만족하는 데이터를 검색 SELECT ename,sal FROM emp WHERE deptno=10 AND sal>=30; |
OR |
두 가지 조건 중에서 한가지만 만족하더라도 검색한다. SELECT empno, deptno FROM emp WHERE job='SALESMAN' OR job='MANAGER'; |
NOT |
지정된 조건이 아닌 데이터를 검색한다. SELECT * FROM employees WHERE NOT employee_id=100; |
IN 연산자
- 하나의 값이 아닌 목록에 지정된 여러 개의 값을 한꺼번에 비교할 때 사용하는 연산자
- 내부적으로 OR연산자로 실행된다.
WHERE 컬럼명 IN(값1,값2,...);
//OR 연산자 사용
SELECT deptno, ename, empno FROM emp WHERE deptno=10 OR deptno=20;
//IN 연산자 사용
SELECT deptno, ename, empno FROM emp WHERE deptno IN(10,20);
ANY 연산자
- 조건을 비교할때 어느 하나라도 맞으면 true
WHERE 컬럼명 ANY(조건);
//OR 연산자를 이용한 데이터 검색
SELECT EMPNO, SAL FROM EMP WHERE SAL>1000 OR SAL>2000 OR SAL>3000;
//ANY 연산자를 이용한 데이터 검색
SELECT EMPNO, SAL FROM EMP WHERE SAL>ANY(1000,2000,3000);
ALL 연산자
- 조건을 비교할때 조건이 모두 맞으면 true
WHERE 컬럼명 비교연산자 ALL(조건);
//AND 연산자로 작성
SELECT empno,sal FROM emp WHERE sal>1000 AND sal>2000 AND sal>3000;
//ALL 연산자로 작성
SELECT empno,sal FROM emp WHERE sal>ALL(1000,2000,3000);
BETWEEN a AND b
- 특정한 두 값 사이의 범위 검색을 할 때 사용하는 연산자
- a 이상 b 이하
WHERE 컬럼명 BETWEEN 값1 AND 값2;
//급여가 1000 과 2000 사이인 사원들의 사원번호,이름,급여를 출력하세요.
// AND 연산자와 비교 연산자로 검색하기
SELECT empno,ename,sal FROM emp WHERE sal>=1000 AND sal<=2000;
//BETWEEN a AND B 연산자로 출력하기
SELECT empno,ename,sal FROM emp WHERE sal BETWEEN 1000 AND 2000;
IS NULL
- NULL값을 가지고 있는 데이터를 검색할 때 사용하는 연산자
- NULL값은 값이 없는 것을 의미하는 식별자이기 때문에 동등 연산자(=)로는 원하는 결과 값을 얻을 수 없다.
//커미션이 NULL 인 사원의 사원이름과 커미션을 출력해보세요
SELECT ename,comm FROM emp WHERE comm IS NULL;
IS NOT NULL
- NULL값이 아닌 데이터를 출력하는 경우
//커미션이 NULL 이 아닌 사원의 사원이름과 커미션을 출력해보세요
SELECT ename, comm FROM emp WHERE comm IS NOT NULL;
EXISTS
- 검색한 데이터가 존재하면 TRUE값이 전달되고 데이터가 출력된다.
// 사원이름이 'FORD' 인 사원이 존재하면 사원의 이름과 커미션을 출력하기
SELECT ename,comm
FROM emp
WHERE EXISTS(SELECT ename
FROM emp
WHERE ename='FORD');
LIKE ( _ , %) 중요!
- 문자열비교
- 문자열 전체가 아닌 임의의 문자만 일치 하더라도 데이터 검색이 가능하게 해준다
- 패턴값 위치에는 검색할 문자와 와일드카드(wild card) 문자를 조합하여 설정
//문법
WHERE 컬럼명 LIKE 패턴값
//사원이름이 'J' 로 시작하는 사원의 사원이름과 부서번호를 출력하기
SELECT ename, deptno
FROM emp
WHERE ename LIKE 'J%'
//사원이름에 'J' 가 포함된는 사원의 이름과 부서번호를 출력하기
SELECT ename, deptno
FROM emp
WHERE ename LIKE '%J%';
//사원이름의 두번째 글자가 'A' 인 사원의 이름,급여,입사일을 출력하기
SELECT ename, sal, hiredate
FROM emp
WHERE ename LIKE '_A%';
ORDER BY절
- 모든 데이터 타입(NUMBER, VARCHAR, DATE)을 오름차순과 내림차순으로 정렬할 수 있다.
- ORDER BY절 다음에 정렬방식을 지정하지 않으면, default값은 오름차순이다.
- ORDER BY절 뒤에는 컬럼 alias 및 SELECT의 컬럼 순서값을 사용할 수 있다.
수치데이터 정렬
- ASC : 오름차순 정렬 예)1~5/ㄱ,ㄴ,ㄷ/오래된 날짜~ 최근날짜
- DESC : 내림차순 정렬 예)5~1 /ㄷ,ㄴ,ㄱ/최근날짜~오래된날짜
- NULL 값은 가장 큰 값으로 처리된다.
SELECT column명1, column명2,...
FROM 테이블명
WHERE 조건식
ORDER BY column명 ASC|DESC;
다중데이터 정렬
첫번째 분류된 것을 기준으로 그룹화 하고 그 그룹 내에서 두번째 정렬기준으로 재정렬한다.
SELECTE job,sal FROM emp ORDER BY job ASC, sal DESC;
NULL값 정렬
- NULL값은 가장 큰 값으로 처리한다.
문제.
emp 테이블에서 직업이 salesman인 사람들의 이름, 직업, 급여를 높은 급여순으로 출력해보세요.
답
select ename,job,sal from emp where job='SALESMAN' order by sal desc;
문제
emp테이블에서 입사일이 81/02/20인 사람들의 직원번호, 직원이름을 찾아보세요.
select empno,ename from emp where hiredate='81/02/20';
문제
emp 테이블에서 ename테이블명을 '사원 이름'으로 변경해보세요.
답
SELECT ename "사원 이름" FROM EMP;
문제
EMP테이블에서 '사원 이름'을 다시 'ENAME'으로 변경해보세요
SELECT ename ENAME FROM emp;
문제.
emp 테이블에서 부서번호가 10번인 사원들의 급여를 출력하되 10%인상된 금액도 같이 출력해보세요.
답
SQL> SELECT sal, sal*1.1 "인상된 급여" from emp where deptno=10;
'ORACLE' 카테고리의 다른 글
DML / TCL (0) | 2019.11.15 |
---|---|
DDL 명령어 / TABLE 객체 / ROWID / ROWNUM (0) | 2019.11.15 |
Data Base (0) | 2019.11.14 |
명령프롬프트 명령어 (0) | 2019.11.14 |
Oracle 권한 부여 / 계정 만들기 / 재접속 / oracle에서 빠져나오기 (0) | 2019.11.13 |