본문 바로가기

Oracle/SQL

(98)
SQL [DML문] Insert 데이터 입력 DML - data manipluation language 데이터 조작언어 insert into 테이블명 ( 컬럼이름1, 컬럼이름2,컬럼이름3,,,) → 만약 컬럼이름을 기술하지 않았다면 원래있던 순서에 맞게 작성해야한다.. values ( 컬럼값1, 컬럼값2, 컬럼값3 ,,,,,,,,,,,,) —→위에 썼던 컬럼 순서대로 작성 예제 사원테이블에 데이터를 입력하는데 사원번호는 2812 사원이름은 JACK 월급은 3500, 입사일은 2021.11.16 직업은 ANALYST insert into emp(empno, ename, sal, hiredate,job) values (2812, 'JACK', 3500, to_date('2021/11/16', 'RRRR/MM/DD'),'ANALYST'); 숫자는 그냥써..
SQL Sub Query Select 절 = Scalar 서브쿼리 스칼라 서브쿼리는 Where 절이 없다면 데이터 분석함수로 쓰는게 더 속도가 빠르다. 예제 : 사원이름,월급, 사원테이블의 최대월급 출력 select ename, sal, (select max(sal) from emp ) as 최대월급 from emp; 문제 : 사원이름,월급, 사원테이블의 평균월급 출력 select ename, sal, (select avg(sal) from emp ) as 최대월급 ——>컬럼 가공하는것 안좋음 from emp; ——>튜닝전 emp 테이블을 두번 출력했기때문에 성능이 느리다. 스칼라 서브쿼리 대신에 데이터 분석함수를 이용하여 출력 해 보겠다. select ename, sal, avg(sal) over () from emp; sum (sal) over () or avg (..
SQL Sub Query From 절 In Line View from 절의 서브쿼리 라고도 하거나 in line view 라고도 한다. 서브쿼리를 view 로 생성하면 더 간단하게 작성 가능하다. 문제 : 순위를 1등만 출력 select * from ( select ename, sal, rank() over (order by sal desc)as 순위 from emp ) where 순위 =1; 범죄발생 시간 테이블 생성 문제 366 언피봇을 이용하여 컬럼을 데이터로 넣고 살인이 일어나는 시간과 건수 출력하시오 일단 언피봇문 생성 select * from crime_time unpivot (건수 for 시간 in (F0T3, F3T6 , F6T9 , F9T12 , F12T15, F15T18, F18T21, F21T24) ); 살인의 시간, 건수를 구한다. selec..
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..