본문 바로가기

전체 글

(143)
SQL Sub Query Having 절 서브쿼리 문제 360 직업, 직업별 토탈월급 출력 select job, sum(sal) from emp group by job; 문제 361 위의 결과에서 SALESMAN 의 토탈월급보다 더 큰것만 출력 select job, sum(sal) from emp group by job HAVING SUM(SAL)> (select sum(sal) from emp where job = 'SALESMAN'); salesman 의 토탈월급은 GROUPING 된 결과에대한 조건이므로 HAVING 절에다가 서브쿼리문을 작성 즉 ; 그룹함수로 검색조건을 줄때에는 WHERE 절에 사용하면 안된다. 문제 362 직업, 직업별 인원수를 출력하는데 직업이 어널리스트인 사원들의 인원수보다 더많은것만 출력하시오 select job, coun..
SQL Sub Query Exists / Not Exists 존재여부 EXISTS 예제 74 : dept에서 부서번호, 부서위치를 출력하는데 emp에 존재하는 부서번호에 대한 것만 출력 exists 없이 쓴 쿼리문 (다중행 서브쿼리) select loc, deptno from dept where deptno in (select deptno from emp); 만약 서브쿼리의 emp 테이블이 10억건의 데이터를 구성하고있다면 10억건의 부서번호를 다 출력하여서 메인쿼리로 리턴하기 때문에 성능이 느려진다. 따라서그렇게 되면 성능이 어마어마어마하게 느려진다.서브쿼리를 썼는데 너무 느리다면 exists 를 고려해 보아야한다. emp 테이블의 크기가 증가할 수록 성능이 느려진다. 그리고 10억건의 부서번호를 가지고 dept 테이블에서 데이터를 검색을 해야한다. 2. exists 문..
SQL Sub Query 다중컬럼 서브쿼리 다중컬럼 서브쿼리의 종류 non pair wise 방식 pair wise 방식 1. non pair wise 방식 예제 : 부서번호가 30 번인 사원들과, 월급도 같고, 커미션도 같은 사원들의 이름과 월급과 커미션과 부서번호를 출력 하시오 select ename, sal, comm, deptno from emp where sal in (select sal from emp ———————> 월급이 같은 컬럼 1 where deptno = 30 ) and comm in ( select comm from emp ————> 커미션도 같은 컬럼 2 where deptno =30); 위와 같이 여러개의 컬럼 (ename, sal, comm, deptno ) 대한값이 서브쿼리에서 메인쿼리로 리턴이 되면 다중컬럼 서브쿼..
SQL Sub Query 다중행 (IN, NOT IN) 연산자 1. IN = 리스트 값과 동일하다. 2. NOT IN = 리스트 값과 동일 하지 않다. (is not null 필수) 3. >ALL = 리스트에서 가장 큰 값보다 크다 4. >any = 리스트에서 가장 작은값 보다 크다 5. 왜? NULL 이 알수없는 값인데, 알 순 없지만 만약 True or true = true. 는 true 이다. True or false = true 이기때문에 null 값이 true 이던, false 이던 or 한 값은 true 가 나온다. 문제 : 관리자가 아닌 사원들의 이름을 출력하시오 (즉 자기밑에 직속부하가 없는 사원들 ) - 관리자인 사원들이 6명이므로 관리자가 아닌 사원들은 8명이 출력되어야한다. select ename from emp where empno no..
SQL Sub Query 단일행 where 절 = , ! =, , ≥, ≤ 가능 서브쿼리에서 검색한 값 (1가지) —→ 메인쿼리에서 받아서 실행 (이과정이 단일행이다) 서브쿼리가 먼저 실행 된뒤, 메인 쿼리가 실행된다. 예제 : 존스의 월급보다(서브쿼리) 더 많은 월급을 받는 사원들의이름,월급 출력 꼭서브쿼리문을 이용하지 않아도 쿼리를 두번 실행하여 결과값을 출력 할 수 있다. 과정 : 존스의 월급을 먼저 구한다.→ 나오는 월급(2975)을 보고 select sal from emp where ename = 'JONES'; jones 의 월급이 2975 이다. 이 값을 가지고 한번 더 쿼리를 날린다. select ename, sal from emp where sal > 2975; BUT 한번에 결과를 보기 위해 서브 쿼리를 이용한다. select en..
SQL 집합연산자 Minus 차집합 예제 70 select ename, sal, job, deptno from emp where deptno in(10, 20) minus select ename, sal, job, deptno from emp where deptno in (20,30); 답 : deptno 가 10 인것의 결과만 나온다. 첫번째 쿼리문에서 두번째 쿼리문의 결과를 빼기 때문에 ...
SQL 집합연산자 Intersect 교집합 18c 는 정렬되어나오지만, 21c 는 정렬기능이 빠져서 출력된다. 마찬가지로 테이블이 서로 달라도 intersect 가능하다. 예제 69 select ename, sal, job, deptno from emp where deptno in(10,20) intersect select ename, sal, job, deptno from emp where deptno in (20,30); 첫번째 쿼리와, 두번째 쿼리의 교집합인 deptno 가 20 인 ename, sal, job, deptno 만 출력되어진다. 문제 325 부서테이블의 부서번호와 사원테이블의 부서번호의 부서번호 교집합 출력 select deptno from dept intersect select deptno from emp;
SQL 집합연산자 UNION 데이터 중복 X 합집합 같은테이블이 아닌 다른테이블도 가능 union all, union 의 위아래의 쿼리문의 테이블이 서로 달라도 위아래로 연결가능 Union 이 Union all 과 다른점 2가지 첫번째 컬럼을 기준으로 데이터를 정렬 중복된 행을 제거한다. *** 21c 에서는 union 에서 데이터 order by 정렬이 되지 않는다. (데이터가 많아짐에 따라 쿼리 실행이 너무 느려져서... 정렬하고 싶으면 order by 절을 직접 입력) 예제 68 : select deptno, sum(sal) from emp group by deptno union welect to_number(null) as deptno, sum(sal) from emp; 문제 324 select to_char(hiredate, 'RRRR')as 입..