MySQL - SELECT, WHERE, JOIN
기본 SELECT 문
#기본 형태
SELECT * FROM 테이블명; #'테이블명'에서 전체(*)를 선택하여 검색
#특정 열 선택
SELECT 열이름1, 열이름2, ... FROM 테이블명;
#산술식 사용가능: +, -, *, /
#열 별칭
SELECT column_name n
SELECT column_name AS nickname
SELECT column_name "Nickname"
SELECT column_name "Nick Name"
#연결 연산자(||) - 열 또는 문자열을 다른 열과 연결하여 하나의 열 생성
SELECT first_name||last_name AS "Full Name" # 결과 Full Name이라는 이름의 열에 성과 이름을 붙인 값들이 들어감
#리터럴 문자열
SELECT last_name ||'is a'|| job_name AS "career" # 결과 'Lee is a Data Scientist' 같은 값들로 이루어진 열 생성
#중복 행 제거
SELECT DISTINCT 열이름
WHERE 절
- 선택을 위한 행 제한문
- WHERE 절은 FROM 절 다음에 온다
#기본형태
SELECT * FROM 테이블명 WHERE 조건문
#일반적인 비교연산자 사용가능: =, >, <, >=, <=, <>(같지않음)
#다른 비교 조건
WHERE 열이름 BETWEEN a AND b # 두 값 사이의 행 검색 (지정한 값 포함)
WHERE 열이름 IN ('값1', '값2', '값3') # 목록에 해당하는 값을 가진 행 검색
WHERE 열이름 LIKE "__a%" # %에는 문자가 0개 이상 올 수 있음. _에는 문자가 하나만 올 수 있음
WHERE 열이름 IS NULL # 값이 널인 행 검색
WHERE 열이름 IS NOT NULL # 널이 아닌 행 검색
#논리조건 사용가능: AND, OR, IS
#우선순위는 NOT > AND > OR. 우선순위 구분을 위해 괄호를 사용가능
#정렬, WHERE절이 없어도 사용가능. SELECT문 가장 끝에 위치.
ORDER BY 열이름 # 기본값, 오름차순으로 정렬. 뒤에 ASC를 붙여서 지정가능
ORDER BY 열이름 DESC # 내림차순 정렬 지정
ORDER BY 열이름1, 열이름2, ...; # 앞에 오는 순서대로 정렬
JOIN 절
여러 테이블의 데이터를 질의
- CROSS JOIN (교차조인) - 두 테이블 상호간의 조합을 생성. 그냥 JOIN 만 쓰면 기본적으로 교차조인을 실행. 카타시안 곱(Cartesian Product)과 같은 결과. 행x행 만큼의 결과를 생성.
- NATURAL JOIN (자연조인) - 두 테이블에서 동일한 이름을 가진 열들을 기준으로 조인
- USING - 동일한 이름을 가진 열이 여러개일 때 특정 열을 지정해서 조인하고 싶은 경우 사용. 내추럴조인과 배타적이기 때문에 같이 쓰면 안된다
SELECT 열이름1, 열이름2, ...
FROM 테이블1
JOIN 테이블2
USING (열이름);
- ON - 임의 조건을 지정하거나 조인할 열을 지정할 때 사용.
SELECT 열이름1, 열이름2, ...
FROM 테이블1
JOIN 테이블2
ON 테이블1.열이름 = 테이블2.열이름;
#3-way join
SELECT 열이름1, 열이름2, ...
FROM 테이블1
JOIN 테이블2
ON 테이블1.열이름 = 테이블2.열이름
JOIN 테이블3
ON 테이블2.열이름 = 테이블3.열이름;
- 내부조인(inner join): 두 테이블을 조인해서 일치하는 열만 반환
- 외부조인 or 포괄조인(outer join)
#LEFT OUTER JOIN
#테이블2에 일치하는 행이 없어도 테이블1의 모든 행을 표시
SELECT 열이름1, 열이름2, ...
FROM 테이블1
LEFT OUTER JOIN 테이블2
ON 테이블1.열이름 = 테이블2.열이름;
#RIGHT OUTER JOIN
#테이블1에 일치하는 행이 없어도 테이블2의 모든 행을 표시
SELECT 열이름1, 열이름2, ...
FROM 테이블1
RIGHT OUTER JOIN 테이블2
ON 테이블1.열이름 = 테이블2.열이름;
#FULL OUTER JOIN
#서로 일치하는 행이 없어도 테이블1,2의 모든 행을 표시
SELECT 열이름1, 열이름2, ...
FROM 테이블1
FULL OUTER JOIN 테이블2
ON 테이블1.열이름 = 테이블2.열이름;
-
추가조건: WHERE 또는 AND 절을 뒤에 붙여서 추가 검색 조건 적용 가능
-
FULL OUTER JOIN 을 하는 다른 방법 → UNION 사용
- UNION은 두 개의 SELECT 쿼리 관계를 결합해준다
- 두 릴레이션의 속성을 결합하는 JOIN 과의 차이점
- UNION은 두 개의 SELECT 쿼리 관계를 결합해준다
#FULL OUTER JOIN
#서로 일치하는 행이 없어도 테이블1,2의 모든 행을 표시
SELECT 열이름1, 열이름2, ...
FROM 테이블1
FULL OUTER JOIN 테이블2
ON 테이블1.열이름 = 테이블2.열이름;
#UNION 사용
SELECT 열이름1, 열이름2, ...
FROM 테이블1
LEFT OUTER JOIN 테이블2
ON 테이블1.열이름 = 테이블2.열이름;
UNION
SELECT 열이름1, 열이름2, ...
FROM 테이블1
RIGHT OUTER JOIN 테이블2
ON 테이블1.열이름 = 테이블2.열이름;
- 셀프 조인
- 테이블을 자기 자신과 조인시키는 것
- 반드시 테이블에 별칭을 붙여줘야 가능하다 (안 그러면 구분이 안되기 때문에)
- 비등가 조인
- 일치하는 값(동등 연산자 이용)이 아닌 조건을 기준으로 조인
댓글남기기