Oracle 14

오라클 SQL과 PL/SQL ( JOIN 연습문제 - 2 )

1. customer 테이블과 gift테이블을 join하여 고객이 자기 포인트보다 낮은 포인트의 상품 중 한 가지를 선택할 수 있다고 할 때 notebook을 선택할 수 있는 고객명과 포인트, 상품명을 출력하세요. SELECT C.GNAME, C.POINT, G.GNAME FROM CUSTOMER C, GIFT G WHERE C.POINT >= G.G_START AND G.GNAME = 'Notebook' 2. PROFESSOR 테이블에서 교수의 번호, 교수 이름, 입사일, 자신보다 입사일 빠른 사람 인원수를 출력하세요. 단 자신보다 입사일이 빠른 사람 수를 오름차순으로 출력하세요. SELECT P1.PROFNO, P1.NAME, TO_CHAR(P1.HIREDATE, 'YYYY/MM/DD') HIREDA..

오라클 SQL과 PL/SQL ( JOIN 연습문제 - 1 )

1. 학생테이블과 학과 테이블을 사용하여 학생이름, 1전공 학과 번호, 1전공 학과 이름을 출력하세요. 단 ANSI / ORACLE 두 방법 모두 작성하세요 ORACLE SELECT S.NAME STU_NAME, S.DEPTNO1 DEPTNO1, D.DNAME DEPT_NAME FROM STUDENT S, DEPARTMENT D WHERE S.DEPTNO1 = D.DEPTNO ANSI SELECT S.NAME STU_NAME, S.DEPTNO1 DEPTNO1, D.DNAME DEPT_NAME FROM STUDENT S LEFT OUTER JOIN DEPARTMENT D ON S.DEPTNO1 = D.DEPTNO 2. EMP2 테이블과 P_GRADE 테이블을 조회하여 현재 직급이 있는 사원의 이름과 직급,..

오라클 SQL과 PL/SQL ( OUTER JOIN )

OUTER JOIN ( 아우터 조인) INNER JOIN은 모든 테이블에 데이터가 존재하는 경우에만 결과값을 출력했습니다. OUTER JOIN은 INNER JOIN과 반대로 한쪽 테이블에는 데이터가 있고 한쪽 테이블에 없는 경우에 데이터가 있는 쪽 테이블의 내용을 전부 출력하는 방법입니다. 앞에서 살펴본 학생 테이블과 교수테이블의 예에서 학생은 있는데 지도규사가 결정이 안되었을 경우 이너조인으로는 학생이름이나 교수이름이 조회가 안되었습니다. 반드시 지도교수가 결정되지 않은 학생의 이름이나 교수의 이름까지 다 나와야 하는 경우라면 아우터 조인을 사용하면 됩니다. 모든 데이터를 다 출력할 수 있기 때문에 좋을 것 같지만 이 조인방식은 DB성능에 아주 나쁜 영향을 줄 수 있습니다. 만약 A , B 테이블을 조..

오라클 SQL과 PL/SQL ( INNER JOIN - 등가 조인 )

EQUI JOIN(등가 조인) 가장 많이 사용되는 조인으로 선행 테이블에서 데이터를 가져온 후 조인 조건절을 검사해서 동일한 조건을 가진 데이터를 후행 테이블에서 꺼내오는 방법입니다. 조건절에서 =(EQUAL)을 사용해서 EQUI JOIN이라고 합니다. 예를 통해 알아보겠습니다. EMP 테이블과 DEPT 테이블을 조인해서 조회하겠습니다. ORACLE SELECT EMPNO, ENAME, DNAME FROM EMP E , DEPT D WHERE E.DEPTNO = D.DEPTNO; ANSI JOIN SELECT E.EMPNO, E.ENAME, D.DNAME FROM EMP E JOIN DEPT D ON E.DEPTNO = D.DEPTNO; 위에서 살펴본 바와 같이 SELECT 절에 테이블이름.컬럼이름 같은..

오라클 SQL과 PL/SQL ( PIVOT / 달력만들기 )

PIVOT()함수 / 11g에서 추가 PIVOT 함수는 ROW 단위를 COLUMN 단위로 변경해 주고 UNPIVOT 함수는 반대로 COLUMN 단위를 ROW단위로 변경해 주는 기능을 합니다. CAL테이블로 설명하겠습니다. 이 CAL테이블로 달력을 만들어 보겠습니다. 1. PIVOT를 사용하지 않고 DECODE 함수를 활용하여 달력만들기 SELECT MAX(DECODE(DAY, 'SUN', DAYNO)) SUN, MAX(DECODE(DAY, 'MON', DAYNO)) MON, MAX(DECODE(DAY, 'TUE', DAYNO)) TUE, MAX(DECODE(DAY, 'WED', DAYNO)) WED, MAX(DECODE(DAY, 'THU', DAYNO)) THU, MAX(DECODE(DAY, 'FRI',..

오라클 SQL과 PL/SQL ( GROUPING SETS / LISTAGG )

GROUPING SETS() 함수 이 함수는 그룹핑 조건이 여러 개일 경우 아주 유용하게 사용될 수 있습니다. 예를 들어 STUDENT테이블에서 학년별로 학생들의 인원수 합계와 학과별로 인원수의 합계를 구해야 하는 경우에 기존에는 학년별 인원수 합계를 구하고 별도로 학과별로 인원수 합계를 구한 후 UNION 연산을 해야만 했습니다. SELECT GRADE, COUNT(*) FROM STUDENT GROUP BY GRADE UNION SELECT DEPTNO1, COUNT(*) FROM STUDENT GROUP BY DEPTNO1; SELECT GRADE, DEPTNO1, COUNT(*) FROM STUDENT GROUP BY GROUPING SETS (GRADE, DEPTNO1); 위 그림에서 첫번째 화..

오라클 SQL과 PL/SQL ( ROLLUP 함수 / 분석함수 - 1 )

분석 함수 기존 관계형 데이터베이스는 컬럼끼리의 연산, 비교, 집계 등을 앞에서 살펴본 그룹 함수들을 사용해서 쉽게 할 수 있었지만, 행끼리비교 연산하는 것을 하나의 SQL로 처리하는게 힘들었습니다. 만약 그런 작업들을 해야 할 경우가 생기면 PL/SQL과 같은 절차형 프로그램을 작성하거나 아주 복잡한 SQL문을 작성해야 했습니다. 그러나 오라클 버전이 올라가면서 행끼리의 연산이나 비교를 쉽게 지원해주기 위한 함수를 제공하게 되었는데 이 함수를 분석함수(ANALYTIC FUNCTION) 또는 윈도함수(WINDOW FUNCTION) 라고 합니다. 분석 함수를 잘 활용한다면 복잡한 로직을 비교적 간단한 SQL문장으로 해결할 수 있습니다. 1. 각 기준별 소계를 요약해서 보여 주는 ROLLUP() 함수 많은 ..

오라클 SQL과 PL/SQL ( 정규식 / REGEXP_SUBSTR )

REGEXP_SUBSTR 함수는 SUBSTR의 확장판으로 특정 패턴에서 주어진 문자를 추출해 내는 함수입니다. 아래 예는 주어진 문자열에서 첫 글자가 공백이 아니고 ( '[^]' ) 그 후에 'DEF'가 나오는 부분을 추출하라는 쿼리입니다. SELECT REGEXP_SUBSTR('ABC* *DEF $GHI%KJL', '[^ ]+[DEF]') FROM DUAL; 예제를 통해 알아보는게 제일 빠르니 예제를 알아봅시다. 1. 교수테이블에서 홈페이지 주소가 있는 교수들만 조사해서 아래의 화면처럼 나오게 출력하세요. 더보기 SELECT NAME, HPAGE, LTRIM(REGEXP_SUBSTR(HPAGE, '/([[:alnum:]]+\.?){3,4}?'), '/') "URL" FROM PROFESSOR WHERE..

오라클 SQL과 PL/SQL ( 정규식 / REGEXP_LIKE )

정규식(Regular Expression) 함수로 다양한 조건 조회하기 SQL 문장에서도 유닉스에서 사용하는 정규식을 사용하여 다양한 검색을 할 수 있습니다. 정규식이란 유닉스에서 검색을 할 때 주로 사용되는 기술로 다양한 메타문자들을 사용하여 검색 방법을 확장하는 것을 말합니다. 정규식함수를 잘 활용하면 아주 많은 일들을 할 수 있습니다. 하지만 조금 어려울 수 있으니 어렵더라도 연습을 해야합니다. 1. REGEXP_LIKE 함수 : LIKE 함수처럼 특정 패턴과 매칭되는 결과를 검색해내는 함수 예제 1. 영문자가 들어있는 행만 출력하기 SELECT * FROM T_REG WHERE REGEXP_LIKE(TEXT, '[a-z]'); SELECT * FROM T_REG WHERE REGEXP_LIKE(T..

오라클 SQL과 PL/SQL ( 단일행 함수 - 2)

LTRIM() : 왼쪽 제거 RTRIM() : 오른쪽 제거 REPLACE() : 문자변경 아주 많이 쓰임 퀴즈 1. EMP 테이블에서 아래와 같이 20번 부서에 소속된 직원들의 이름과 3~4번째 글자만 '-'로 변경해서 출력하세요 (책에선 2~3번이 잘려져 잇는데 퀴즈에 맞게 변경) 퀴즈 2. STUDENT 테이블에서 아래와 같이 1전공(DEPTNO1)이 101번인 학생들의 이름과 주민등록번호를 출력하되 주민등록 뒤 7자리는 '-' 와 '/'로 표시되게 출력하세요 퀴즈 3. STUDENT 테이블에서 아래 그림과 같이 1전공이 102번인 학생들의 이름과 전화번호, 전화번에서ㅏ 국번 부분만 '*' 처리하여 출력하세요. 단, 모든 국번은 3자리로 간주합니다. 퀴즈 4. STUDENT 테이블에서 아래와 같이 D..

728x90