ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MySQL 다시보기 03 - SELECT/FUNCTION/UNION/JOIN
    SQL 2021. 10. 4. 15:38

    유투브 'freeCodeCamp.org' 참조

     

     

     

     

    01 SELECT

     

    1 - 모두 찾기

    SELECT * FROM client;
    SELECT * FROM employee;

    2 - 정렬하여 모두 찾기

    SELECT * FROM employee ORDER BY salary;
    SELECT * FROM employee ORDER BY sex, first_name, last_name;

    → 정렬 목록이 요청 된 순으로 정렬 시킨다.

    SELECT * FROM employee LIMIT 5;

     

     

    3 - 특정 컬럼 제한하여 모두 찾기

    SELECT first_name, last_name FROM employee;
    • SELECT와 FROM 사이에 특정 컬럼명을 넣어 찾고 싶은 컬럼명만 들고올 수 있다. 

    3 - 1 - 특정 컬럼명 제한하여 이름 변경 후 모두 찾기 

    SELECT first_name AS forename , last_name AS surname FROM employee;
    • SELECT와 FROM 사이에 특정 컬럼명을 넣고 거기에 'AS'를 써서 찾아올때 컬럼명을 변경해서 들고올 수 있다. 

     

    3 - 2 - 특정 컬럼 중복값 필터링 

    SELECT DISTINCT sex FROM employee;
    SELECT DISTINCT branch_id FROM branch;
    • DISTINCT - 중복을 제거하고 고유한 값만 가져오는 함수

     

     

    02 코어 함수 (Function)

     

    1 - COUNT → 컬럼 데이터 개수를 들고 옴, NULL값은 세지 않음

    SELECT COUNT(emp_id) FROM employee;
    SELECT COUNT(client_name) FROM client;

     

    1 - 1 - COUNT + WHERE → WHERE은 조금 더 구체적으로 조건을 걸 수 있음

    SELECT COUNT(emp_id) FROM employee WHERE sex = 'F' AND birth_date > '1970-01-01';

     

    1 - 2 - AVG() → 데이터의 평균을 가져옴

    1 - 3 - SUM() → 데이터의 합계를 가져옴
    1 - 4 - GROUP BY → 특정 컬럼을 기준으로 그룹화하여 테이블에 존재하는 행들을 그룹별로 구분하기 위해 사용. 

    *쿼리시에 셀렉트가 몇개의 컬럼 및 어떤 컬럼을 들고오는지 생각하는게 중요하다!
    
    //여자, 남자가 각각 몇명있는지 출력
    SELECT COUNT(sex), sex from employee GROUP BY sex;
    
    //슈퍼바이저의 ID별로 각각 몇명있는지 출력
    SELECT COUNT(super_id), super_id FROM employee GROUP BY super_id;
    
    //각각의 영업자가 얼마나 팔았는지 출력
    SELECT SUM(total_sales), emp_id from works_with GROUP BY emp_id;

    더보기

    SELECT COUNT(client_name), client_name, branch_id FROM client GROUP BY client_name;

    SELECT COUNT(supply_type), supplier_name, supply_type FROM branch_supplier GROUP BY supplier_name;

     

     

     

    03 글자별 분류 해보기

    1 - LIKE → '%' = % 놓인 위치 이전 이후 모든 글자를 서치하고 그 글자들를 가진 컬럼을 들고 옴
                  '_' = _가 위치 이전 이후 한 글자를 서치하고 그 글자를 가진 컬럼을 들고 옴

    SELECT * FROM client WHERE client_name LIKE '%LLC';
    SELECT * FROM branch_supplier WHERE supplier_name LIKE '%Mill';
    SELECT * FROM branch_supplier WHERE supplier_name LIKE '% Label%';
    SELECT * FROM employee WHERE birth_date LIKE '____-02%';

     

     

     

     

    04 UNION

    • 집합을 위한 함수로 UNION 연산은 중복된 결과를 제거한 결과의 합이 검색된다. 가능하면 UNION 보다는 UNION ALL을 사용하는 것이 좋다
    • UNION시에는 각각의 컬럼 개수가 같아야 작동 된다
    • UNION은 여러 테이블 연결이 가능 하다
    SELECT first_name FROM employee
    UNION
    SELECT branch_name FROM branch;
    
    SELECT client_name, branch_id FROM client
    UNION
    SELECT supplier_name, branch_id  FROM branch_supplier;

     

     

    05 JOINS

    • 각기 다른 테이블의 컬럼들을 조합해서 결과를 볼 때 사용
    • 조인시에는 컬럼명들이 어떤 테이블에서 오는지 분명히 설정 해줘야 한다 (예: employee.emp_id)
    • SELECT '테이블명.컬럼명' FROM '원테이블명' JOIN '조인시키는테이블명' ON '조건'
    • 일반 JOIN 시에는 각 테이블에 공통 컬럼이 있어야 조인 가능

    1) JOIN

    SELECT employee.emp_id, employee.first_name, branch.branch_name
    FROM employee JOIN branch ON employee.emp_id = branch.mgr_id;

    • 3개의 컬럼을 SELECT 하고 그와 동시에 employee/branch 테이블들을 JOIN할 때 ON 이하 조건문이 만족하는 결과 값

    emp_id = mrg_id

    더보기

    SELECT branch.branch_id, branch.branch_name, branch_supplier.supplier_name
    FROM branch JOIN branch_supplier ON branch.branch_id = branch_supplier.branch_id;

    SELECT works_with.emp_id,  client.client_name
    FROM works_with JOIN client ON works_with.client_id = client.client_id;

     

    2) LEFT/RIGHT JOIN

    • 일반 JOIN과 약간 차이가 있는데 두 테이블을 LEFT/RIGHT JOIN을 하게되면 조건에 맞지 않는 데이터도 일단 다 들고와서 NULL값 처리하여 뿌려준다
    • RIGHT/LEFT 를 거는 테이블에 따라 그 테이블의 모든 정보를 들고 오게 되는 것(조건에 맞지 않는 것은 NULL)
    SELECT employee.emp_id, employee.first_name, branch.branch_name
    FROM employee LEFT JOIN branch ON employee.emp_id = branch.mgr_id;
    
    SELECT employee.emp_id, employee.first_name, branch.branch_name
    FROM employee RIGHT JOIN branch ON employee.emp_id = branch.mgr_id;

Designed by Tistory.