<서브쿼리 -다중행>

 

  • 서브 쿼리에서 여러 행이 검색되는 쿼리문. 연산자를 제외하면 단일 행 서브 쿼리와 같음

1
2
3
SELECT [DISTINCT] 컬럼, 컬럼...
FROM 테이블
WHERE 컬럼 <다중행 연산자> (SELECT 컬럼 FROM 테이블);
cs

 

  • 다중행 연산자의 종류

    • IN: 검색된 값 중 하나만 일치하면 참

    • 비교연산자+ANY(서브쿼리): 검색된 값 중 조건에 맞는 값이 하나 이상 있으면 참

    • 비교연산자+ALL(서브쿼리): 모든 검색된 값과 조건에 맞아야 참

 


 

  • IN

  • employees 테이블의 90번 부서의 월급과 같은 월급을 받는 직원들을 출력

1
2
3
4
5
SELECT employee_id, first_name, last_name, salary
FROM employees
WHERE salary IN (SELECT salary
                 FROM employees
                 WHERE department_id = 90);
cs

 

 

 


 

  • ANY: 하나의 조건만 만족해도 됨 (앞에 연산자가 꼭 붙어야함)

  • employees 테이블의 90번 부서의 어느 한 직원보다 급여가 같거나 많은 월급을 받는 직원들을 출력

1
2
3
4
5
SELECT employee_id, first_name, last_name, salary
FROM employees
WHERE salary >=ANY (SELECT salary
                    FROM employees
                    WHERE department_id = 90);
cs

 

 

 


 

  • ALL: 모든 조건을 만족해야 함

  • employees 테이블의 90번 부서의 직원들보다 급여가 같거나 많은 월급을 받는 직원들을 출력

1
2
3
4
5
SELECT employee_id, first_name, last_name, salary
FROM employees
WHERE salary >=ALL (SELECT salary
                    FROM employees
                    WHERE department_id = 90);
cs

 

 

 


 

 

<서브쿼리 다중행 예제>

 

  • 부서번호 (department_id)가 20번인 직원들의 매니저번호(manager_id)와 같은 매니저를 가지는 직원들을 출력 (단 20번 부서의 직원은 제외)

1
2
3
4
5
6
7
SELECT employee_id, first_name, job_id 직종, salary 급여
FROM employees
WHERE manager_id IN (SELECT manager_id
                FROM employees
                WHERE department_id=20)
      AND department_id !=20;
 
cs

 

 

 

 

  • job_id가 'ST_MAN'인 직원들 중 어느 한 직원 보다도 급여가 작은 직원들을 출력 

(ST_MAN 직책의 급여는 5800~8200사이. 따라서 8200보다 급여가 작은 직원들이 출력됨)

1
2
3
4
5
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary < ANY (SELECT salary
                    FROM employees
                    WHERE job_id='ST_MAN');
cs

 

 

 

 

  • 직책이 'IT_PROG'인 직원들보다 급여가 작은 직원들을 출력

(IT_PROG 직책의 급여는 4200~9000사이. 따라서 4200보다 급여가 작은 직원들이 출력됨)

1
2
3
4
5
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary < ALL (SELECT salary
                    FROM employees
                    WHERE job_id='IT_PROG');
cs

 

 

 

'Learning > SQL' 카테고리의 다른 글

집합연산자 (UNION, INTERSECT, MINUS)  (0) 2020.06.18
서브쿼리 - 다중열  (0) 2020.06.18
서브쿼리 - 단일행  (0) 2020.06.18
조인 (JOIN) - 리뷰 및 예제  (0) 2020.06.18
조인 (JOIN) - 교차조인  (0) 2020.06.18

<서브쿼리 - 단일행>

 

  • 서브 쿼리 (Sub Query): 하나의 SQL문에 포함되어 있는 또 다른 SQL문으로 메인 쿼리(main query)보다 더 먼저 실행됨

    • 단일행 서브 쿼리: SELECT문에서 오직 하나의 행만 반환하는 쿼리. 단일 행 연산자(=,>,>=,<,<=,<>,!=)

    • 다중행 서브 쿼리: 하나 이상의 행을 반환하는 서브쿼리. 단일행 연산자를 사용하지 못하며, 다중행 연산자(IN, NOT IN, ANY, ALL, EXISTS)만 사용가능

    • 다중열 서브 쿼리: 결과 값이 두 개 이상의 컬럼을 반환하는 쿼리.

 

 

  • 그룹함수를 서브쿼리로 이용

  • employees 테이블에서 가장 높은 급여를 받는 직원 정보를 출력

1
2
3
SELECT *
FROM employees
WHERE salary = (SELECT MAX(salary) FROM employees);
cs

 

 

 


 

<서브쿼리 예제>

 

  • Abel 직원보다 급여를 더 많이 받는 직원의 employee_id, last_name, salary 출력

 

    • Abel의 급여 확인

1
2
3
SELECT salary
FROM employees
WHERE last_name = 'Abel';
cs

 

 

    • 서브쿼리를 사용

1
2
3
4
5
SELECT employee_id, last_name, salary
FROM employees
WHERE salary > (SELECT salary
                FROM employees
                WHERE last_name = 'Abel');
cs

 

 


 

  • 'Bull'이란 last_name을 가진 사원의 부서에서 Bull보다 높은 급여를 받는 사원들을 출력

1
2
3
4
5
6
7
8
9
SELECT employee_id 직원번호, last_name 이름,
    department_id 부서번호, salary 급여
FROM employees
WHERE department_id = (SELECT department_id
          FROM employees
          WHERE last_name = 'Bull')
          AND salary > (SELECT salary
          FROM employees
          WHERE last_name = 'Bull');
cs

 

 

 


 

  • 'Russell'이란 last_name의 직원번호를 manager_id로 가지는 직원들의 last_name, salary, manager_id를 출력

1
2
3
4
5
SELECT last_name, salary, manager_id
FROM employees
WHERE manager_id = (SELECT employee_id
       FROM employees
       WHERE last_name = 'Russell');
cs

 

 


 

 

  • jobs테이블에 job_title이 'Stock Manager'의 job_id를 가진 직원들의 정보를 employees 테이블에서 찾아서 출력

1
2
3
4
5
SELECT *
FROM employees
WHERE job_id = (SELECT job_id
       FROM jobs
       WHERE job_title='Stock Manager');
cs

 

 

 

'Learning > SQL' 카테고리의 다른 글

서브쿼리 - 다중열  (0) 2020.06.18
서브쿼리 - 다중행  (0) 2020.06.18
조인 (JOIN) - 리뷰 및 예제  (0) 2020.06.18
조인 (JOIN) - 교차조인  (0) 2020.06.18
조인 (JOIN) - 외부조인  (0) 2020.06.18

<조인 (JOIN) - 리뷰 및 예제>

 

  • HR 계정 테이블 관계도

 

 

  • 기본키 Primary Key (PK): 빨간색 칼럼(열)

    • NULL 또는 중복값 불가능

 

  • 외래키 Foreign Key (FK): 기본키와 연결된 다른 테이블의 칼럼

    • 항상 참조하는 기본키에 있는 데이터를 사용

    • NULL값 가능

    • 되도록 기본키와 같은 열 이름으로 함

 

 

 

<조인 예제>

 

 

  • departments 테이블에 있는 manager_id와 employees 테이블의 employee_id를 조인하여 부서명, 매니저번호, 매니저 이름, 전화번호를 출력

1
2
3
4
5
6
7
SELECT d.department_name 부서명,
       d.manager_id 매니저번호,
       e.last_name ||' '|| e.first_name "매니저이름(직원이름)",
       e.phone_number 전화번호
FROM departments d
JOIN employees e
    ON d.manager_id=e.employee_id; --이름은 다르지만 참조하고 있음
cs

 

 

 

  • 조인을 이용하여 사원들의 직원번호 (employee_id), 고용일자(hire_date), 직종(job_id), 직책(job_title) 출력

1
2
3
4
5
6
7
SELECT e.employee_id 사원번호,
    e.hire_date 고용일자,
    j.job_id 직종,
    j.job_title 직책
FROM employees e
JOIN jobs j
    ON e.job_id=j.job_id;
cs

 

 

 

  • 직책(job_title)이 'Sales Manager'인 사원들의 입사년도 그룹 별 평균 급여를 출력. 입사년도를 기준으로 오름차순 정렬 (jobs 테이블과 조인, job_id를 이용, 입사년도: TO_CHAR(e.hire_date, 'YYYY')

1
2
3
4
5
6
7
8
SELECT TO_CHAR(e.hire_date,'YYYY') 입사년도,
    ROUND(AVG(e.salary)) 평균급여
FROM employees e
JOIN jobs j
    ON e.job_id=j.job_id
WHERE j.job_title='Sales Manager'
GROUP BY TO_CHAR(e.hire_date,'YYYY')
ORDER BY 1;
cs

 

 

 

  • 각각의 도시(city)에 있는 모든 부서 직원들의 평균급여를 조회. 평균급여가 가장 낮은 도시부터 도시명(city)과 평균연봉, 해당 도시의 직원 수를 출력. 단, 도시에 근무하는 직원이 10명 이상인 곳은 제외하고 조회. 

1
2
3
4
5
6
7
SELECT lo.city, round(avg(e.salary)), count(*)
FROM employees e
JOIN departments d ON e.department_id = d.department_id
JOIN locations lo ON d.location_id = lo.location_id
GROUP BY lo.city
HAVING COUNT (*)<10
ORDER BY 2;
cs

 

 

 

  • 자신의 매니저보다 급여를 많이 받는 직원들의 성(last_name), 급여(salary)와 매니저의 last_name과 salary를 출력

1
2
3
4
5
SELECT e.employee_id, e.last_name, e.salary, m.last_name, m.salary
FROM employees e --자신
JOIN employees m --매니저
    ON e.manager_id = m.employee_id
WHERE e.salary > m.salary;
cs

 

 

 

'Learning > SQL' 카테고리의 다른 글

서브쿼리 - 다중행  (0) 2020.06.18
서브쿼리 - 단일행  (0) 2020.06.18
조인 (JOIN) - 교차조인  (0) 2020.06.18
조인 (JOIN) - 외부조인  (0) 2020.06.18
조인 (JOIN) - 자체 조인 (Self Join)  (0) 2020.06.17

<조인 (JOIN) - 교차조인>

 

  • 교차조인(CROSS JOIN) (상호 조인): 한 쪽 테이블의 모든 행들과 다른 테이블의 모든 행을 연결

  • 결과 개수는 두 테이블의 행의 개수를 곱한 개수가 됨

  • 다른 말로 카티션 곱 (Cartesian Product)

1
2
3
SELECT 테이블 1.컬럼, 테이블 2.컬럼,...
FROM 테이블1
CROSS JOIN  테이블2;
cs

 

  • 테스트로 사용할 대용량의 테이블을 생성할 경우에 사용됨

 


 

<교차 조인 예제>

 

  • countries, regions 테이블을 크로스 조인하여 각각의 테이블의 25행X4행=>100행의 결과가 나오도록 출력

1
2
3
SELECT c.country_name 국가, r.region_name 지역이름
FROM countries c
CROSS JOIN regions r;
cs

 

 

 

 

'Learning > SQL' 카테고리의 다른 글

서브쿼리 - 단일행  (0) 2020.06.18
조인 (JOIN) - 리뷰 및 예제  (0) 2020.06.18
조인 (JOIN) - 외부조인  (0) 2020.06.18
조인 (JOIN) - 자체 조인 (Self Join)  (0) 2020.06.17
조인 (JOIN) - 비 동등조인  (0) 2020.06.17

<조인 (JOIN) - 외부조인>

 

  • 외부조인(OUTER JOIN): 조인 조건에 일치하지 않는 데이터까지 모두 출력. 부족한 데이터는 자동으로 NULL값으로 설정됨

 

  • 앞쪽에 먼저 기술한 테이블을 왼쪽 테이블, 뒤쪽 테이블을 오른쪽 테이블로 간주. (FROM 뒤에 오는 테이블이 왼쪽 테이블, JOIN뒤에 오는 테이블이 오른쪽 테이블)

 

    • LEFT: 왼쪽 테이블의 데이터는 모두 검색에 포함

    • RIGHT: 오른쪽 테이블의 데이터는 모두 검색에 포함

    • FULL: 양쪽 테이블 모두의 데이터가 검색에 포함

 


 

  • LEFT

  • employees 테이블과 departments 테이블을 LEFT JOIN하여 last_name, department_id, department_name 을 각각 직원, 부서번호, 부서명 이름으로 출력

1
2
3
4
5
SELECT e.last_name 직원, e.department_id 부서번호,
    d.department_name 부서명
FROM employees e
LEFT OUTER JOIN departments d
    ON e.department_id=d.department_id;
cs

 

=> employees테이블 기준으로 왼쪽 (employees 테이블) 107개의 행이 보여짐 (NULL포함)

 

 

 


 

  • RIGHT

  • employees 테이블과 departments 테이블을 RIGHT JOIN하여 last_name, department_id, department_name 을 각각 직원, 부서번호, 부서명 이름으로 출력

1
2
3
4
5
SELECT e.last_name 직원, e.department_id 부서번호,
    d.department_name 부서명
FROM employees e
RIGHT OUTER JOIN departments d
    ON e.department_id=d.department_id;
cs

 

=> employees테이블 기준으로 오른쪽 (departments테이블) 122개의 행이 보여짐 (NULL포함)

 

 


 

  • FULL

  • mployees 테이블과 departments 테이블을 FULL JOIN하여 last_name, department_id, department_name 을 각각 직원, 부서번호, 부서명 이름으로 출력

 

1
2
3
4
5
SELECT e.last_name 직원, e.department_id 부서번호,
    d.department_name 부서명
FROM employees e
FULL OUTER JOIN departments d
    ON e.department_id=d.department_id;
cs

 

=> 양쪽의 테이블 모든 행이 보여짐 

 

 


 

 

<외부조인 예제>

 

  • countries, locations 테이블을 조인하여 country_name 국가, country_id 국가번호, location_id 지역번호, city 도시를 출력. countries의 테이블의 데이터는 모두 검색에 포함시키도록한다. (지역번호로 DESC정렬)

1
2
3
4
5
6
SELECT c.country_name 국가, c.country_id 국가번호,
    lo.location_id 지역번호, lo.city 도시
FROM countries c
LEFT OUTER JOIN locations lo
    ON c.country_id=lo.country_id
ORDER BY 지역번호 DESC;
cs

 

 

 

'Learning > SQL' 카테고리의 다른 글

조인 (JOIN) - 리뷰 및 예제  (0) 2020.06.18
조인 (JOIN) - 교차조인  (0) 2020.06.18
조인 (JOIN) - 자체 조인 (Self Join)  (0) 2020.06.17
조인 (JOIN) - 비 동등조인  (0) 2020.06.17
조인 (JOIN) - 동등조인  (0) 2020.06.17

+ 비주얼 스튜디오 코드 (Visual Studio Code)로 README.md 마크다운 문서를 만들어서 업로드한 프로젝트 설명하기

 

  • 마크다운 문서 편집 형식

    • 제목 표시 : #, ##, ###

    • 가로줄: ***

    • 글머리: +

    • 코드: ``` code ```

    • 링크: [링크명] (링크주소)

    • 인터넷 이미지: ![Alt text] (이미지 주소) 

    • 이미지 파일: ![Alt text] (이미지폴더/이미지이름.확장자)

 

 

  • 비주얼 스튜디오 코드에서 깃허브에 README.md 파일 업로드하기

  • 왼쪽 소스 제어 탭에서 커밋 (체크표시 아이콘) 클릭, 메시지 쓰고 엔터

 

 

  • 더보기 탭에서 푸시 클릭

 

 

  • 깃허브에 올리는 폴더에 깃허브 주소가 연동되어 있어야 함.

  • 깃허브에 README.md 파일 확인

 

 

'Learning > git&github' 카테고리의 다른 글

git삭제 / 수업시간에 배운 내용을 github에 업로드  (0) 2020.06.16
git, github 사용하기  (0) 2020.06.15

<조인 (JOIN) - 자체 조인 (Self Join)>

 

  • employees 테이블에서 직원 각각의 매니저를 찾는다고 가정, 직원의 이름과 매니저의 이름을 출력

 

ex) employee_id 104의 last_name은 Ernst이고 manager_id는 103임

      employee_id 103의 last_name은 Hunold.

      따라서 employees 테이블 내에서 조인을 함.

 

1
2
3
4
5
SELECT e.last_name 직원, e.employee_id 직원번호1,
m.last_name 매니저, e.employee_id 직원번호2
FROM employees e
JOIN employees m
    ON e.manager_id = m.employee_id;
cs

 

 

 

 

 

 

 

'Learning > SQL' 카테고리의 다른 글

조인 (JOIN) - 교차조인  (0) 2020.06.18
조인 (JOIN) - 외부조인  (0) 2020.06.18
조인 (JOIN) - 비 동등조인  (0) 2020.06.17
조인 (JOIN) - 동등조인  (0) 2020.06.17
집계 함수 (그룹 함수)  (0) 2020.06.16

<조인 (JOIN) - 비 동등조인>

 

  • employees 테이블

 

 

  • salarygrade 테이블

 

 

 

 

  • employees 테이블과 salarygrade 테이블을 비 동등 조인하여 employee_id, first_name, salary, grade를 출력

 

1
2
3
4
SELECT employee_id, first_name, salary, grade
FROM employeees
JOIN salarygrade
ON salary BETWEEN losalary AND hisalary;
cs

 

 

 

'Learning > SQL' 카테고리의 다른 글

조인 (JOIN) - 외부조인  (0) 2020.06.18
조인 (JOIN) - 자체 조인 (Self Join)  (0) 2020.06.17
조인 (JOIN) - 동등조인  (0) 2020.06.17
집계 함수 (그룹 함수)  (0) 2020.06.16
DECODE 함수, CASE 함수  (0) 2020.06.16

<조인 (JOIN) - 동등조인>

 

  • 조인 (JOIN): 둘 이상의 테이블을 연결하여 데이터를 검색하는 방법

    • 둘 이상 행들의 공통된 값 기본키 및 외래키 값을 사용하여 조인 (관계없는 두 테이블을 조인할 수는 없음)

    • 두 개의 테이블을 SELECT 문장 안에서 조인하려면 적어도 하나의 컬럼이 그 두 테이블 사이에서 공유 되어야함 

    • 조인 방법: Equi Join(동등 조인), Non-Equi Join(비동등 조인), Self Join(자체 조인), Outer-Join(외부 조인)

 

 

  • 명시적 표현 (JOIN과 ON이용)

1
2
3
4
SELECT table 1.column 1[,table 2.column 2...]
FROM table 1 JOIN table 2
ON table 1.column1=table 2.cloumn2;
[USING (column)]
cs

 

  • 묵시적 표현 (콤마 , 를 이용)

1
2
3
SELECT table 1.column 1[,table 2.column 2...]
FROM table 1table 2
WHERE table 1.column 1 = table 2.column 2;
cs

 

 


 

  • HR 연습계정의 employees, departments 테이블을 조인하기 

1
2
3
4
SELECT e.employee_id, e.department_id, d.department_name
FROM employees  e
JOIN departments d
ON e.department_id = d.department_id;
cs

 

 

 

 


 

  • 내츄럴 조인 (NATURAL JOIN): 동일한 열이 있으면 알아서 JOIN하기 때문에 ON절 생략가능

  • 만약에 동일한 열이 2개 이상 있을때는 JOIN할 수 없음

 

  • 내츄럴 조인을 사용하여 employees 테이블과 jobs 테이블을 조인하고 employee_id, first_name, job_id, job_title 출력

1
2
3
4
SELECT employee_id, first_name,
       job_id, job_title
FROM employees
NATURAL JOIN jobs;
cs

 

 

 

  • 기본 동등조인의 명시적표현 방법을 사용하여 사용하여 employees 테이블과 jobs 테이블을 조인하고 employee_id, first_name, job_id, job_title 출력 (결과는 동일)

1
2
3
4
SELECT e.employee_id, j.job_id, j.job_title
FROM employees e
JOIN jobs j
    ON e.job_id = j.job_id;
cs

 

 


 

  • employees 테이블과 departments 테이블을 조인하여 department_id가 50인 테이블의 employee_id, department_id, department_name을 출력

1
2
3
4
5
SELECT e.employee_id, e.department_id, d.department_name
FROM employees  e
JOIN departments d
ON e.department_id = d.department_id
WHERE d.department_id = 50;
cs

 

 

 


 

 

  • employees, departments, locations 3개의 테이블을 조인하여 employee_id, department_name, city 출력

1
2
3
4
SELECT e.employee_id, d.department_name, lo.city
FROM employees e
JOIN departments d ON e.department_id = d.department_id
JOIN locations lo ON d.location_id = lo.location_id;
cs

 

 

 


 

 

<동등 조인 예제>

 

  • 부서명(department_name), 시티명(city), 국가명(country_name)을 나타내는 테이블 출력. 테이블들은 countries와 departments와 locations을 조인. 단, 시티가 'Seattle' 혹은 'London' 이어야하고 국가명은 앞쪽에 'United'가 들어가야함

1
2
3
4
5
6
7
SELECT d.department_name 부서명, lo.city 도시명,
co.country_name 국가명
FROM departments d
JOIN locations lo ON d.location_id = lo.location_id
JOIN countries co ON co.country_id = lo.country_id
WHERE lo.city IN ('Seattle''London')
AND co.country_name LIKE 'United%';
cs

 

 

 

'Learning > SQL' 카테고리의 다른 글

조인 (JOIN) - 자체 조인 (Self Join)  (0) 2020.06.17
조인 (JOIN) - 비 동등조인  (0) 2020.06.17
집계 함수 (그룹 함수)  (0) 2020.06.16
DECODE 함수, CASE 함수  (0) 2020.06.16
NULL 관련 함수  (0) 2020.06.16

<git 삭제>

 

  • github 접속 후 Repository 들어가서 Settings- Delete this repository

 

 

  • git 삭제하려는 폴더에서 마우스 우클릭-git Bash Here 

 

 

  • $ rm -rf .git

  • master가 사라졌으니 git이 사라진 것

 

 


 

<폴더에 새 파일이 생겼을때 github에 올리기>

 

+

학원에서 듣고 있는 SQL 강의 같은 경우 바탕화면에 폴더를 지정해서 파일을 하나씩 저장 하고 있다.

수업을 듣고 파일 하나가 새로 생길때 어떻게 github에 업로드할까?

 

 

  • 파일을 저장하고 수업이 끝나면 바탕화면 SQL 폴더에서 git bash here 

 

  • git status에서 빨간색으로 처리된 파일 확인

 

  • git add .

 

  • git commit -m "커밋 설명"

 

  • git push 하면 됨 (처음처럼 remote add origin 이런거 안해도됨)

 

  • Viual Sudio Code에서 README.md 파일수정

 

'Learning > git&github' 카테고리의 다른 글

README.md 로 github에 올린 프로젝트 설명하기  (0) 2020.06.17
git, github 사용하기  (0) 2020.06.15

+ Recent posts