코딩하는 도로시

코딩 교육, 코딩 과학, 코딩 동화, 코딩 게임 등등! 아이부터 어른까지 모두 가능한 코딩! 함께 해보아요~~

분류 전체보기 68

데이터베이스 이론

1. view : 많이 사용되는 select 문을 저장해놓은 가상의 테이블 create view empLogin(id, pass) as select ename, empno from emp; --> 오류 발생 -- 원래 오라클의 객체를 부를 때는 스키마이름.객체명으로 불러야 한다. -- 스키마 이름 : 소유자 이름 create view empLogin(id, pass) as select ename, empno from hr.emp; select * from empLogin; 2. data dictionary : 데이터 사전 -- 데이터베이스의 구성 정보를 저장하는 시스템 테이블 -- system catalog, meta data 라고 한다. -- 누구나 읽을 수 있지만 아무도 바꿀 수 없다. SQL을 실행..

개발메모장 2014.12.18

순위, 그룹(cube, rollup), Grouping

1. rank() 함수, dense_rank() 함수 select empno, ename, rank() over(order by empno desc) from emp; 1_1. partition by : 통계함수를 적용할 대상을 지정 select deptno, empno, ename, rank() over(partition by deptno order by empno desc)from emp; 1_2. emp 에서 급여순위가 5등 이내인 사원을 출력 => '인라인뷰' 이용 select 등수, ename, sal from (select rank() over (order by sal desc) 등수, ename, sal from emp) where 등수 rank()를 이용해서 순위를 출력하는 인라인뷰를 대상..

개발메모장 2014.12.18

다중컬럼 서브쿼리

: 여러 개의 컬럼을 비교 ex1 > 30번 부서에 있는 임의의 사원의 급여, 보너스와 일치하는 사원의 정보 출력 select * from emp where sal in (select sal from emp where deptno=30) and nvl(comm,-1) in(select nvl(comm, -1) from emp where deptno=30); --6명 나온다. ex2 > 부서별 부서명과 최초입사자의 이름과 최후입사자의 이름을 출력하시오. select deptno, (select ename from emp e where e.deptno=dept.deptno and hiredate=(select min(hiredate)from emp where emp.deptno=e.deptno)) 최초입사자..

개발메모장 2014.12.18

상관관계 서브쿼리, 복수행 서브쿼리

사전문제 1) 가장 많은 사원을 관리하는 관리자의 이름 --1. 관리자별로 관리자의 이름과 관리하는 사원수를 출력 select m.ename, count(*) 사원수 from emp e, emp m where e.mgr=m.empno group by m.ename; --2. 1번 쿼리를 인라인뷰로 해서 최대값을 출력 select max(사원수) from (select m.ename, count(*) 사원수 from emp e, emp m where e.mgr=m.empno group by m.ename); --3. 2번 쿼리를 서브쿼리로 해서 관리하는 사원의 최대값 --4. 3번에 해당하는 관리자의 이름을 출력 --답 : select ename from emp where ename = (select m...

개발메모장 2014.12.18

SQL 서브쿼리

: select 문 안에 기술된 select 문 ​ - 서브쿼리가 먼저 실행된 다음 메인 쿼리가 실행 - 서브쿼리의 분류 * 위치에 따라 --select 다음 : scalar 서브 쿼리 --from 다음 : inline view --where 다음 : 서브쿼리 * 유형에 따라 -- 단일행 : 하나의 행을 리턴 -- 다중행 : 여러 개의 행을 리턴, 다중행 연상자 in, all, any, exists 를 사용 -- 다중열 1) 단일행 서브쿼리 : where 절의 조건에 사용. -- SMITH의 관리자 이름을 출력 select mgr from emp where ename='SMITH'; -- 의 실행결과 mgr 번호 7902를 얻은 다음 select ename from emp where empno=7902;..

개발메모장 2014.12.18

SQL Join

-> 제품에는 있지만 판매에는 없는 데이터를 조회 * employees 테이블에 들어 있는 카디널리티(tuple의 개수)를 확인해보시오. ->(107개) * department와 조인하여 first_name, department_name을 출력하시오. -> (106개 : 부서가 없는 직원이 1명 있음을 의미) -- 부서가 없는 직원도 출력하시오. -> 외부조인이 필요. 1. 오라클의 외부조인 : 무조건 출력할 테이블의 반대쪽에 (+) select first_name, department_name from employees e, departments d where d.DEPARTMENT_ID=e.DEPARTMENT_ID(+); 2. ANSI 표준 외부조인 : 왼쪽은 무조건 출력하려면 왼쪽 외부 조인. se..

개발메모장 2014.12.18

SQL 예제2

--1. insa 테이블에서 근무년수가 10년 이상인 사람만 출력(이름, 입사일, 근무년수) select name, ibsadate, trunc((sysdate-ibsadate)/365,0) 근무년수 from insa where trunc((sysdate-ibsadate)/365,0)>=10; select * from insa; --2. insa 테이블에서 basicpay+sudang가 100만원 미만, 100만원 이상~200만원 미만, 200만원 이상인 직원들의 수 출력 select count(*) from insa group by trunc((basicpay+sudang)/1000000,0); --3. INSA 테이블에 주민번호를 가지고 출생년도별 직원수 출력 select substr(ssn,1,2)..

개발메모장 2014.12.18

SQL 날짜 관련 명령어, 그룹함수, 조건명령문

1. 오늘의 날짜 : sysdate select sysdate from dual; 2. 날짜에서 년도 추출 ( to_char, extract) select to_char(sysdate, 'yyyy') from dual; -- 문자열형식(좌측 정렬, 처리속도가 조금 더 빠름) select extract(year from sysdate) from dual; -- 숫자형식(우측 정렬) --근무일수, 근무개월수, 근무년수를 출력하시오. select round(근무일수), round(근무일수/30), round(근무일수/365) from(select round(sysdate - hiredate) 근무일수 from emp); select empno 사번, ename 이름, 월급*12 연봉 from (select e..

개발메모장 2014.12.18

SQL 예제

1. insa.sql을 실행해 insa 테이블을 생성하시오. select * from insa where city ='서울' and basicpay>=1500000; 2.출신도가 서울이면서 기본급이 150만원 이상인 사람 출력 (name, city, basicpay, ssn) select * from insa where city='인천' and basicpay between 1000000 and 2000000; 3. 출신도가 '인천' 이면서, 기본급이 100만원~200만원인 경우만 출력. select name, city, buseo from insa where city in('서울','인천','경기' ) order by city; 4. 출신도가 서울, 인천, 경기인 사람만 출력 (name, city, b..

개발메모장 2014.12.18