[TIL] #2 SQL 쿼리 예제

kiteB·2021년 8월 12일
2

TIL-SQL

목록 보기
1/7
post-thumbnail

1. SELECT (조회)

✔ 모든 필드(컬럼)를 조회하는 경우

SELECT *
FROM [테이블명]
  • Ex)
SELECT * 
FROM Person

: Person 테이블의 모든 필드를 검색

✔ 여러 필드를 조회하는 경우

SELECT [필드명1], [필드명2]
FROM [테이블명]
  • Ex)
SELECT Age, Name
FROM Person

: Person 테이블의 Age, Name 필드를 검색

2. DISTINCT (중복 없이 검색)

✔ 중복된 데이터를 없애고 조회하는 경우

SELECT DISTINCT [필드명]
FROM [테이블명]
  • Ex)
SELECT DISTINCT Job 
FROM Person

: Person 테이블의 Job 필드에서 중복되어 출력되는 값을 제거해서 조회
→ 고유한 값을 추출하기에 좋은 키워드!

3. WHERE (조건식 적용해서 검색)

✔ 조건식을 적용하는 경우

SELECT *
FROM [테이블명]
WHERE [필드명]=0
  • Ex)
SELECT * 
FROM Person 
WHERE Job='student'

: Person 테이블에서 Job 필드 내용이 'student'인 사람 검색

✔ 여러 조건식을 적용하는 경우

SELECT *
FROM [테이블명]
WHERE [필드명1]=0
AND [필드명2]=0
OR [필드명3]=0
  • Ex)
SELECT *
FROM Person
WHERE Age>=23
AND Job='student'

: Person 테이블에서 Age 필드 값이 23 이상이고 Job 필드 내용이 'student'인 사람 검색

4. 조건식의 종류

1) BETWEEN (~부터 ~까지)

# [필드명]의 값이 0부터 100까지인 데이터 조회
WHERE [필드명] BETWEEN 0 AND 100 
# [필드명]의 값이 0 이상 100 이하가 아닌 데이터 조회
WHERE [필드명] NOT BETWEEN 0 AND 100
  • Ex)
SELECT *
FROM Person
WHERE Age BETWEEN 10 AND 20

: Person 테이블에서 Age 필드값이 10 이상 20 이하인 사람 검색

2) In (~이거나)

# [필드명]의 값이 0, 10, 100과 일치하는 값 검색
WHERE [필드명] IN (0, 10, 100)
# [필드명]의 값이 0, 10, 100과 일치하지 않는 값 검색
WHERE [필드명] NOT IN (0, 10, 100)
  • Ex)
SELECT *
FROM Person
WHERE Hobby IN ('영화 감상')

: Person 테이블에서 Hobby 필드 내용이 '영화 감상'인 데이터 검색

3) IS NULL (필드값이 비어 있는지, 즉 NULL인지 판단)

# [필드명]의 값이 비어 있는 데이터 검색
WHERE [필드명] IS NULL
# [필드명]의 값이 비어 있지 않은 데이터 검색
WHERE [필드명] NOT IS NULL
  • Ex)
SELECT *
FROM Person
WHERE Name IS NULL

: Person 테이블에서 Name 필드 내용이 비어 있는 데이터 검색

4) LIKE (~로 시작, 포함, 끝나는 단어)

# [필드명] 데이터 중에서 '특정값'으로 시작하는 데이터 검색
WHERE [필드명] LIKE '[특정값%]'
# [필드명] 데이터 중에서 '특정값'을 포함하는 데이터 검색
WHERE [필드명] NOT LIKE '[%특정값%]'
# [필드명] 데이터 중에서 '특정값'으로 끝나는 데이터 검색
WHERE [필드명] NOT LIKE '[%특정값]'
  • Ex)
SELECT *
FROM Person
WHERE Job LIKE 'T%'

: Job 필드 내용이 'T'로 시작하는 사람 조회

5. ORDER BY (정렬)

특정 필드 기준으로 정렬하는 경우

SELECT [필드명]
FROM [테이블명]
ORDER BY [필드명]
  • Ex)
SELECT *
FROM Person
ORDER BY Name

: Name 필드 내용을 오름차순으로 정렬

정렬 기준이 여러 개인 경우

SELECT [필드명]
FROM [테이블명]
ORDER BY [필드명1], [필드명2] DESC, [필드명3] ASC
  • Ex)
SELECT *
FROM Person
ORDER BY Age, Name DESC, Job ASC

: Age, Name을 내림차순으로 정렬한 뒤, Job을 오름차순으로 정렬

6. JOIN (테이블 조합)

INNER JOIN (내부 조인; 교집합)

  • ON절과 함께 사용되며, ON절의 조건을 만족하는 데이터만을 가져온다.
SELECT *
FROM [테이블명1]
INNER JOIN [테이블명2]
ON [테이블명1].[필드명] = [테이블명2].[필드명];
  • INNER를 생략하고 JOIN만 써도 INNER JOIN으로 인식한다.
  • Ex)
SELECT *
FROM Reservation
INNER JOIN Customer
ON Reservation.Name = Customer.Name;

: Reservation 테이블의 NameCustomer 테이블의 Name이 일치하는 데이터를 가져와서 하나의 테이블로 합치기.

별칭(alias)를 써서 간략화한 예제

SELECT *
FROM Reservation AS r, Customer AS c
WHERE r.Name = c.Name;
  • 결과는 위와 동일하다.

LEFT JOIN (부분집합)

  • 첫 번째 테이블을 기준으로, 두 번째 테이블을 조합하는 JOIN
  • ON절의 조건을 만족하지 않는 경우에는 첫 번째 테이블의 필드 값은 그대로 가져오고, 해당 레코드의 두 번째 필드 값은 모두 NULL로 표시된다.
  • ON절에서는 WHERE에서 사용할 수 있는 모든 조건을 사용할 수 있다.
SELECT *
FROM [테이블명1]
LEFT JOIN [테이블명2]
ON [테이블명1].[필드명] = [테이블명2].[필드명]
  • Ex)
SELECT *
FROM Reservation
LEFT JOIN Customer
ON Reservation.Name = Customer.Name
WHERE ReservationDate > '2016-02-01';

: Reservtion 테이블의 Name 필드를 기준으로 CustomerName 필드와 일치하는 데이터만을 LEFT JOIN으로 가져온 후, 그 중에서 ReservationDate 필드의 값이 2016년 02월 01일 이후인 데이터만을 가져와라.

RIGHT JOIN (부분 집합)

  • LEFT 조인과는 반대로 두 번째 테이블을 기준으로, 첫 번째 테이블을 조합하는 JOIN.
SELECT *
FROM [테이블명1]
RIGHT JOIN [테이블명2]
ON [테이블명1].[필드명] = [테이블명2].필드명
  • Ex)
SELECT *
FROM Reservation
RIGHT JOIN Customer
ON Reservation.Name = Customer.Name;

: Customer 테이블의 Name 필드를 기준으로 Reservation 테이블의 Name 필드와 일치하는 레코드만을 RIGHT JOIN으로 가져와라.

FULL OUTER JOIN (외부 조인; 합집합)

  • A, B 테이블을 JOIN할 경우, 조건에 맞지 않은 데이터도 표시하고 싶을 때 OUTER JOIN을 사용한다.
  • MySQLFULL OUTER JOIN이 없어서, LEFT JOINRIGHT JOINUNION해서 사용한다.
  • OUTER JOINUSING, ON 조건절을 필수적으로 사용해야 한다.
SELECT *
FROM [테이블명1]
LEFT JOIN [테이블명2]
UNION
SELECT *
FROM [테이블명1]
RIGHT JOIN [테이블명2]

참고자료


http://tcpschool.com/mysql/mysql_multipleTable_join

profile
🚧 https://coji.tistory.com/ 🏠

0개의 댓글