테이블구조(로우+컬럼: 로우를 컬럼으로 자르면 셀이 생김)와는 다르게 화면 출력하기
→ 로우에 있는 값을 컬럼레벨에, 컬럼레벨에 있는 값을 로우레벨에 출력하기
SELECT 1, 2, 3 FROM dual;
SELECT 1 FROM dual
UNION ALL
SELECT 2 FROM dual
UNION ALL
SELECT 3 FROM dual;
--문법적인 문제만 해결할 뿐 의미없는 MIN함수
SELECT MIN (ename),
SUM (sal),
COUNT (sal),
AVG (sal)
FROM emp;
--공백포함 하나씩 출력
SELECT deptno, SUM (sal), COUNT (sal), AVG (sal)
FROM emp
GROUP BY deptno;
SELECT CEIL (ROWNUM / 4) cno,
DECODE (MOD (ROWNUM, 4), 1, ename) n1,
DECODE (MOD (ROWNUM, 4), 2, ename) n2,
DECODE (MOD (ROWNUM, 4), 3, ename) n3
FROM ( SELECT ename
FROM emp
ORDER BY ename);
--공백 제거 하나씩 출력
SELECT CEIL(ROWNUM / 4) cno,
MAX(DECODE (MOD (ROWNUM, 4), 1, ename)) n1,
MAX(DECODE (MOD (ROWNUM, 4), 2, ename)) n2,
MAX(DECODE (MOD (ROWNUM, 4), 3, ename)) n3,
MAX(DECODE (MOD (ROWNUM, 4), 0, ename)) n4
FROM ( SELECT ename
FROM emp
ORDER BY ename)
GROUP BY CEIL(ROWNUM / 4)
ORDER BY CEIL(ROWNUM / 4)
--콤마로 표시
SELECT CEIL(ROWNUM / 4) cno,
MAX(DECODE (MOD (ROWNUM, 4), 1, ename)) || ',' ||
MAX(DECODE (MOD (ROWNUM, 4), 2, ename)) || ',' ||
MAX(DECODE (MOD (ROWNUM, 4), 3, ename)) || ',' ||
MAX(DECODE (MOD (ROWNUM, 4), 0, ename)) as ename
FROM ( SELECT ename
FROM emp
ORDER BY ename)
GROUP BY CEIL(ROWNUM / 4)
ORDER BY CEIL(ROWNUM / 4)
서브쿼리(직접조건이 아니라 간접조건을 주기)
temp에서 연봉이 가장 많은 직원 사번, 성명, 연봉 출력
SELECT MAX(salary) FROM temp;
SELECT emp_id, emp_name, salary FROM temp
WHERE salary = 100000000;
SELECT emp_id, emp_name, salary FROM temp
WHERE salary = (SELECT MAX(salary) FROM temp);
temp에서 salary평균을 구하고 이보다 큰 금액을 받는 사원 사번, 성명, 연봉 출력
SELECT AVG(salary) FROM temp;
SELECT emp_id, emp_name, salary FROM temp
WHERE salary > (SELECT AVG(salary) FROM temp);
temp 직원 중 인천에 근무하는 직원의 사번, 성명 출력
SELECT emp_id, emp_name, dept_code FROM temp;
SELECT dept_code
FROM tdept
WHERE area = '인천';
--IN예약어 사용방법
SELECT empno, ename, deptno FROM emp
WHERE deptno IN(10, 20)
--IN 적용
SELECT emp_id, emp_name, dept_code FROM temp
WHERE dept_code IN (SELECT dept_code
FROM tdept
WHERE area = '인천')
연봉 외 커미션을 받는 직원 정보를 서브쿼리로 select 하여 부서 명칭별로 커미션 받는 인원수 출력
SELECT b.dept_name, count(*)
FROM temp a, tdept b
WHERE a.dept_code = b.dept_code
AND a.emp_id IN (SELECT emp_id FROM tcom)
GROUP BY b.dept_name
having 이용해 group by 조건주기
SELECT
AVG(sal) avg_sal
FROM emp
GROUP BY deptno
HAVING AVG(SAL) > 2000
영화 티켓을 받을 수 있는 사람의 명단, 현재 포인트, 영화 티켓 포인트, 티켓 사용 후 예상 잔여 포인트 출력
SELECT
b.name_vc as "이름"
, b.point_nu as "보유포인트"
, (SELECT point_nu
FROM t_giftpoint
WHERE name_vc = '영화티켓') as "영화티켓 포인트"
, b.point_nu - a.point_nu as "잔여포인트"
FROM t_giftpoint a, t_giftmem b
WHERE b.point_nu > a.point_nu
AND a.name_vc = '영화티켓'
김유신 씨가 보유하고 있는 마일리지 포인트로 얻을 수 있는 상품 중 가장 포인트가 높은 것 출력
SELECT name_vc, point_nu
FROM t_giftpoint
WHERE point_nu = (
SELECT MAX(a.point_nu)
FROM t_giftpoint a, t_giftmem b
WHERE a.point_nu < b.point_nu
AND b.name_vc = '김유신'
1. equlas
양쪽에 모두 있는 것 조회(둘 중 한 곳이라도 없으면 조회 안됨)
--temp에서 사번, 성명, 부서코드를 읽으며 부서명칭을 함께 출력
SELECT a.emp_id, a.emp_name, b.dept_code
FROM temp a, tdept b
WHERE a.dept_code = b.dept_code;
2. non-equals
조인 조건이 ‘=’이 아닌 다른 연산기호로 주어지는 경우
--temp와 emp_level을 이용해 emp_level의 과장 직급 연봉 상한/하한 범위 내에드는 직원의 사번, 성명, 직급, salary 출력
SELECT a.emp_id 사번
, a.emp_name 성명
, a.salary
, a.lev
FROM temp a, emp_level b
WHERE a.salary BETWEEN from_sal AND to_sal
AND b.lev = '과장'
3. outer-join
두 개이상의 테이블 조인할 때 한쪽 테이블의 행에 대해서 다른 쪽 테이블에 일치하는 행이 없더라도 다른 쪽 테이블 행을 null로 하여 행을 리턴해줌
SELECT d.deptno, d.dname, e.ename
FROM emp e, dept d
WHERE e.deptno(+) = d.deptno
SELECT b.emp_id 사번
, b.emp_name 성명
, b.salary 연봉
, a.from_sal 하한
, a.to_sal 상한
FROM emp_level a, temp b
WHERE b.lev = a.lev(+)
4. self-join
보통의 경우에 조인은 서로 다른 테이블과 관계형태를 갖지만, self join은 자기 자신과 관계형태를 맺음
SELECT
a.dept_code 부서코드
, a.dept_name 부서명
, b.dept_code 상위부서코드
, b.dept_name 상위부서명
FROM tdept a, tdept b
WHERE b.dept_code = a.parent_dept;'국비학원 > 수업기록' 카테고리의 다른 글
| 국비 지원 개발자 과정_Day102 (0) | 2023.04.25 |
|---|---|
| 국비 지원 개발자 과정_Day101 (0) | 2023.04.25 |
| 국비 지원 개발자 과정_Day99 (0) | 2023.04.20 |
| 국비 지원 개발자 과정_Day98 (0) | 2023.04.19 |
| 국비 지원 개발자 과정_Day97 (0) | 2023.04.18 |
댓글