MySQL - SELECT, WHERE, JOIN

2 분 소요

기본 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 과의 차이점
#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.열이름;
  • 셀프 조인
    • 테이블을 자기 자신과 조인시키는 것
    • 반드시 테이블에 별칭을 붙여줘야 가능하다 (안 그러면 구분이 안되기 때문에)
  • 비등가 조인
    • 일치하는 값(동등 연산자 이용)이 아닌 조건을 기준으로 조인

댓글남기기