🧷SET @[변수명] = 변수값;
🧷SELECT @[변수명];
🧷SELECT @[변수명] := 변수 활용 계산식 ~;
: 여러 개의 테이블의 데이터를 한 테이블에 합쳐서 보여줄 때 사용하는 키워드
: 의미가 같은 컬럼값을 기준으로 설정
📌INNER JOIN, LEFT JOIN, RIGHT JOIN, OUTER JOIN, CROSS JOIN, SELF JOIN
: 두 테이블의 공통된 값만 출력(INTERSECT)
: 공통된 값이 없는 로우는 출력되지 않음
🧷SELECT ~ FROM [테이블명1]
(INNER) JOIN [테이블명2]
ON [테이블명1].[컬럼명1] = [테이블명2].[컬럼명2]
WHERE 조건식;
: 왼쪽 테이블을 기준으로 왼쪽 테이블의 모든 값이 출력
: 오른쪽 테이블과 매핑되는 값이 없으면 NULL로 출력됨
🧷SELECT ~ FROM [테이블명1]
LEFT JOIN [테이블명2]
ON [테이블명1].[컬럼명1] = [테이블명2].[컬럼명2]
WHERE 조건식;
: 오른쪽 테이블을 기준으로 오른쪽 테이블의 모든 값이 출력
: 왼쪽 테이블과 매핑되는 값이 없으면 NULL로 출력됨
🧷SELECT ~ FROM [테이블명1]
RIGHT JOIN [테이블명2]
ON [테이블명1].[컬럼명1] = [테이블명2].[컬럼명2]
WHERE 조건식;
: 두 테이블에 있는 모든 데이터를 출력(UNION)
: MySQL에는 OUTER JOIN 키워드가 없기 때문에 UNION 키워드 사용
🧷SELECT ~ FROM [테이블명1]
LEFT JOIN [테이블명2]
ON [테이블명1].[컬럼명1] = [테이블명2].[컬럼명2]
WHERE 조건식;
UNION(중복은 제거됨)
🧷SELECT ~ FROM [테이블명1]
RIGHT JOIN [테이블명2]
ON [테이블명1].[컬럼명1] = [테이블명2].[컬럼명2]
WHERE 조건식;
: 두 테이블에 있는 모든 데이터를 각각 합쳐서 출력
: 예를 들어 5개, 3개의 로우를 가진 두개의 테이블이 CROSS JOIN을 한다면 합쳐지는 테이블의 로우 개수는 15개
🧷SELECT ~ FROM [테이블명1]
CROSS JOIN [테이블명2]
WHERE 조건식;
: 같은 테이블에서의 JOIN
🧷SELECT ~ FROM [테이블명1] AS a
(INNER) JOIN [테이블명1] AS b
ON a.[컬럼명1] = b.[컬럼명2]
WHERE 조건식;
🔸UNION
: SELECT 문의 결과 데이터를 하나로 합쳐서 출력
: 중복은 제거하여 출력
❗컬럼의 갯수와 타입, 순서가 같아야 함
🔸UNION ALL
: UNION과 비슷하나 중복을 제거하지 않고 출력
: 쿼리문 안에 있는 또 하나의 쿼리
: SELECT절, FROM절, WHERE절 등에 사용 가능
: 스칼라 서브쿼리
❗반드시 결과값이 하나의 값이여야 함
🧷SELECT [컬럼명], (SELECT [컬럼명] FROM ~)
FROM ~;
: 인라인 뷰 서브쿼리
❗반드시 결과값이 하나의 테이블이여야 함
🧷SELECT [컬럼명]
FROM (SELECT [컬럼명] FROM ~);
🍀Sub Query 사용
SELECT country.code, country.name AS country_name
, city.name AS city_name, city.population
FROM (SELECT * FROM city WHERE population >= 800 ⁎ 10000) AS city
JOIN country
ON country.code = city.countrycode;
🍀HAVING 사용
SELECT country.code, country.name AS country_name
, city.name AS city_name, city.population
FROM country JOIN city
ON country.code = city.countrycode
HAVING city.population >= 800 ⁎ 10000;
✔️두 쿼리 모두 같은 결과 출력
하지만, 서브 쿼리를 사용하는 것이 JOIN 전에 필터링 된 테이블을 사용하므로 데이터의 수가 더 작음(자원 사용이 더 적음) ➡️ 더 효율적인 쿼리
: 중첩 뷰 서브쿼리
❗반드시 결과값이 하나의 컬럼이여야 함
🧷SELECT [컬럼명]
FROM ~
WHERE [컬럼명][연산자] [서브 쿼리];
💭서브 쿼리에 사용하는 연산자
🍀비교 연산자
🍀IN
🍀ALL : A <(>) ALL([서브 쿼리]) : A가 모든 [서브 쿼리]의 결과값보다 크거나 작다.
🍀ANY : A <(>) ANY([서브 쿼리]) : A가 [서브 쿼리]의 결과값보다 하나라도 크거나 작다.
🍀(NOT) EXISTS : (NOT) EXSITS([서브 쿼리]) : [서브 쿼리]의 결과값이 존재한다.(존재하지 않는다.)
: 테이블에서 데이터를 검색할 때 바르게 찾을 수 있도록 해주는 기능
: B - TREE 알고리즘 사용
: SELECT 시 WHERE 절에 들어가는 컬럼을 INDEX로 설정
: 여러 개 컬럼을 가지는 인덱스도 설정 가능
✔️장점
: 검색(READ) 속도증가
✔️단점
: CREATE, UPDATE, DELEATE 속도 감소
: 추가 저장공간 사용
🧷CREATE INDEX [인덱스명] ON 테이블명;
🧷SHOW INDEX FROM [테이블명];
🧷DROP INDEX [인덱스명] ON [테이블명];
: 쿼리를 실행하기 전에 쿼리가 어떻게 실행될 지에 대해서 알려줌
: 쿼리 실행 전에 실행될 쿼리가 오래 걸리는지 확인
🧷EXPLAIN SELECT ~ FROM ~ ;