-
MySQL 다시보기 03 - SELECT/FUNCTION/UNION/JOINSQL 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;
'SQL' 카테고리의 다른 글
SQL 01 - 설치 (0) 2022.03.07 MySQL 다시보기 04 - 중첩쿼리/ON DELETE/TRIGGER/ERD (0) 2021.10.04 MySQL 다시보기 02 - 테이블 생성 및 데이터 삽입 (0) 2021.10.03 MySQL 다시보기 01 - 데이터타입/CREATE/INSERT/DELETE/UPDATE/DELETE/기본코어쿼리 (0) 2021.10.03 SQL 초급 - MySQL 기반 웹사이트 만들기 02 (필터/좋아요/댓글) (0) 2021.10.01