2021 10 06
2021-10-06¶
MySQL 개선하기¶
- 통상 서버 처리시간의 70% 이상이 SQL을 처리하는데 사용됨
- SQL 읽기
SELECT Country, COUNT(*) AS '고객 수' FROM Customers WHERE Country <> 'Norway' GROUP BY Country HAVING COUNT(Country) = 1 ORDER BY Country;1. FROM에서 데이터 집합 만듦. 2. WHERE에서 FROM에서 만든 데이터 집합을 조건에 맞게 걸러냄 3. GROUP BY는 WHERE에서 필터링한 데이터를 그룹화 4. HAVING은 GROUP BY에서 집계한 데이터 집합을 "다시 조건에 맞게" 필터링 5. SELECT에서는 그룹화 하고 필터링한 데이터 집계 6. 모두 진행한 이후, ORDER BY를 통해 집계한 데이터 정렬
- 서브쿼리
- SELECT 절에 추가
SELECT (SELECT COUNT (*) FROM [Customers] WHERE Country = 'Germany') AS `Germany인 사람`, (SELECT COUNT (*) FROM [Customers] WHERE Country = 'Mexico') AS `Mexico인 사람`- FROM 절에 추가
- WHERE 절에 추가
- 드라이빙, 드리븐 테이블 - 테이블에 동시에 접근할 수 없음 - 드라이빙 테이블: 가능하면 적은 결과가 반환될 것으로 예상되는 테이블 - 드라이빙 테이블 추출 건수 == 드리븐 테이블의 액세스 반복 횟수
CU SQL 강의¶
- 참고: https://www.youtube.com/playlist?list=PLepL6oifDi01luW60pBImjsTTndSXzX97
- SQL 대소문자 구분 X
- 예약어를 쿼리문에 쓸라면 ``로 감쌀것
- 비교 연산자 - = : 같다 - <> : 같지 않다 - > : 크다 - >= : 크거나 같다
- 조회하기 - WHERE: 조건절 - LIKE: 패턴 매칭 (%활용) - BETWEEN a AND b: a와 b 사이의 값 - IN (list): list 사이의 값 - AND, OR, NOT - ORDER BY: 오름차순 정렬 - DESC 붙이면 내림차순
- 가공하기 - 쿼리문 사칙연산 제공 - 문자열 가공 - CONCAT: 문자열 합치기 - SUBSTRING: 문자열 자르기 - 날짜 - YEAR() - DATE() - MONTH() - DAY()
- 집계하기
- 갯수세기 - COUNT(*): 다 세기 - COUNT(DISTINCT PRICE): PRICE 값의 갯수들 중 중복허용하지 않고 세겠다 - 최대 - MAX(PRICE) - GROUP BY: 특정 열을 기반으로, 같은 값을 가진 데이터를 그룹핑 - HAVING: GROUP BY의 WHERE 절
- 복수의 테이블 다루기 - 서브쿼리 - SELECT, FROM, WHERE에 서브쿼리 넣을 수 있음 - FROM의 서브쿼리는 모수의 데이터를 줄일 수 있어 효율적 - JOIN - LEFT JOIN: FROM ~~의 테이블에 있는 칼럼은 포함 - RIGHT JOIN: JOIN ~~의 테이블에 있는 칼럼은 포함 - INNER JOIN: 둘 다에 있어야 포함 (이게 JOIN default)