-- ○ 추가 실습 테이블 구성 TBL_SAWON
CREATE TABLE TBL_SAWON
(SANO NUMBER(4)
,SANAME VARCHAR(30)
,JUBUN CHAR(13)
,HIREDATE DATE DEFAULT SYSDATE
,SAL NUMBER(10)
);
--==>>Table TBL_SAWON이(가) 생성되었습니다.
SELECT *
FROM TBL_SAWON;
DESC TBL_SAWON;
/*
이름 널? 유형
-------- -- ------------
SANO NUMBER(4)
SANAME VARCHAR2(30)
JUBUN CHAR(13)
HIREDATE DATE
SAL NUMBER(10)
*/
-- ○ 데이터 입력
INSERT INTO TBL_SAWON(SANO, SANAME, JUBUN,HIREDATE, SAL)
VALUES (1001,'김가영','9402252234567', TO_DATE('2001-01-03','YYYY-MM-DD'),3000);
INSERT INTO TBL_SAWON(SANO, SANAME, JUBUN,HIREDATE, SAL)
VALUES (1002,'김서현','9412272234567', TO_DATE('2010-11-05','YYYY-MM-DD'),2000);
INSERT INTO TBL_SAWON(SANO, SANAME, JUBUN,HIREDATE, SAL)
VALUES (1003,'김아별','9303082234567', TO_DATE('1999-08-16','YYYY-MM-DD'),5000);
INSERT INTO TBL_SAWON(SANO, SANAME, JUBUN,HIREDATE, SAL)
VALUES (1004,'이유림','9609142234567', TO_DATE('2008-02-02','YYYY-MM-DD'),4000);
INSERT INTO TBL_SAWON(SANO, SANAME, JUBUN,HIREDATE, SAL)
VALUES (1005,'정주희','9712242234567', TO_DATE('2009-07-15','YYYY-MM-DD'),2000);
INSERT INTO TBL_SAWON(SANO, SANAME, JUBUN,HIREDATE, SAL)
VALUES (1006,'한혜림','9710062234567', TO_DATE('2009-07-15','YYYY-MM-DD'),2000);
INSERT INTO TBL_SAWON(SANO, SANAME, JUBUN,HIREDATE, SAL)
VALUES (1007,'이하이','0405064234567', TO_DATE('2010-06-05','YYYY-MM-DD'),1000);
INSERT INTO TBL_SAWON(SANO, SANAME, JUBUN,HIREDATE, SAL)
VALUES (1008,'아이유','0103254234567', TO_DATE('2012-07-13','YYYY-MM-DD'),3000);
INSERT INTO TBL_SAWON(SANO, SANAME, JUBUN,HIREDATE, SAL)
VALUES (1009,'정준이','9804251234567', TO_DATE('2007-07-08','YYYY-MM-DD'),4000);
INSERT INTO TBL_SAWON(SANO, SANAME, JUBUN,HIREDATE, SAL)
VALUES (1010,'이이제','0204254234567', TO_DATE('2008-12-10','YYYY-MM-DD'),2000);
INSERT INTO TBL_SAWON(SANO, SANAME, JUBUN,HIREDATE, SAL)
VALUES (1011,'선동열','7505071234567', TO_DATE('1990-10-10','YYYY-MM-DD'),3000);
INSERT INTO TBL_SAWON(SANO, SANAME, JUBUN,HIREDATE, SAL)
VALUES (1012,'선우선','9912122234567', TO_DATE('2002-10-10','YYYY-MM-DD'),2000);
INSERT INTO TBL_SAWON(SANO, SANAME, JUBUN,HIREDATE, SAL)
VALUES (1013,'선우용녀','7101092234567', TO_DATE('1991-11-11','YYYY-MM-DD'),1000);
INSERT INTO TBL_SAWON(SANO, SANAME, JUBUN,HIREDATE, SAL)
VALUES (1014,'남주혁','0203043234567', TO_DATE('2010-05-05','YYYY-MM-DD'),2000);
INSERT INTO TBL_SAWON(SANO, SANAME, JUBUN,HIREDATE, SAL)
VALUES (1015,'남궁선','0512123234567', TO_DATE('2012-08-14','YYYY-MM-DD'),1000);
INSERT INTO TBL_SAWON(SANO, SANAME, JUBUN,HIREDATE, SAL)
VALUES (1016,'남이','7012121234567', TO_DATE('1990-08-14','YYYY-MM-DD'),2000);
DELETE
FROM TBL_SAWON
WHERE SANAME='스펀지밥';
--==>1 행 이(가) 삭제되었습니다.
SELECT *
FROM TBL_SAWON;
/*
1002 김서현 9412272234567 2010-11-05 2000
1003 김아별 9303082234567 1999-08-16 5000
1004 이유림 9609142234567 2008-02-02 4000
1005 정주희 9712242234567 2009-07-15 2000
1006 한혜림 9710062234567 2009-07-15 2000
1007 이하이 0405064234567 2010-06-05 1000
1008 아이유 0103254234567 2012-07-13 3000
1009 정준이 9804251234567 2007-07-08 4000
1010 이이제 0204254234567 2008-12-10 2000
1011 선동열 7505071234567 1990-10-10 3000
1012 선우선 9912122234567 2002-10-10 2000
1013 선우용녀 7101092234567 1991-11-11 1000
1014 남주혁 0203043234567 2010-05-05 2000
1015 남궁선 0512123234567 2012-08-14 1000
1016 남이 7012121234567 1990-08-14 2000
1001 김가영 9402252234567 2001-01-03 3000
*/
COMMIT;
--==>> 커밋 완료.
--○TBL_SAWON 테이블에서 김가영 사원의 정보를 모두 조회한다,
SELECT *
FROM TBL_SAWON
WHERE SANAME='김가영';
--==>>1001 김가영 9402252234567 2001-01-03 3000
SELECT *
FROM TBL_SAWON
WHERE SANAME LIKE '김가영';
--1001 김가영 9402252234567 2001-01-03 3000
-- ※ ~와 같이 라는 부사로 쓰인 LIKE ★★
--※ WILD CARD(CHARACTER) → %
-- LIKE 와 함께 사용되는 % 는 모든 글자를 의미한다.
--LIKE 와 함께 사용되는 _(언더스코어) 는 아무 글자1 개를 의미한다.
-- ○ TBL_SAWON 테이블에서 성씨가 『이 씨인 사원의
-- 사원명, 주민번호, 급여 항목을 조회한다.
SELECT SANAME, JUBUN, SAL
FROM TBL_SAWON
WHERE SANAME = '이';
--===>> 조회 결과 없음
SELECT SANAME, JUBUN, SAL
FROM TBL_SAWON
WHERE SANAME = '이__';
--==>> 조회 결과 없음
SELECT SANAME, JUBUN, SAL
FROM TBL_SAWON
WHERE SANAME LIKE '이__';
/*
이유림 9609142234567 4000
이하이 0405064234567 1000
이이제 0204254234567 2000
*/
SELECT SANAME, JUBUN, SAL
FROM TBL_SAWON
WHERE SANAME LIKE '이_';
--==>> 조회 결과 없음
SELECT SANAME, JUBUN, SAL
FROM TBL_SAWON
WHERE SANAME LIKE '이%';
/*
이유림 9609142234567 4000
이하이 0405064234567 1000
이이제 0204254234567 2000*/
--TBL_SAWON 테이블에서 이름의 마지막 글자가 림 으로 끝나는 사원의
-- 사원명, 주민번호, 입사일 급여 항목을 조회한다.
SELECT SANAME "사원명", JUBUN "주민번호", HIREDATE "입사일", SAL "급여"
FROM TBL_SAWON
WHERE SANAME LIKE '%림'; --> 또는 '__림' 그런데 이름이 세글자가 아닐수도 있으니까,,,
SELECT SANAME "사원명", JUBUN "주민번호", HIREDATE "입사일", SAL "급여"
FROM TBL_SAWON
WHERE SANAME LIKE '__림';
/*--==>>
이유림 9609142234567 2008-02-02 4000
한혜림 9710062234567 2009-07-15 2000
*/
-- TBL_SAWON 테이블에서 이름의 두 번째 글자가 '이'인 사원의
-- 사원명, 주민먼호, 입사일, 급여 항목을 조회한다.
-- SANAME "사원명", JUBUN "주민번호", HIREDATE "입사일", SAL "급여"
--FROM TBL_SAWON
--WHERE 이름의 두 번째 글자가 '이'
SELECT SANAME "사원명", JUBUN "주민번호", HIREDATE "입사일", SAL "급여"
FROM TBL_SAWON
WHERE SANAME LIKE '_이%';
/*
아이유 0103254234567 2012-07-13 3000
이이제 0204254234567 2008-12-10 2000
남이 7012121234567 1990-08-14 2000
*/
-- TBL_SAWON 테이블에서 이름에 '이'라는 글자가 하나라고 포함되어 있으면 그 사원의
-- 사원명, 주민먼호, 입사이르 급여 항목을 조회한다.
SELECT SANAME "사원명", JUBUN "주민번호", HIREDATE "입사일", SAL "급여"
FROM TBL_SAWON
--WHERE 이름에 '이'라는 글자가 하나라고 포함
WHERE SANAME LIKE '%이%';
/*
이유림 9609142234567 2008-02-02 4000
이하이 0405064234567 2010-06-05 1000
아이유 0103254234567 2012-07-13 3000
정준이 9804251234567 2007-07-08 4000
이이제 0204254234567 2008-12-10 2000
남이 7012121234567 1990-08-14 2000*/
-- ○TBL_SAWON 테이블에서 이름에 '이'라는 글자가 연속으로 두 번 \ 포함되어 있으면 그 사원의
-- 사원명, 주민먼호, 입사일, 급여 항목을 조회한다.
SELECT SANAME "사원명", JUBUN "주민번호", HIREDATE "입사일", SAL "급여"
FROM TBL_SAWON
--WHERE 이름에 '이'라는 글자가 연속으로 두 번 포함
WHERE SANAME LIKE '%이이%';
--==>>이이제 0204254234567 2008-12-10 200
-- ○TBL_SAWON 테이블에서 이름에 '이'라는 글자가 두 번 포함되어 있으면
--(위처럼 연속 x) 그 사원의 사원명, 주민번호, 입사일 급여 항목을 조회한다.
SELECT SANAME "사원명", JUBUN "주민번호", HIREDATE "입사일", SAL "급여"
FROM TBL_SAWON
WHERE SANAME LIKE '%이%이%';
/*
이하이 0405064234567 2010-06-05 1000
이이제 0204254234567 2008-12-10 2000*/
--○ TBL_SAWON 테이블에서 성씨가 남씨인 사원의
-- 사원명, 주민번호, 급여 항목을 조회한다.
SELECT SANAME "사원명", JUBUN "주민번호", SAL "급여"
FROM TBL_SAWON
WHERE SANAME LIKE '남%';
/*남주혁 0203043234567 2000
남궁선 0512123234567 1000
남이 7012121234567 20008*/
-- ※ 데이터 베이스 설계 시 성과 이름을 분리해서 처리해야 할 업무
-- 계획이 있다면(지금 당장은 아니더라도)
-- 테이블에서 성 컬럼과 이름 컬럼을 분리하여 구성해야 한다.
-- ○ TBL_ SAWON 테이블에서 여직원들의 사원명, 주민번호, 급여 항목을 조회한다.
SELECT SANAME "사원명", JUBUN "주민번호", SAL "급여"
FROM TBL_SAWON
WHERE JUBUN LIKE '______2%' OR JUBUN LIKE '______4%';
/*김서현 9412272234567 2000
김아별 9303082234567 5000
이유림 9609142234567 4000
정주희 9712242234567 2000
한혜림 9710062234567 2000
이하이 0405064234567 1000
아이유 0103254234567 3000
이이제 0204254234567 2000
선우선 9912122234567 2000
선우용녀 7101092234567 1000
김가영 9402252234567 3000*/
SELECT SANAME "사원명", JUBUN "주민번호", SAL "급여"
FROM TBL_SAWON
WHERE JUBUN LIKE '______2_______' OR JUBUN LIKE '______4_______';
--==>> 이것도 같은 결과
-- ○ 실습 테이블 생성(TBL_WATCH)
CREATE TABLE TBL_WATCH
(
WATCH_NAME VARCHAR2(20)
, BIGO VARCHAR2(100)
);
--==>>
Table TBL_WATCH이(가) 생성되었습니다.
--○ 데이터 입력
INSERT INTO TBL_WATCH(WATCH_NAME, BIGO)
VALUES('금시계','순금 99.99% 함유된 최고급 시계');
INSERT INTO TBL_WATCH(WATCH_NAME, BIGO)
VALUES('은시계','고객 만족도 99.99점을 획득한 시계');
SELECT *
FROM TBL_WATCH;
COMMIT;
-- ○ TBL_WATCH 테이블의 BIGO 컬럼에 99.99& 라는 글자가 들어있는 행(레코드)의 정보를
-- 조회한다,
SELECT *
FROM TBL_WATCH
WHERE BIGO LIKE '%99.99%%';
/*
금시계 순금 99.99% 함유된 최고급 시계
은시계 고객 만족도 99.99점을 획득한 시계
*/
SELECT *
FROM TBL_WATCH
WHERE BIGO LIKE '%99.99\%%' ESCAPE '\';
--==>>금시계 순금 99.99% 함유된 최고급 시계
--WIRD CARD 를 탈출시킨다는 의미에서 'ESCAPE'
SELECT *
FROM TBL_WATCH
WHERE BIGO LIKE '%99.99$%%' ESCAPE '$';
--==>>금시계 순금 99.99% 함유된 최고급 시계
-- ※ ESCAPTE 로 정한 문자의 다음 한 글자는 와일드카드(캐릭터)에서 탈출시켜라...
-- ESCAPE '\'
-- 일반적으로 키워드가 아닌, 연산자도 아닌, 사용빈도가 낮은 특수문자(특수기호)를 사용한다.
--■■■ COMMIT /ROLLBACK ■■■
SELECT *
FROM TBL_DEPT;
/*
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
*/
-- ○ 데이터 입력
INSERT INTO TBL_DEPT VALUES(50, '개발부','서울');
--===>>1 행 이(가) 삽입되었습니다.
--최고 약식으로 인서트 구문 작성한 것. 하지만 권장하지는 않는다.
-- 50번...개발부... 서울....
-- 이 데이터는 TBL_DEPT 테이블에 저장???
-- 하드디스크상에 물리적으로 적용되어 저장된 것이 ㅏㅇ니라
--메모리(RAM) 상에 입력된 것이다.
-- ○ 확인
SELECT *
FROM TBL_DEPT;
/*
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 개발부 서울
*/
-- 메모장에 뭐라고 알랄라라랄 이렇게 써놔도 보이기만 하지 저장 안하면 바로 날아간다.
-- 메모리에만 임시로 퍼올려둔 것이지 하드디스크에 저장/기록된 것이 아니다.
-- ○ 롤백
ROLLBACK;
SELECT *
FROM TBL_DEPT;
/*
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON*/ --50번 개발부 서울은 데이터가 소실되었음(존재X)
-- ○ 다시 입력
INSERT INTO TBL_DEPT VALUES(50,'개발부','서울');
--==>>1 행 이(가) 삽입되었습니다.
--> 메모리상에 입력된 이 데이터를 실제 하드디스크상에 물리적으로
--저장하기 위해서는 COMMIT 을 수행해야 한다.
--○ 확인
SELECT *
FROM TBL_DEPT;
/*
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 개발부 서울*/
COMMIT;
--==>>커밋 완료.
-- ○ 커밋 이후 다시 확인
SELECT *
FROM TBL_DEPT;
/*
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 개발부 서울*/
ROLLBACK;
--===>>롤백 완료.
SELECT *
FROM TBL_DEPT;
--○ 롤백 이후 다시 확인
/*
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 개발부 서울*/
--> 롤백(ROLLBACK)을 수행했음에도 불구하고 50번 개발부 서울 의 데이터는 소실
--되지 않았음을 확인
-- ※ COMMIT 을 실행한 이후로 DML(INSERT, UPDATE, DELETE 등...)구문을 통해
-- 변경된 데이터만 취소할 수 있는 것일 뿐
-- DML 명령을 사용한 후 COMMIT 을 하고나서
-- ROLLBACK 을 실행해봐야 이전 상태로 되돌릴 수 없다. (아무런 소용이 없다.)
--○ 데이터 수정 (TBL_DEPT)
UPDATE TBL_DEPT
SET DNAME='연구부', LOC='경기'
WHERE DEPTNO=50;
--==>>1 행 이(가) 업데이트되었습니다.
SELECT *
FROM TBL_DEPT;
/*
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 연구부 경기
*/
-- ○ 롤백
ROLLBACK;
--==>> 롤백 완료.
-- ○ 다시 확인
SELECT *
FROM TBL_DEPT;
/*
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 개발부 서울*/
--> 수행을 수행하기 이전 상태로 복원되었음을 확인
-- ○ 데이터 삭제
DELETE
FROM TBL_DEPT
WHERE DEPTNO=50;
--==>>1 행 이(가) 삭제되었습니다.
SELECT *
FROM TBL_DEPT;
/*
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON*/
ROLLBACK;
SELECT *
FROM TBL_DEPT;
/*
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 개발부 서울*/
--> 롤백 이후 다시 확인 했을 시 제거되었던 개발부 데이터가 다시 확인된다.
--> 삭제(DELETE) 구문을 수행하기 이전 상태로 복원되었음을 확인.
--트랜젝션을 처리하는 구문이다 TCL(Transaction Control System) 구문에는
-- COMMIT, ROLLBACK, SAVEPOINT 가 포함된다.
-- COMMIT : 현재 트랜젝션 종료
-- ROLLBACK : 저장되지 않은 모든 데이터 변경 사항을 취소하고 현재 트렌젝션 종료
-- SAVEPOINT : 현재까지의 트렌젝션을 특정 이름으로 지정
--■■■■ 정렬 (ORDERED BY) ■■■■
SELECT ENAME "사원명", DEPTNO "부서번호", JOB "직종", SAL "급여"
, SAL*12+NVL(COMM,0) "연봉"
FROM TBL_EMP
ORDER BY DEPTNO ASC; -- 부서번호 기준으로 오름차순이다.
-- 정렬은 부하, 리소스 소모가 심하다.
/*
CLARK 10 MANAGER 2450 29400
KING 10 PRESIDENT 5000 60000
MILLER 10 CLERK 1300 15600
JONES 20 MANAGER 2975 35700
FORD 20 ANALYST 3000 36000
ADAMS 20 CLERK 1100 13200
SMITH 20 CLERK 800 9600
SCOTT 20 ANALYST 3000 36000
WARD 30 SALESMAN 1250 15500
TURNER 30 SALESMAN 1500 18000
ALLEN 30 SALESMAN 1600 19500
JAMES 30 CLERK 950 11400
BLAKE 30 MANAGER 2850 34200
MARTIN 30 SALESMAN 1250 16400*/
SELECT ENAME "사원명", DEPTNO "부서번호", JOB "직종", SAL "급여"
, SAL*12+NVL(COMM,0) "연봉"
FROM TBL_EMP
ORDER BY DEPTNO;
-- ★ ASC 생략해도 저절로 오름차순 정렬된다.
SELECT ENAME "사원명", DEPTNO "부서번호", JOB "직종", SAL "급여"
, SAL*12+NVL(COMM,0) "연봉"
FROM TBL_EMP
ORDER BY DEPTNO DESC; -- 내림차순 정렬은 생략이 불가하다.
/*
BLAKE 30 MANAGER 2850 34200
TURNER 30 SALESMAN 1500 18000
ALLEN 30 SALESMAN 1600 19500
MARTIN 30 SALESMAN 1250 16400
WARD 30 SALESMAN 1250 15500
JAMES 30 CLERK 950 11400
SCOTT 20 ANALYST 3000 36000
JONES 20 MANAGER 2975 35700
SMITH 20 CLERK 800 9600
ADAMS 20 CLERK 1100 13200
FORD 20 ANALYST 3000 36000
KING 10 PRESIDENT 5000 60000
MILLER 10 CLERK 1300 15600
CLARK 10 MANAGER 2450 29400*/
-- ★ DESCRIBE 도 DESCENDING 모두 DESC 으로 표현되지만
-- 오라클은 맥락에 따라 해석한다.
SELECT ENAME "사원명", DEPTNO "부서번호", JOB "직종", SAL "급여"
, SAL*12+NVL(COMM,0) "연봉"
FROM TBL_EMP
ORDER BY SAL DESC;
/*
KING 10 PRESIDENT 5000 60000
FORD 20 ANALYST 3000 36000
SCOTT 20 ANALYST 3000 36000
JONES 20 MANAGER 2975 35700
BLAKE 30 MANAGER 2850 34200
CLARK 10 MANAGER 2450 29400
ALLEN 30 SALESMAN 1600 19500
TURNER 30 SALESMAN 1500 18000
MILLER 10 CLERK 1300 15600
WARD 30 SALESMAN 1250 15500
MARTIN 30 SALESMAN 1250 16400
ADAMS 20 CLERK 1100 13200
JAMES 30 CLERK 950 11400*/
SELECT ENAME "사원명", DEPTNO "부서번호", JOB "직종", SAL "급여"
, SAL*12+NVL(COMM,0) "연봉"
FROM TBL_EMP
ORDER BY 연봉 DESC; --SELECT 처리 이후이므로 별칭 사용 가능
/*
KING 10 PRESIDENT 5000 60000
FORD 20 ANALYST 3000 36000
SCOTT 20 ANALYST 3000 36000
JONES 20 MANAGER 2975 35700
BLAKE 30 MANAGER 2850 34200
CLARK 10 MANAGER 2450 29400
ALLEN 30 SALESMAN 1600 19500
TURNER 30 SALESMAN 1500 18000
MARTIN 30 SALESMAN 1250 16400
MILLER 10 CLERK 1300 15600
WARD 30 SALESMAN 1250 15500
ADAMS 20 CLERK 1100 13200
JAMES 30 CLERK 950 11400*/
--> ORDER BY 절보다 SELECT 절이 먼저 처리되기 대문에
--컬럼명 대신 SELECT 절에서 사용한 ALIAS(별칭)DMF
--ORDER BY 절에서 사용해도 문제가 발생하지 않는다.(가능하다)
-->> ALIAS에 공백이 있는 경우
SELECT ENAME "사원명", DEPTNO "부서 번호", JOB "직종", SAL "급여"
, SAL*12+NVL(COMM,0) "연봉"
FROM TBL_EMP
ORDER BY 부서 번호 DESC;
--==>> 오류
SELECT ENAME "사원명", DEPTNO "부서 번호", JOB "직종", SAL "급여"
, SAL*12+NVL(COMM,0) "연봉"
FROM TBL_EMP
ORDER BY "부서 번호" DESC;
--==>>
/*BLAKE 30 MANAGER 2850 34200
TURNER 30 SALESMAN 1500 18000
ALLEN 30 SALESMAN 1600 19500
MARTIN 30 SALESMAN 1250 16400
WARD 30 SALESMAN 1250 15500
JAMES 30 CLERK 950 11400
SCOTT 20 ANALYST 3000 36000
JONES 20 MANAGER 2975 35700
SMITH 20 CLERK 800 9600
ADAMS 20 CLERK 1100 13200
FORD 20 ANALYST 3000 36000
KING 10 PRESIDENT 5000 60000
MILLER 10 CLERK 1300 15600
CLARK 10 MANAGER 2450 29400*/
SELECT ENAME "사원명", DEPTNO "부서 번호", JOB "직종", SAL "급여"
, SAL*12+NVL(COMM,0) "연봉"
FROM TBL_EMP
ORDER BY 2;
--==>> 두 번째 컬럼(SELECT 에서 언급한 순서) 기준 오름차순
/*
CLARK 10 MANAGER 2450 29400
KING 10 PRESIDENT 5000 60000
MILLER 10 CLERK 1300 15600
JONES 20 MANAGER 2975 35700
FORD 20 ANALYST 3000 36000
ADAMS 20 CLERK 1100 13200
SMITH 20 CLERK 800 9600
SCOTT 20 ANALYST 3000 36000
WARD 30 SALESMAN 1250 15500
TURNER 30 SALESMAN 1500 18000
ALLEN 30 SALESMAN 1600 19500
JAMES 30 CLERK 950 11400
BLAKE 30 MANAGER 2850 34200*/
--> TBL_EMP 테이블이 갖고 있는 테이블의 고유한 컬럼 순서가 아니라
--SELECT 처리 되는 두 번째 컬럼(즉, DEPTNO)을 기준으로 정렬되는 것을 확인
--ASC 생략된 상태 → 오름차순 정렬되는 것을 확인
SELECT ENAME,DEPTNO, JOB, SAL
FROM TBL_EMP
ORDER BY 2,4; -- 2컬럼으로 1차 정렬, SAL 로 2차 정렬
/*
MILLER 10 CLERK 1300
CLARK 10 MANAGER 2450
KING 10 PRESIDENT 5000
SMITH 20 CLERK 800
ADAMS 20 CLERK 1100
JONES 20 MANAGER 2975
SCOTT 20 ANALYST 3000
FORD 20 ANALYST 3000
JAMES 30 CLERK 950
MARTIN 30 SALESMAN 1250
WARD 30 SALESMAN 1250
TURNER 30 SALESMAN 1500
ALLEN 30 SALESMAN 1600
BLAKE 30 MANAGER 2850
*/
SELECT ENAME,DEPTNO, JOB, SAL
FROM TBL_EMP
ORDER BY 2,3,4 DESC;
--> ⓐ DEPTNO(부서번호) 기준 오름차순 정렬
--> ⓑ JOB 기준 오름차순 정렬
--> ⓒ SAL 기준 내림차순 정렬 (총 3차 정렬 수행)
--==>>
/*
MILLER 10 CLERK 1300
CLARK 10 MANAGER 2450
KING 10 PRESIDENT 5000
SCOTT 20 ANALYST 3000
FORD 20 ANALYST 3000
ADAMS 20 CLERK 1100
SMITH 20 CLERK 800
JONES 20 MANAGER 2975
JAMES 30 CLERK 950
BLAKE 30 MANAGER 2850
ALLEN 30 SALESMAN 1600
TURNER 30 SALESMAN 1500
MARTIN 30 SALESMAN 1250
WARD 30 SALESMAN 1250*/
-- ○CONCAT() → 문자열 결합 함수
SELECT '스펀지밥' || ' 그리고 뚱이'
,CONCAT('진주','다람이')
FROM DUAL;
--==>>스펀지밥 그리고 뚱이/ 진주다람이
SELECT ENAME || JOB "1"
, CONCAT(ENAME,JOB) "2"
FROM TBL_EMP;
/*
SMITHCLERK SMITHCLERK
ALLENSALESMAN ALLENSALESMAN
WARDSALESMAN WARDSALESMAN
JONESMANAGER JONESMANAGER
MARTINSALESMAN MARTINSALESMAN
BLAKEMANAGER BLAKEMANAGER
CLARKMANAGER CLARKMANAGER
SCOTTANALYST SCOTTANALYST
KINGPRESIDENT KINGPRESIDENT
TURNERSALESMAN TURNERSALESMAN
ADAMSCLERK ADAMSCLERK
JAMESCLERK JAMESCLERK
FORDANALYST FORDANALYST*/
SELECT ENAME || JOB || DEPTNO "1"
,CONCAT(ENAME,JOB,DEPTNO)
FROM TBL_EMP;
--==>>"invalid number of arguments" 오류발생
--> 두 개의 문자열을 결합시켜주는 기능을 가진 함수이며
--> 오로지 2개만 결합시킬 수 있다.
SELECT ENAME || JOB || DEPTNO "1"
, CONCAT(CONCAT(ENAME,JOB),DEPTNO) "2"
FROM TBL_EMP;
/*
SMITHCLERK20 SMITHCLERK20
ALLENSALESMAN30 ALLENSALESMAN30
WARDSALESMAN30 WARDSALESMAN30
JONESMANAGER20 JONESMANAGER20
MARTINSALESMAN30 MARTINSALESMAN30
BLAKEMANAGER30 BLAKEMANAGER30
CLARKMANAGER10 CLARKMANAGER10
SCOTTANALYST20 SCOTTANALYST20
KINGPRESIDENT10 KINGPRESIDENT10
TURNERSALESMAN30 TURNERSALESMAN30
ADAMSCLERK20 ADAMSCLERK20
JAMESCLERK30 JAMESCLERK30
FORDANALYST20 FORDANALYST20
MILLERCLERK10 MILLERCLERK10*/
--> 내부적인 형 변환이 일어나며 결합을 수행하게 된다.
-- CONCAT() 은 문자열과 문자열을 대상으로 결합을 수행하는 함수이지만
-- 내부적으로는 숫자나 날짜를 문자 타입으로 바꾸어주는 과정이 포함되어 있다.
--==========================================================
--- JAVA 의 String.subString(n,m)
--○ SUBSTR() / SUBSTRB() → 문자열 추출 함수
------ -----
-- 개수기반 바이트기반
SELECT ENAME "1"
, SUBSTR(ENAME, 1, 2) "2"
, SUBSTR(ENAME, 2, 2) "3"
, SUBSTR(ENAME, 3, 3) "4"
,SUBSTR (ENAME, 2) "5"
FROM TBL_EMP;
/*
SMITH SM MI ITH MITH
ALLEN AL LL LEN LLEN
WARD WA AR RD ARD
JONES JO ON NES ONES
MARTIN MA AR RTI ARTIN
BLAKE BL LA AKE LAKE
CLARK CL LA ARK LARK
SCOTT SC CO OTT COTT
KING KI IN NG ING
TURNER TU UR RNE URNER
ADAMS AD DA AMS DAMS
JAMES JA AM MES AMES*/
-- 주의할점 ★인덱스가 1부터 시작한다는 점 그리고 ★1부터 2개 라는 점
-- 이 자바와 다르다.
-- SUBSTR()문자열을 추출하는 기능을 가진 함수
-- 첫 번재 파라미터 값은 대상 문자열 (추출 대상)
-- 두 번째 파라미터 값은 추출을 시작하는 위치(이 때 인덱스는 1부터 시작)
-- 세 번째 파라미터 값은 추출할 문자열의 갯수(생략 시 시작위치부터 끝까지)
-- ○ TBL_SAWON 테이블에서 성별이 남성인 사원만
-- 사원번호, 사원명, 주민번호 , 급여 항목을 조회한다.
-- 단, SUBSTR() 함수를 사용할 수 있도록 하며.
-- 급여 기준으로 내림차순 정렬을 수행할 수 있도록 한다.
SELECT *
FROM TBL_SAWON;
SELECT SANO "사원번호", SANAME "사원명", JUBUN "주민번호" , SAL "급여"
FROM TBL_SAWON
WHERE SUBSTR(JUBUN,7,1)='1' OR SUBSTR(JUBUN,7,1)='3'
ORDER BY SAL DESC;
/*
1009 정준이 9804251234567 4000
1011 선동열 7505071234567 3000
1016 남이 7012121234567 2000
1014 남주혁 0203043234567 2000
1015 남궁선 0512123234567 1000*/
--★ 형변환 꼭하기!!!!!
'📚Study Note > ORACLE' 카테고리의 다른 글
[ ORACLE ] LPAD() RPAD() LTRIM() RTRIM() TRANSLATE() REPLACE() (0) | 2021.03.29 |
---|---|
[ ORACLE ] 4일차 - LENGTH() LENGTHB(), INSTR(), REVERSE(), (0) | 2021.03.29 |
[ ORACLE ] 3일차 ⓑ UPPER() LOWER() INITCAP() , TO_DATE() 날짜 형식 변환해서 크기 비교, BETWEEN A and B, ANY 연산자 (0) | 2021.03.26 |
[ ORACLE ] 3일차 ⓐ(시간반환함수, 데이터합치기 ||, 문자열 안에 ''_어퍼두개) NVL() NVL2() COALESCE() (0) | 2021.03.26 |
▒▒▒ 키보드 주요 특수문자 영문이름 ▒▒▒ (0) | 2021.03.26 |