본문 바로가기

데이터베이스/SQL & PL/SQL

[SQL] OUTER JOIN, 외부조인(LEFT, RIGHT, FULL) INNER JOIN, 내부조인에 이은 외부조인 입니다. 내부조인을 접한후에 외부조인을 접하면 개념이 이해가 안갈데가 더 많은데요. 요렇게 생각해보는건 어떨까요? 내부조인 결과+@ 제가 이렇게 한건 결국 외부조인은 내부조인처럼 조인조건을 만족하는 결과에다가(내부조인의 결과와 같습니다.) 내가 조인을 건 어느 테이블의 데이터를 더 보겠다는 겁니다. 그러니 외부조인을 이용해서 데이터를 조회했을 경우에 어느 한쪽 테이블의 값이 null이고 다른 테이블의 데이터는 값이 나오게 되는거죠. 일단 이렇게 알고나서 구문형식을 보도록 할게요. SELECT 테미블명.컬럼명1, 테미블명.컬럼명2, 테미블명.컬럼명3, .. FROM 테이블 명1 (LEFT, RIGHT, FULL) OUTER JOIN 테이블명2 ON 조인조건; .. 더보기
[SQL] INNER JOIN, 내부조인에 대해서 알아보자! (Equi INNER JOIN) 사용하게될 테이블들의 컬럼명입니다. desc조회를 했어요. 1. employees 테이블입니다. 2. departments 테이블입니다. 우선 타이틀에 두개의 조인타입에 대해서 적어 놧는데요. 동일한 타입의 JOIN 입니다. 다만 INNER JOIN 할때 명시해 놓은 조인조건의 결과, 로우가 조인에 참여한 테이블의 조회조건에 상응하는 로우수가 같기때문에 동등하단 의미로 Equi라는 것이 붙은 것입니다. 똑같으니 염려 마세요. 내부조인이라고 불리우는 INNER JOIN 외에도 OUNTER JOIN, CROSS JOIN, NATURAL JOIN이 존재합니다. 우선 여기선 INNER JOIN에 대해서 알아볼건데요. 문법은 다음과 같습니다. SELECT 테이블명.컬럼명1, 테이블명.컬럼명2, ... FROM 테.. 더보기
[SQL] JOIN 조인에 대해서 알아보자! 우리가 여태껏 SQL 문을 써오면서 썻던 hr 스키마 계정에서 항상 employees 테이블에 있는 department_id를 활용을 했었는데요. 그때 아이디로만 활용을 했을뿐 부서명을 알지 못했는데요. 우선 employees 테이블을 조회하여 확인해 보겠습니다. 보세요. 부서명과 관련된 컬럼이 없죠? 그리고 다른 것도 한번 보세요. 하고 있는일, 과업(JOB_ID) 부분도 조회해보면 ID만 알수 있을뿐 이름을 알 수 없습니다. 그럼 이러한 정보는 어디에 있을까요? employees 테이블과 같이 다른 테이블에 그 정보들이 존재합니다. 여기서 테이블에 대해서 설명하고자 한다면 성격이나 데이터 타입이 비슷한 것을 세트로 묶어 놓은 것이라 이야기 할수 있는데요. 우리가 요구한 각 정보들은 department.. 더보기
[SQL] 그룹으로 묶어서 관리해봅시다, GROUP BY! 이제 이쯤 보셨다면 SQL이랑은 많이 친해졌을듯 한데요~ 조금만더 열심히 해요~ 저두 열심히 한답니다!! 앞에서 SUM(), AVG()에 대해서 조금 했었죠? 이와 같은 함수와 같이 쓰이는게 'GROUP BY'입니다. 조금 눈치 채셨을지는 모르겠어요. 이 구문은 데이터들을 묶어서 쿼리를 처리할때 쓰인답니다. 묶는다라.. 감이 안잡히시나요? 간단합니다. 이상한 예이지만. 초등학교 전국 체전이 있습니다. 여기서 우리는 A 부터 Z까지 26개 초등학교가 있는데요. 우리는 여기서 각 초등학교의 참가한 학생수를 알고 싶은겁니다. 각!! 학교별로 말이죠. 그러면 여기서 A라는 학교에 속해있는 100명의 학생들은(가정) A라는 학교라는 공통점이 있고, B라는 학교에 속해있는 120명의 학생들은 B라는 같은 학교를 다.. 더보기
[SQL] 색다른 쓰임, NVL2! 이전글에서 NVL함수에 대해서 살펴봤는데요. NVL함수에 이은 두번째 버전이 있습니다. 그것은 NVL2죠! 다를건 없습니다. 넣는 파라미터 값이 하나더 추가 되었는데요. 문법은 다음과 같습니다. NVL2(컬럼명, 데이터1, 데이터2) 어떻게 쓰냐면요 해당 컬럼에 데이터가 있으면 데이터1을 사용하구요, 반면에 데이터가 없으면 데이터2를 사용합니다. 조금의 차이가 있나요? 있습니다. NVL2는 NVL과는 달리 데이터가 있는 경우에도 명시된 데이터로 바꾸어 버리죠. 만일 이렇게 쓴다면 NVL과 똑같습니다. salary 가 NULL이고 그 컬럼에 대해서 NVL(salary, 0) - 해당 salary 값이 null이면 0으로 아니면 명시된 salary로 NVL2(salary, salary, 0) - 해당 sal.. 더보기
[SQL] NULL 상태도 처리하자, NVL 함수! 우리가 일반 연산자나 그룹 함수(sum, avg 등)를 쓰다보면 각 컬럼의 값이 null인 행이 존재하는데요, 이때 그룹 함수들은 이 null인 행을 연산처리를 안하거나 무시를 합니다. 가령 예를 들면 null은 값이 아닌 상태이기 때문에 아무리 +,-,/,* 등을 해줘도 결과같은 null로 테이블을 조회 했을때 아무것도 표시되지 않습니다. 한번 보실까요? 다음은 월급과 성과급(커미션)을 곱해서 연봉을 계산해볼건데요. 여기서 유의하셔야 할건 커미션을 받는 사람과 그렇지 않는 사람이 있다는 겁니다. SQL> SELECT department_id, first_name, salary, commission_pct AS "CM", salary*12+salary*commission_pct*12 AS "AN_SAL".. 더보기
[SQL] 테이블의 데이터를 바꾸어보자, UPDATE! 이번 글에서는 이미 입력된 데이터를 바꾸어 보도록 합시다. 역시 테이블은 이미 만들어 놓은 hr.employees1 으로 실습을 진행하겠습니다. 구문은 UPDATE로 해석이 되는데요. 다음과 같이 문장이 성립됩니다. SQL> UPDATE 테이블명 SET 바꿀 데이터 WHERE 업데이트할 데이터의 조건 여기서 SET에서는 WHERE절로 조회된 데이터(행)들을 어떠한 정보로 바꿀껀지에 대해서 서술하게 됩니다. 그럼 다음과 같이 써볼게요. SQL> UPDATE hr.employees1 SET salary=1000 WHERE first_name='Ricardo'; 이 구문은 이와 같이 해석될 수 있습니다. 나는 hr.employees1 테이블로 부터 first name이 리카르도인 녀석을 찾아서 그 녀석의 월급.. 더보기
[SQL] 테이블의 데이터를 지워보자, DELETE! 데이터 삭제를 해볼까요? 관련 테이블은 테이블 생성글에서 만들었던 hr 스키마의 employees1과 데이터 입력글에서 추가했던 데이터들로 해볼게요. 기본 문법은 이렇습니다. SQL> DELETE FROM 테이블명 WHERE 조건; 여기서 한가지 주의할건 조건을 적어주지 않게 되면 그 테이블에 있는 모든 행들 즉, 데이터를 날려버리게 됩니다. 트랜잭션에 아시는분들은 ROLLBACK하면 되겠지 하시겠지만 그래도 주의하세요!! 그럼 예제로 사용하게될 employees1 의 테이블을 살펴볼까요? 위처럼 두개의 행이 존재하죠? 여기서 Julia를 퇴사(?)시켜버리겠습니다. 그냥.. 데이터를 지운다구요 ^^ 다음과 같이 할 수 있습니다. SQL> DELETE FROM hr.employees1 WHERE first.. 더보기
[SQL] 테이블에 자료를 입력하자, INSERT INTO 이전글에서 만든 hr계정의 employees1 테이블에 자료를 넣어보도록 할게요. 무엇보다 중요한건 각 컬럼에 정의되어있는 데이터 타입에 유의하면서 자료를 넣어야 한다는 것입니다. 만든 테이블에 데이터를 입력할때는 다음과 같이 INSERT INTO구문을 이용하는데요. 형식은 다음과 같습니다. SQL> INSERT INTO 스키마명.테이블명(컬럼명1, 컬럼명2, 컬럼명3, ...) VALUES(컬럼1데이터, 컬럼2데이터, 컬럼3데이터, ...); 이때 알아두셔야 될 규칙이 있는데요. 1. 명시된(입력된) 컬럼명의 순서에 따라 VALUES의 값도 순서대로 입력되어야 한다. 2. 테이블에 정의된 각 컬럼의 데이터 타입을 지켜야 한다. 3. 컬럼명이 명시 되어 있지 않을때는 '모든 컬럼에 대햐여' 이므로 모든 .. 더보기
[SQL] 테이블을 만들어보자, CREATE!! 데이터를 담는 곳이 어디인가요? 테이블이였죠? 이 테이블을 만드는 것에 대해서 알아볼까 합니다. 간단하니 따라오세요~ 일단 접속하는 계정에 저장공간에 대한 권한이 있어야 하구요. 관련된 권한 설정 내용은 다음을 링크를 참고 하시길 바랍니다. 시스템 권한 설정 관련 글 확인하기 자 시작하겠습니다. 우선 테이블을 만드는 문법은 다음과 같습니다. SQL> CREATE TABLE 스키마.테이블 명 (컬럼명 데이터 타입, 컬럼명 데이터 타입, .... ); 이렇게 해주시면 되겠는데요. 컬럼명에 해당하는 데이터 타입을 유의하면서 작성합니다. 데이터 타입에 관한 글은 다음 링크를 누르시면 볼 수 있습니다. 데이터 타입 관련 글 보기 기존에 주어졌던 hr계정의 employees 테이블을 보면서 한번 그대로 만들어 볼까.. 더보기