본문 바로가기

SQL

[SQL] SET 연산자에 대해서 알아보자, INTERSECT, MINUS! 이글 보시기 전에 SET연산자에 관한 글 먼저 보시길 바랍니다. (밑의 링크를 누르시면 해당 페이지로 이동합니다.) SET연산자에 대해서 알아야할 사전지식 우선 INTERSECT 교집합 입니다. 이전 UNION에 관한 글을 보셨다면 UNION ALL에 썼던 테이블을 그대로 쓸테니 참고 바랍니다. INTERSECT는 두 테이블의 공통 요소만을 뽑아옵니다. 일단 다음 테이블은 한 학원의 두명의 강사의 강의를 듣는 학생들에 대한 테이블입니다. 1. 강사 1 2. 강사 2 여기서 조회하고 싶은건 어느 학생이 두 강사에게 모두 강의를 듣나~ 인데요. INTERSECT를 통해서라면 간단합니다. SELECT * FROM tutor1 INTERSECT SELECT * FROM tutor2; 이와같이 두명의 학생들이 조.. 더보기
[SQL] SET 연산자에 대해서 알아보자, UNION(ALL)! 이글 보시기 전에 SET연산자에 관한 글 먼저 보시길 바랍니다. (밑의 링크를 누르시면 해당 페이지로 이동합니다.) SET연산자에 대해서 알아야할 사전지식 이미 윗글에서 UNION이 무엇인지는 설명을 했기 때문에 쿼리를 실행시키면서 결과를 볼텐데요. 자~ 우선 UNION이 쿼리문에서는 어떻게 쓰이는지 모양새를 봅시다. SELECT 컬럼 1, 컬럼 2 FROM 테이블 UNION(OR UNION ALL) SELECT 컬럼 3, 컬럼 4 FROM 테이블 이렇게 쓸때 주의할 점이 있습니다. 두개의 쿼리의 조회 결과가 합쳐지는 것인데요, 합쳐질때 컬럼의 갯수 및 타입이 다르면 오류가 납니다. 우선 컬럼의 갯수는 SET연산자인 UNION으로 묶어지는 두 쿼리의 컬럼 갯수가 동일해야 합니다. 그렇지 않으면 오류가 나.. 더보기
[SQL] SET 연산자에 대해서 알아보자, 우선 배경지식! SET 연산자에 대해서 우리는 초중고 때 배웠던 집합의 개념을 다시 떠올려 볼 수 있습니다. 사실 초등학교때 배웠는지는 기억이 안나는데요. ^^; 집합의 개념만 잡고 있다면 SET연산자에 대해서 이해가 더 잘 될 겁니다. SET 연산자에서 다룰 내용은요 UNION, UNION ALL, INTERSECT, MINUS 입니다. UNION 들은 합집합에 해당되는 내용이겠구요. INTERSECT는 교집합, 그리고 MINUS는 차집합이 되겟습니다. 우선 혹시나 합집합에 대해서 모르시는 분들을 위해서 잠시 수학의 시간으로 돌아가볼게요 ^^ 합집합은 두개의 집합의 합, 표현식으로는 A∪B 으로 나타낼 수 있겠는데요. 두개의 집합이 합쳐질때 공통요소는 한번만 포함이 됩니다. 즉 예로, A 집합에는 1~5까지의 수가 존.. 더보기
[SQL] WHERE 절을 활용하자, NULL! NULL 은 의미하는 바 대로 존재하지 않는다 입니다. 오라클에서는 NULL을 값이 아닌 상태로 표시하기 때문에 우리가 알고 있는 연산자를 쓸 수 없습니다. department_id=null 과 같이 말이죠. 못 쓰는 것은 아니지만 우리가 의도한 값이 나오지 않게 됩니다. 이때 쓸수 있는 것이 IS NULL 인데요. 다른 SQL에서는 위와 같이 사용 가능합니다. 즉 오라클에서는 부서아이디가 NULL인 사원을 조회하고 싶을때 WHERE department_id IS NULL; 로 하게 되면 우리가 의도 한 것을 얻을 수 있습니다. 해봅시다. SELECT department_id, first_name, salary FROM hr.employees WHERE department_id IS NULL; 이렇게 쓰.. 더보기
[SQL] WHERE 절을 활용하자, LIKE! 쿼리를 이용해서 데이터를 조회 할 때 어떤 특정 패턴을 이용한 조회가 가능합니다. 가령, 회사의 사원들 중에 이름이 'J' 로 시작하는 하는 사원을 조회하고 싶다라던지 사원들의 전화번호가 001로 시작하는 사원들을 조회하고 싶을 때를 말하는 겁니다. 즉 데이터의 일부나 그런 조건을 이용할 수 있도록 가능하게 하는것이 LIKE 라는 키워드 입니다. 다음과 같이 쓸 수 있겠습니다. WHERE 컬럼명 LIKE 조건; 위의 '조건'에 해당하는 부분에 대해서 짚고 넘어갈게요. J로 시작하는 사원의 이름을 조회하고 싶다면 다음과 같이 하면 됩니다. 'J%' 여기서 '%'의 의미는 그 자리가 위치하는 곳에서 다른 문자나 숫자따위가 0개 또는 하나 이상임을 표시합니다. 즉 이렇게 된다면 이름 자체가 J 또는 James.. 더보기
[SQL] WHERE 절을 활용하자, EXISTS! EXISTS는 IN과 유사한 개념입니다. 하지만 적용되는 범위가 다른데요. IN의 괄호( ) 사이에는 특정값이나, 서브쿼리가 올 수 있는 반면에 EXISTS의 () 사이에는 서브쿼리만 올 수 있습니다. 그리고 IN는 ( ) 안에 있는 특정값이나 서브쿼리의 결과값이 포함이 되는지만 체크를 하지만 EXISTS는 () 안의 서브쿼리로 부터 해당 컬럼의 값이 존재 유무만 체크를 합니다. 서브쿼리에 관한 것은 다른글을 참조하면 되겠습니다. 우선 IN을 통해서 부서아이디가 100 또는 110인 부서를 조회해봅시다. IN을 이용한 방법 2가지와 EXIST 문을 작성하겠습니다. 참고로 셋다 같은 결과를 반환하도록 작성할 것이구요. 1. IN에 특정값을 명시해줬습니다. SELECT department_id, employ.. 더보기
[SQL] WHERE 절을 활용하자, IN! 이번 글에서 알아볼 IN과 EXITS는 BETWEEN과는 조금 다릅니다. BETWEEN 이 어느 시작값에서 어느 끝값까지 범위값을 조건으로 하는데에 비해서 IN 과 EXITS는 범위라는 개념보다는 여러 해당 값을 조건으로 한다고 할 수 있습니다. 예를 들면 IN은 OR의 개념과 비슷하다고 보면 되겠는데, 절대 똑같다는 말이 아닙니다. SELECT department_id, first_name, salary FROM employees WHERE department_id=10 OR department_id=20 OR department_id=30; 위의 쿼리는 부서아이디가 10, 20, 30인 사원들의 정보를 보여주고 있는데, 이 또한 너무 깁니다.. 마치 우리가 전글처럼 AND로 사용해서 범위를 조건으로 .. 더보기
[SQL] WHERE 절을 활용하자, BETWEEN! 앞에서 AND와 OR을 이용한 WHERE절의 활용법을 익혔습니다. 한가지 생각해보죠. 우리가 회사의 사원들중에 월급이 '4000' 에서 '9000' 사이를 받는 직원들을 조회하고 싶다. 그렇다면 쿼리를 어떻게 작성해야 할까요? 앞에서 배운 AND를 이용해서 나타낼 수 있습니다. SELECT dep.department_name, emp.first_name, emp.salary FROM hr.employees emp INNER JOIN hr.departments dep USING (department_id) WHERE emp.salary>4000 AND emp.salary4000 ↔ WHERE emp.salary BETWEEN 4000 AND 9000; AND emp.salary 더보기
[SQL] WHERE 절을 활용하자, AND · OR!! 지금까지 WHERE절을 접할때 단순한 연산자 즉, 기본 수식 연산자(+, -, /, * )와 비교연산자(=, ,=) 를 이용하여 쿼리에 조건을 부여할 수 있었는데, 이것들 말고도 다른 표현식들이 있습니다. 이를테면, 이번에 소개할 "AND"와 "OR"이 그것인데, 의미는 우리가 알고있는 영어식 표현과 동일합니다. AND는 당연히 '그리고~' 라는 표현이 되겠고 OR은 '또는, 그렇지 않으면' 라는 표현으로 해석할 수 있겠습니다. 이것들을 이용해서 WHERE절에 한개 이상의 조건을 부여할 수 있는데, 다음 실습문을 통해서 차례대로 AND · OR 에 대해서 알아봅시다. SELECT department_id, manager_id, first_name FROM hr.employees WHERE dep.. 더보기
[SQL] NATURAL JOIN, 자연스럽나요? 타이틀이 좀. 웃깁니다. 자~ 넘어갑시다. 이번에는 NATURAL JOIN에 대해서 알아봅시다. 이것도 별것 없습니다. 단지 조인하는 두테이블에 대해서 자동으로 조인조건을 같은 데이터형식과 컬럼명을 사용하고 있는~ 으로 한정시킵니다. 알아서 묶어주는 거죠. 그래서 조인조건을 명시해줄 필요가 없는데요. NATURAL JOIN 도 어느정도 의미만 알것 같아서. 바로 예시만 보고 끝을 내도록 할게요. employees 테이블과 departments 테이블을 내부조인을 해서 데이터를 조회한겁니다. 결과는 NATURAL JOIN과 동일한 조회결과를 내기위해서 다음과 같이 쓰였습니다. SELECT emp.department_id, dep.department_name, emp.first_name FROM hr.emp.. 더보기