SQL 기본 명령 1
사용자의 모든 테이블 보기 SELECT * FROM tab;
-scott 사용자 대표 테이블 : DEPT, EMP, SALGRADE, BONUS
테이블 구조 보기 DESC 테이블명
NULL 데이터
0(zero)도 아니고, 빈 공백도 아니
미확정(해당 사항 없음), 알 수 없는(unknown) 값을 의미
연산, 할당, 비교가 불가능 (연산을 할 경우 결과는 null값)
별칭(alias)
-쿼리문의 결과가 출력될 때, 컬럼의 이름이 지정한 컬럼명의 대문자로 출력됨
(연산 후의 결과 컬럼명이 보기에 좋지는 않음)
① 컬럼명 as 별칭
② 컬럼명 별칭
③ 컬럼명 “별칭” //별칭에 공백이나 특수문자, 대소문자 구별을 사용
연산식 별칭 처리 시
SELECT empno “사 번”, ename “사 원 명” , sal*12 “연봉” FROM emp;
|| 연결 연산자(concatenate)
중복되는 컬럼을 한 번씩만 보여주기 위한 DISTINCT 키워드
SELECT DISTINCT deptno FROM emp;
SQL 기본 명령 2 - (1)
where 조건절 : 조건을 이용하여 특정 레코드를 조회하기 위한 절
비교연산자
-where 절에는 하나 또는 그 이상의 조건을 설정할 수 있음
-조건에 사용하는 비교연산자
=(같다) , >(크다), <(작다), >=크거나 같다, <=작거나 같다, <>(같지않다)
특정 데이터 추출 : 숫자 비교
-부서번호가 10번인 사원만 출력 SLECT *FROM emp WHERE deptno = 10;
-급여가 2000이상인 사원의 사번, 이름, 급여를 출력
SELECT empno, ename, sal FROM emp WHERE sal >= 2000;
특정 데이터 추출 : 문자열 비교
-문자열은 단일 따옴표 안에 표시함 : ‘문자열’
-FORD 사원의 사번, 이름, 급여 출력
SELECT empno, ename, sal FROM emp WHERE ename = ‘FORD’;
SELECT empno, ename, sal FROM emp WHERE ename = ‘Ford’;
፠비교값은 대소문자를 구별한다는 것에 주의!
특정 데이터 추출 : 날짜 데이터 비교
-날짜 데이터는 단일 따옴표 안에 표시함 : ‘yyyy/mm/dd’
-1982년 1월 1일 이후에 입사한 사원의 이름, 입사일자 출력
SELECT ename, hiredate FROM emp WHERE hiredate >= ‘1982/01/01’;
LIKE 연산자
-WHERE ename = ‘홍길동’
: 정확히 사원이름이 홍길동인 사원만 검색
(Q) 성이 홍씨인 사원만 출력
: 정확히 사원이름이 홍인 사원을 검색
-와일드 문자
% : 0개 이상의 문자열 대체
밑줄문자(_) : 단 1개 문자 대체
예시) 사원이름이 J로 시작 : ‘J%’
사원이름에 A를 포함 : ‘%A%’
사원이름 두 번째 문제가 A : ‘_A%’
-와일드 문자 비교 : LIKE 연산자
컬럼명 LIKE 와일드문자열(pattern)
-이름이 J로 시작하는 사원의 사번, 이름 출력
SELECT empno, ename, FROM emp WHERE ename LIKE ‘J%’;
-이름에 A를 포함하는 사원의 사번, 이름 출력
SELECT empno, ename FROM emp WHERE ename LIKE ‘%A%’;
-이름이 N으로 끝나는 사원의 사번, 이름 출력
SELECT empno, ename FROM emp WHERE ename LIKE ‘%N’;
-이름의 두 번째 문자가 A인 사원의 사번, 이름 출력
SELECT empno, ename FROM emp WHERE ename LIKE ‘_A%’;
SQL 기본 명령 2 - (2), (3)
IN 연산자
부서번호가 10, 20인 사원의 사번, 이름, 부서번호 출력
SELECT empno, ename, deptno FROM emp WHERE deptno IN (10, 20);
BETWEEN A AND B 연산자
급여가 2000에서 4000 사이인 사원의 사번, 이름, 급여 출력
SELECT empno, ename, sal FROM emp WHERE sal BETWEEN 2000 AND 4000;
논리 연산자 : AND, OR, NOT
AND : 두 조건을 모두 만족해야 검색 (조건1 AND 조건2)
OR : 두 조건 중에서 한 가지만 만족하면 검색 (조건1 OR 조건2)
NOT 조건
AND
급여가 2000에서 4000 사이인 사원의 사번, 이름, 급여 출력
SELECT empno, ename, sal FROM emp WHERE sal >=2000 AND sal <= 4000;
OR
직급이 CLERK(사무원)이거나, 부서번호가 10번인 사원의 사번, 이름, 직급, 부서번호 출력
SELECT empno, ename, job, deptno FROM emp WHERE job = ‘CLERK’ OR deptno = 10;
፠OR과 IN은 경우에 따라 대체하여 사용 가능.
NOT
부서번호가 20번이 아닌 사원의 사번, 이름, 부서번호 출력
SELECT empno, ename, deptno FROM emp WHERE NOT depno = 20;
NOT IN 연산
부서번호가 10, 20번이 아닌 사원의 사번, 이름, 부서번호 출력
SELECT empno, ename, deptno FROM emp WHERE deptno NOT IN (10,20);
NOT LIKE 연산
이름에 A를 포함하지 않는 사원의 사번, 이름, 부서번호 출력
SELECT empno, ename, deptno FROM emp WHERE ename NOT LIKE ‘%A%’;
NOT BETWEEN A AND B 연산
급여가 1000에서 3500 사이에 포함되지 않는 사원의 사번, 이름, 급여 출력
SELECT empno, ename, sal FROM emp WHERE sal NOT BETWEEN 1000 AND 3500;
IS NULL, IS NOT NULL
컬럼값이 NULL인지, 아닌지를 비교하는 연산자
관리자(mgr)가 없는(NULL) 사원의 사번, 이름, 관리자 출력
SELECT empno, ename, mgr FROM emp WHERE mgr IS NULL;
፠NULL 값은 = 연산자가 아니라 IS NULL 연산자를 사용해야만 비교가 가능.
수당을 받는 모든 사원 출력
SELECT empno, ename, comm FROM emp WHERE comm IS NOT NULL;
ORDER BY 절
SELECT *|컬럼명 FROM 테이블명 WHERE 조건절 ORDER BY 기준컬럼명 [ASC | DESC];
기준 컬럼명 : 정렬하기 위한 기준 컬러명
(동일 값을 처리하기 위하여 여러 컬럼을 작성할 수 있음) ASC : 오름차순(생략가능, default값)
DESC : 내림차순
ORDER BY 절 : 숫자 정렬
SELECT empno, ename, sal FROM emp ORDER BY sal; #default 값으로 오름차순
SELECT empno, ename, sal FROM emp ORDER BY sal DESC; #내림차수
ORDER BY 절 : 문자열 정렬
SELECT empno, ename, sal FROM emp ORDER BY ename;
ORDER BY 절 : 날짜 정렬
SELECT empno, ename, hiredate FROM emp ORDER BY hiredate DESC;
ORDER BY 절 : 여러 컬럼값 정렬
(급여기준 내림차순, 급여가 같으면 이름기준 오름차순)
SELECT empno, sla, ename FROM emp ORDER BY sal DESC, ename ASC;
SQL 주요함수 1 - 숫자함수
DUAL 테이블
: SELECT 절에 기술할 테이블이 없을 경우 사용하는 Dummy Table
언제 사용할까?
-(Q) 간혹, 상황에 따라 쿼리 작업에서 연산식만 사용하는 경우가 있다.
예를 들어, 10+30 결과를 구하기 위하여 쿼리를 작성한다면?
-SQL > SELECT 10+30 FROM ??????;
(?) 10 + 30 연산은 테이블 없다.
-> 실행되려면 테이블이 있어야 한다.
ROUND(반올림) 함수
: 지정한 자리 수 이하에서 반올림한 결과를 구해주는 함수
형식 : ROUND(숫자, n) n : 반올림 자릿수
반올림자리
반올림 방법
반올림자리(n)가 0 또는 양수이면, n+1 위치에서 반올림
반올림자리(n)가 음수이면, n위치에서 반올림
소수점 이하 두번째 자리 에서 반올림
SELECT ROUND(46.593, 2) FROM DUAL; 결과 46.59
-1은 일의 자리에서 반올림
SELECT ROUND(46.593, -1) FROM DUAL; 결과 50
TRUNC(버림) 함수
: 지정한 자리 수 이하에서 버린 결과를 구해주는 함수
형식 : TRUNC(숫자, n) n : 버림 자릿수
버림자리
버림 방법
소수점 이하 두 번째 자리에서 버림
SELECT TRUNC(46.593, 2) FROM DUAL; 결과 46.59
-1은 일의 자리에서 버림
SELECT TRUNC(46.593, -1) FROM DUAL; 결과 40
MOD(나머지) 함수
: 나누기 연산을 한 후에 구한 나머지 를 결과로 돌려주는 함수
형식 : MOD(컬럼| 숫자, 나누기값)
10번 부서 사원의 급여를 100으로 나눈 나머지 출력
SELECT MOD(sal, 100) FROM emp WHERE deptno = 10;
SQL 주요함수 2 - 문자함수
UPPER(대문자), LOWER(소문자) 함수
: 소문자는 대문자로, 대문자는 소문자로 변환하여 출력하는 함수
20번 부서 사원의 모든 이름을 모두 소문자 로 변경하여 출력하는 쿼리를 작성하시오.
SELECT LOWER(ename) FROM emp WHERE deptno = 20;
INITCAP 함수
: 단어의 첫글자를 대문자로 변환하여 출력하는 함수
사원 이름의 첫 글자를 대문자로 출력하는 쿼리를 작성하시오
SELECT INITCAP(ename) FROM emp;
LENGTH 함수
: 문자열의 길이를 구하여 출력하는 함수
사원 이름이 몇 글자인지 출력하는 쿼리를 작성하시오.
SELECT ename, LENGTH(ename) FROM emp;
INSTR 함수
: 특정 컬럼 또는 문자열에서 지정 문자의 위치를 반환하는 함수
형식 : INSTR(컬럼|문자열, [검색할 시작위치], [검색문자 순서])
-SQL>SELECT INSTR(‘welcome to oracle’, ‘o’) FROM DUAL; 결과 5
SELECT INSTR(‘welcome to oracle’, ‘o’, 6) FROM DUAL; 결과 10
SELECT INSTR(‘welcome to o racle’, ‘o’, 3, 3 ) FROM DUAL; 결과 12
SUBSTR 함수
: 특정 컬럼 또는 문자열에서 지정한 일부분을 추출하여 반환하는 함수
형식 : SUBSTR(컬럼|문자열,m,[n]) //m : 시작워치, n : 추출문자개수
*n이 생략되면 m 위치에서 문자열 끝까지 추출
SQL>SELECT SUBSTR(‘wel com e to oracle’, 4, 3) FROM DUAL; 결과 com
SELECT SUBSTR(‘welcome t o oracle ’, 10) FROM DUAL; 결과 oracle
LPAD, RPAD 함수
: 오른쪽(왼쪽) 정렬 후, 지정 문자를 왼쪽(오른쪽)에 채우는 함수
형식 : LPAD(컬럼|문자열, m, ‘c’), RPAD(컬럼|문자열,m, ‘c’)
m: 자리수, c: 채울문자
SELECT LPAD(‘oracle’,10,’*’), RPAD(‘oracle’,10,’*’ ) FROM DUAL:
****oracle oracle****
LTRIM, RTRIM 함수
: 왼쪽(오른쪽) 지정 문자가 연속이면 지정 문자를 삭제하는 함수
형식 : LTRIM(컬럼|문자열, ‘c’), RTRIM(컬럼|문자열, ‘c’) c: 삭제문자
SELECT LTRIM(‘****oracle’, ‘*’), RTRIM(‘oracle****’,’*’) FROM DUAL;
oracle oracle
TRIM 함수
: 양쪽에 지정 문자가 연속이면 지정 문자를 삭제하는 함수
형식 : TRIM(‘c’ from 컬럼|문자열)
SELECT TRIM(‘*’ from ‘***oracle****’) FROM DUAL;
결과 : oracle
SQL 주요함수 3 - 날짜함수
날짜 함수 : 날짜 데이터형에 사용, 대부분 일 단위로 계산(기본표현 : 년/월/일)
SYSDATE 함수
: 시스템에 저장된 현재 날짜와 시간을 반환하는 함수
SELECT SYSDATE FROM DUAL; 기본적으로 날짜만 출력하고 시간은 표시되지 않음.
날짜 연산
: 날짜 형 데이터에도 더하기나 빼기와 같은 연산이 가능함
SYSDATE+1(내일 날짜), SYSDATE-1(어제 날짜)
SELECT SYSDATE+1, SYSDATE -1 FROM DUAL;
날짜 연산
SELECT ename, hiredate, SYSDATE-hiredate FROM emp WHERE deptno = 20;
፠ 날짜타입에는 연월일뿐만 아니라, 시분초까지도 저장되어 있음. 소수점 이하의 숫자는 하루가 되지 못한 시간을 의미.
MONTHS_BETWEEN 함수
: 날짜와 날짜 사이의 개월 수를 구하는 함수
형식 : MONTHS_BETWEEN(최근날짜, 이전 날짜)
20번 부서 사원들의 현재까지 근무 개월수를 출력하는 쿼리를 작성하시오.
SELECT ename, hiredate, MONTHS_BETWEEN(SYSDATE, hiredate) FROM emp WHERE deptno = 20;
ADD_MONTHS 함수
: 지정한 개월 수를 더한 날짜를 구하는 함수
형식 : ADD_MONTHS(날짜, 더할 개월수)
20번 부원 사원들의 입사일자에서 6개월 후 일자를 구하는 쿼리를 작성하시오.
SELECT hiredate, ADD_MONTHS(hiredate, 6) FROM emp WHERE deptno = 20;
LAST_DAY 함수
: 해달 날짜가 속한 달의 마지막 날짜를 반환하는 함수
형식 : LAST_DAY(날짜)
SELECT hiredate, LAST_DAY(hiredate) FROM emp WHERE deptno = 20;
NEXT_DAY 함수
: 해당 날짜를 기준으로 명시된 요일에 해당되는 날짜를 반환하는 함수
형식 : NEXT_DAY(날짜, 요일)
SELECT NEXT_DAY(SYSDATE, ‘월’) FROM DUAL;
SQL 주요함수 4 - 형변환함수
형 변환 함수
: 숫자, 문자, 날짜의 데이터 형을 변환해야 하는 경우에 사용하는 함수
TO_NUMBER : 문자 데이터 -> 숫자 데이터
TO_CHAR : 숫자 데이터 -> 문자 데이터
TO_DATE : 문자 데이터 -> 날짜 데이터
TO_DATE 함수 : 문자 -> 날짜
형식 : TO_DATE(‘날짜표현문자열’, 날짜_시간포맷)
TO_DATE 함수 : 문자 -> 날짜
SELECT TO_DATE(‘2020-01-20’, ‘YYYY/MM/DD’) FROM DUAL;
TO_CHAR 함수
형식 : TO_CHAR(숫자|날짜, 형별포맷)
SELECT TO_CHAR(SYSDATE, ‘YYYY/MM/DD, HH24:MI:SS’), FROM DUAL;
TO_CHAR 함수 : 숫자 -> 문자
20번 부서의 사원 급여를 6자리로 바꾸고, 앞에 $ 또는 지역통화를 붙여 출력하느 쿼리를 작성하시오.(예 : $2,200, \2,200)
SELECT ename, TO_CHAR(sal,’$999,999’), TO_CHAR(sal,’L999,999’) FROM emp WHERE deptno = 20;
TO_NUMBER 함수 : 문자 -> 숫자
형식 : TO_NUMBER(‘문자숫자’)
SELECT TO_NUMBER(‘123’), TO_NUMBER(‘12.3’) FROM DUAL;