전체 글 20

[SQL][TIL] GROUP BY, ROLLUP, CUBE

GROUP BY 절 그룹 함수는 행 집합 연산을 수행하여 그룹별로 하나의 결과를 산출한다. (AVG, COUNT, MAX, MIN, SUM) GROUP BY 절을 사용하여 테이블의 행을 더 작은 그룹으로 나눌 수 있다. 그룹 함수에 속하지 않는 SELECT list의 모든 열은 GROUP BY 절에 있어야 한다. GROUP BY 열은 SELECT list에 없어도 된다 예) 리터럴값 100은 SELECT list에 없어도, 모든 사원의 급여의 합계인 sum(sal)은 출력됨 select sum(sal) from emp group by 100; group by rollup group by cube group by 절 column 수 = N일때, group by + rolllup 의 수행 결과 ※ group..

SQL 2021.07.09

[SQL][TIL] ADSQL문제풀이

Q_ 고객 테이블(custs)을 이용하여 다음 조건에 맞는 고객을 검색하세요. 가) 검색 컬럼 고객번호, 이름, 전화번호, 신용한도, 성별 나) 조건 1 신용한도가 5000이상 9000 이하인 고객 2 성별 컬럼이 여성(F)이거나 NULL인 고객 3 위 두 조건을 모두 만족해야 합니다. select cust_id, fname, phone, credit_limit, gender from custs where credit_limit between 5000 and 9000 and (gender = 'F' or gender is null); Q_ 고객 테이블(custs)과 주문 테이블(orders)을 이용하여 다음 조건의 결과를 검색하세요. 가) 검색 컬럼 고객이름(lname), 주문번호, 주문일자, 전화번호,..

SQL 2021.07.09

[SQL][TIL] exists 연산자 (where절의 in 연산자 대신 사용)

※ 반드시 subquery를 끼고 있어야 함 ※ subquery가 참이면 main query의 컬럼이 출력됨. sub query가 문법상 틀리지만 않으면 main query 출력 select * from departments d where exists (select * from employees where department_id = d.department_id); ※ where절의 in 연산자 대신에 쓰는건가ㅏ..? ㅇㅇ 속도 빠르게 하기 위해서 사용 // in 연산자를 쓸 경우, employees의 department_id의 모든 행을 다 검색하게 됨. => 속도가 느리다. select * from departments d where department_id in (select department_i..

SQL 2021.07.08

[SQL][TIL] Correlated Subquery, Scalar Subquery

※ Correlated Subquery : subquery안에 join을 사용한 것 ※ Correlated Subquery 에서는 ★후보행★을 이해하는 게 중요 !! Q_ 10번 부서에서 근무하면서, 10번 부서의 평균 급여보다 많은 급여를 받는 사원 정보 select * from emp e where deptno = 10 and sal > (select avg(sal) from emp where deptno = 10); Q_ 20번 부서에서 근무하면서, 20번 부서의 평균 급여보다 많은 급여를 받는 사원 정보 select * from emp e where deptno = 20 and sal > (select avg(sal) from emp where deptno = 20); Q_ 위의 두 문제를 한번에..

SQL 2021.07.08

[SQL][TIL] Not-IN 연산자 (null값 주의하자)

※ Not-IN 연산자는 null값을 처리해줘야 결과를 출력할 수 있다!! Q_ 부하직원이 없는 사원들의 정보를 출력하시오! (mgr에 해당하지 않는 직원, 후임이 없는 직원) select * from emp where empno not in (select mgr from emp); select * from emp where empno != 7839 and empno != 7566 and empno != (null) and empno != 7698; // mgr 컬럼의 null 값 때문에 출력이 안 됨. null값은 비교연산을 할 수 없다. 왜? ☆아직☆ 정해지지 않은 값이기 때문에 방법1) nvl 함수 이용 select * from emp where empno not in (select nvl(mgr,..

SQL 2021.07.08

[SQL][TIL] Quiz - 2021/07/07

Q1. EMP 테이블에서 급여가 1500이상 3000이하이면서 커미션이 NULL이거나 0인 사원을 검색하세요. alter session set nls_date_format = 'rr/mm/dd'; select * from emp where (sal between 1500 and 3000) and (comm is null or comm = 0); Q2. emp 테이블에서 12월에 입사한 사원을 입사일을 기준으로 검색하세요. select * from emp where to_char(hiredate, 'mm') = '12' order by hiredate; Q3. EMP 테이블에서, 이름(ENAME)이 'S' 또는 'A'로 시작하는 사원을 검색하세요. select empno, ename, sal, deptno..

SQL 2021.07.07

[SQL][TIL] Subquery

Q_ 7788사원의 급여보다 큰 급여를 받는 사원을 출력하세요 select * from emp e, emp j // e테이블과 j테이블이 둘다 메모리를 차지하게 됨. 비효율적 where j.empno = 7788 and e.sal > j.sal; // subquery 이용 -> select * from emp where sal > (select sal from emp where empno = 7788); Q_ 두 개 이상의 조건을 갖는 서브쿼리 select * from emp where job = (select job from emp where empno = 7782) and sal >= (select sal from emp where empno = 7782);

SQL 2021.07.07