본문 바로가기

728x90
반응형

배우기/복습노트[oracle sql]

(70)
[복습] SQL | Oracle 첫 번째 마주한 큰 산, join (3) - join 복습 어제 join 공부한 내용을 토대로 정리를 해보자면, 1. join 조건 형태에 따라 1) equi join ansi 표준) from table1 join table2 2) non equi join ansi 표준) from table1 join table2 2. 출력 데이터 생략 여부에 따라 1) inner join(기본) ansi 표준) from table1 join table2 2) outer join ansi 표준) from table1 left/right outer join table2 3. join 형태에 따라 1) cross join: 카티시안 곱이 출력되는 형태 oracle 표준) select * from emp, dept; (그냥 나열하면 된다, join 조건 명시하지 않으면 cross j..
[실습문제] 2023. 11. 1.(수) 문제 풀이(5문제) 실습문제 1. emp 테이블에서 각 직원의 이름, 사번, 급여와 함께 각 직원의 같은 부서에 있는 선배(입사일이 빠른) 수를 출력하여라. 단, 선배가 없더라도 출력이 되어야 한다. 먼저 나는 아래와 같은 방법으로 풀었다. 입사일자끼리 비교를 해야하는데, 먼저 들어온 사람 입사일자가 작기 때문에 사원 입사일에서 선배 입사일을 빼면 양수가나오는 것으로 접근하여 해결하였다. 결론적으로는 답은 맞게 나왔는데 선생님은 그냥 바로 날짜 비교를 하셨다. 사원보다 사수 날짜가 더 오래되었기 때문에 사원 날짜가 클 때 카운트를 하도록 하였다. 그리고 여기서 포인트는 outer join에 있다. 동명이인이 없다는 가정 하에 group by를 하면 직원별이라는 그룹이 성립된다. 동명이인이 있을 수 있기 때문에 사원번호로 넣..
[복습] SQL | Oracle 첫 번째 마주한 큰 산, join (2) + 복습후기(20231101) 바로 join에 대한 문제를 풀어보자. 참고로 테이블명이 기억이 나지 않는 경우 select * from tab; 실행하면 현재 접속한 유저 소유의 테이블 목록을 알 수 있다. student, exam_01 테이블을 이용하여 학년별 학생의 시험성적의 평균, 최고점수, 최저점수를 출력하여라. 많이 풀어 본 문제 형태여서 금방 풀 수 있었다. 쿼리에 group by를 먼저 쓰는 순간 select에 제한이 생긴다. 문제를 풀기 전 일단 데이터를 펼쳐두고 group by로 축약해가는 것이 좋다. 이렇게 사고의 흐름이 시작되어야 한다. 다음은 professor, student 테이블을 사용하여 각 교수의 이름, 직급, 교수의 지도학생 수를 출력하여라. 단, 지도학생이 없는 교수도 출력하여라. 문제에 ~별 이라고 ..
[복습] SQL | Oracle 첫 번째 마주한 큰 산, join (1) 드디어 join을 배웠다. 오늘 배우는 내내 머리에 힘 주느라 너무 지쳤지만, join 공부는 끝내고 집에 가야겠다. 복습 후기는 끝에 가서 풀기로 하고 바로 join으로 들어가겠다. join 다음에 서브쿼리도 함께 배울테지만, join과 서브쿼리는 함수가 아니라 표현식이다. join은 분리된 두 테이블을 참조한다. 엑셀의 vlookup처럼 분리된 한 쪽 테이블 컬럼 값을 다른 테이블을 참조해야지만 가져올 수 있는 경우 같은 것이다. 정리하자면, 다른 쪽 테이블 정보를 참조하여 필터링 하거나 혹은 원하는 결과를 출력하는 등 여러 목적을 가지고 있다. 다음 예제에서 살펴보겠다. emp, dept 테이블을 사용하여 사원이름, 급여, 부서명을 출력하여라. emp에는 deptno라는 컬럼이 있고 dept테이블에..
[복습] SQL | Oracle 두 테이블의 결합, 집합연산자(합집합 union, union all, 교집합 intersect, 차집합 minus) join에 본격적으로 들어가기 전에 집합연산자를 먼저 살펴보자. 집합연산자는 select문 결과를 하나의 집합으로 합쳐야 하거나, 여러 select문의 결과에 대한 합집합, 교집합, 차집합을 연산한다. 집합연산자는 select문과 select문 사이에 쓰인다. 즉, 위치가 정해져 있다. 집합연산자의 종류로 세 가지가 있다. 1) union / union all: 합집합 유사한 두 테이블이 있을 때 또는 완전히 분리되어있는 세트를 세로로 결합할 때 합집합으로 계산한다. 예를 들어, 10번 부서 정보와 20번 부서 정보가 각각 분리되어있다고 가정할 때, 합집합으로 정보를 모아보자. 이런 형태로 쓸 수 있다. 2) intersect: 교집합 교집합도 예시로 살펴보자. 10번 부서 정보가 아닌 부서원 집합과(2..
[복습] SQL | Oracle 그룹별 연산을 하기 위한 group by 와 having + 복습후기(20231031) group by는 select문의 네 번째 문법으로 성별 성적평균, 부서별 급여 평균, 시군구별 인원수 등 그룹별 연산을 수행하기 위하여 사용된다. 이렇게 작성하여 부서별 인원수를 구할 수 있으며 묶여진 그룹을 select로 보낸다. 이렇게 작성할 경우 에러가 뜬다(ORA-00979: GROUP BY 표현식이 아닙니다.) 먼저 deptno가 가능한 이유는 부서별로 요약을 했으니 부서 정보를 올릴 수 있다. group by는 분리-적용-결합 3가지 스텝 매커니즘으로 되어있다. 그리고 분리-적용-결합 순으로 수행된다. 이 뜻은, 위의 예를 적용하여 설명하면 부서별러 먼저 자료를 구분한다. 10번 부서, 20번 부서, 30번 부서 이렇게 정리를 한다. 그 다음 그룹별로 요약을 한다. 사용자가 원하는 함수를 적..
[복습] SQL | Oracle 조건을 나타내기, 일반함수(decode, case) 앞서 배운 함수를 다시 정리해보면, 1. 문자함수: upper, lower, initcap, replace, translate, lpad, trim, length, substr, instr 등 2. 숫자함수 2-1) 단일행함수(1:1): round/trunc, ceil/floor, sign, abs 2-2) 그룹함수: sum, avg, count, min/max 3. 날짜함수: sysdate, months_between, add_months, next_day, last_day 4. 변환함수: to_char, to_number, to_date 5. 일반함수: nvl, nvl2, 그리고 오늘 배운 decode, case decode와 case를 공부하기 전에 잠시 묵시적 형 변환에 대하여 설명하겠다. 묵시적..
[실습문제] 2023. 10. 30.(월) 문제 풀이(7문제) 실습문제1. PROFESSOR 테이블에서 2000년대 이전에 입사한 교수의 이름, 입사일, 이메일, 홈페이지 주소를 출력하여라. 단, 홈페이지 주소가 없는 경우 email_id를 사용하여 다음과 같이 출력되게 하라. http://www.itwill.co.kr/myprode 일단 원래라면 hpage가 빈 문자열일 경우와 null인 경우 두 개의 상황을 먼저 따져야 하지만 우리는 null이라고 이미 알고 있었다는 가정하에 풀었기 때문에, 나중에는 스스로 이런 포인트도 찾아봐야 할 것이다. 이 문제의 핵심은 nvl 사용법도 있지만 where절에 있다. 본 where 절은 hiredate < to_date('2000/01/01', 'YYYY/MM/DD/') 의 표현을 올바르게 했는지를 파악하여야 한다. to_d..
[문제풀이] 몇 가지 기초 문제 풀어보기 문제 1. 이름에 *를 왼쪽에 채워 모두 동일한 15개의 이름으로 변환하고 업무와 급여를 출력한다. lpad를 사용하여 빈 공간을 채우는 문제였다. 문제2. EMP 테이블에서 담당 업무 중 좌측에 ‘A’를 삭제하고 급여 중 좌측의 1(숫자)을 삭제하여 출력하여라. trim 을 사용하고, trim은 문자 삭제 함수니까 숫자 데이터인 sal을 문자로 치환하여 1을 삭제하였다. 문제 3. EMP 테이블에서 담당 업무 중 우측에 ‘T’를 삭제하고 급여 중 우측의 0을 삭제하여 출력하여라. 위 방법과 동일하게, 다만 방향은 반대이다. 문제 4. EMP 테이블에서 JOB에 ‘A’를 ‘$’로 바꾸어 출력하여라. replace와 translate를 사용하여 풀어보았다. 문제 5. EMP 테이블에서 현재까지 근무일수가 ..
[복습] SQL | Oracle null값 관련 함수인 일반함수(nvl, nvl2) + 복습후기(20231030) 일반함수 중 nvl 함수가 있다. 이는 null치환 함수로, nvl(대상, null치환값) 형태로 사용된다. null 치환값은 데이터 타입이 문자일 경우 문자, 숫자인 경우 숫자, 날짜인 경우 날짜이다. 즉, 대상과 null 치환값의 데이터 타입은 일치하는 것이 좋다. 참고로 null의 경우 문자의 null보다 숫자의 null이 더 위험하다. 숫자 null이 포함된 산수의 계산은 null이 리턴되므로 사전에 null이 포함되어 있는지, null로 인해 연산 결과가 잘못된 것은 없는지 꼭 확인하여야 한다. 이렇게 위의 테스트를 확인해보면 알 수 있듯이 sal+comm(null포함)은 null이 출력되므로 comm에 nvl 함수를 씌워 결과를 도출하면 된다. 즉 이런 문법은 불가하며 null값에 꼭 X를 넣..

728x90
반응형