Query 입문
기본적인 쿼리를 이해해보자.
각 쿼리에 대한 상세내용은 차츰 공부하면서 링크해둘꺼다.
Query 절
절 이름 | 목적 |
---|---|
select | 쿼리 결과에 포함할 열을 결정한다. |
from | 데이터를 검색할 테이블과, 테이블을 조인하는 방법을 식별한다. |
where | 불필요한 데이터를 걸러낸다. |
group by | 공통 열 값을 기준으로 행을 그룹화한다. |
having | 불필요한 그룹을 걸러낸다. |
order by | 1개 이상의 열을 기준으로 최종 결과의 행을 정렬한다. |
- 행 = row = record
- 열 = column = field
Select
보통 맨 첫줄에 위치하지만, 사실상 DB 서버가 판단하는 마지막 절이다.
몇개의 쿼리문을 해석해보자.
SELECT *
FROM language;
→ [language] 테이블의 모든 열을 가져와.
SELECT
language_id, name, last_update
FROM language;
→ [language] 테이블에서, 아이디, 이름, 최종수정일 3개의 열을 가져와.
중복 제거하기
중복된 데이터 행을 제외한 결과값을 순서대로 보고 싶다면 SELECT DISTINCT
를 사용하면 된다.
SELECT DISTINCT
컬럼이름
FROM 테이블이름
ORDER BY 컬럼이름; /*기본 오름차순*/
From
from
절은 쿼리에 사용되는 테이블을 명시할 뿐만 아니라, 테이블을 서로 연결하는 수단도 함께 정의한다.
Thefrom
clause defines the tables used by a query, along with the means of linking the tables together.
Table은 4가지 유형이 있다.
- 영구테이블 :
create table
로 생성된 것 - 파생테이블 : 서브쿼리에서 생성되어 메모리에 보관된 것
- 임시테이블 :
create temporary table
+insert into
메모리에 저장된 휘발성 데이터 → 특정 시점에 사라짐 (트랜잭션이 끝날 때, DB세션이 닫힐 때 등) - 가상테이블 :
create view
로 생성된 것
서브쿼리에 대해 알아보자.
select
문에서 from
절 내에 ( )로 또다른 파생테이블을 생성하는 역할을 한다.
그러니까 from
절 내의 ( ) 부터 읽는 식이다.
테이블 연결
from
절에 2개 이상의 테이블이 있으면, 그 테이블을 연결하는데 필요한 조건도 포함해야 한다.
예시
SELECT
customer.first_name
, customer.last_name
, time(rental.rental_date) rental_time
FROM customer
INNER JOIN rental
ON customer.customer_id = rental.customer_id
WHERE date(rental.rental_date) = '2005-06-14';
→ customer 테이블에서 rental 테이블을 customer_id(PK/FK)를 기준으로 합치고
customer 테이블에서 first_name,
customer 테이블에서 last_name,
rental 테이블에서 rental_date의 시간 부분만 rental_time 이라는 열 이름으로 만들어서 가져와.
이렇게 해석할 수 있겠다.
여기서 customer_id
는 customer 테이블에서는 Primary Key고, rental 테이블에서는 Foriegn Key가 된다.
테이블.컬럼
이렇게 이해하면 짹금 쉽다. 🙄
더 자세한 내용은 다중 테이블 쿼리(JOIN)에서 기록한다.
테이블 별칭 정의
테이블에 별칭을 지정하여 좀 더 간결하게 쿼리를 쓸 수 있다.
위의 예시를 그대로 써보자면,
SELECT
c.first_name
, c.last_name
, time(r.rental_date) r_time
FROM customer AS c /*여기서 customer 테이블의 명칭을 c 로 지정*/
INNER JOIN rental AS r /*여기서 rental 테이블의 명칭을 r 로 지정*/
ON c.customer_id = r.customer_id
WHERE date(rental.rental_date) = '2005-06-14';
AS는 꼭 안써도 된다.
Where
where
절은 결과셋에 출력되기를 원하지 않는 행을 필터링하는 매커니즘이다.
and
, or
, not
과 같은 연산자로 조건을 구분할 수 있다.
예를 들어 내가 DVD 대여점 사장인데, 손님이 G등급에 1주일 이상 대여할 수 있는 영화를 추천해달라고 했다 치자.
SELECT title
FROM film
WHERE
rating = 'G'
AND rental_duration >= 7 ;
이렇게 검색할 수 있을거다.
and
: 모든 조건이true
or
: 조건 중 하나만true
where
절에 and
와 or
연산자 모두 사용해야 할 경우는 ( ) 를 사용하여 조건을 그룹화한다.
SELECT title
FROM film
WHERE
(rating = 'G' AND rental_duration >= 7)
OR (rating = 'PG-13' AND rental_duration < 4) ;
Group by , having
group by
절은 특정 컬럼(열)을 그룹짓고 싶을 때 사용한다.
종류 | 지역 | 가격 |
---|---|---|
사과 | 서울 | 1000 |
사과 | 경기 | 900 |
예를 들어 이런 테이블이 있다고 가정했을 때, group by
에 사과를 넣으면
사과 1900 이런식으로 하나의 데이터로 묶어서 보여준다.
group by
를 사용해서 행 그룹을 생성하려면where
절에서 데이터를 필터링할 수 있는having
을 사용한다.
Order by
보통 쿼리의 결과값은 특정 순서대로 나열되지 않는다.
이때 오름차순, 내림차순 등 내가 원하는 기준으로 정렬할 때 order by
절을 사용한다.
ORDER BY table.a, table.b ;
이 경우 "테이블"의 A를 기준으로 1차 정렬되고, B를 기준으로 2차 정렬된다.
내림차순, 오름차순
- 오름차순(default) :
asc
- 내림차순 :
desc
순서
- n번째 열을 기준으로 오름차순/내림차순 할 수 있다.
- 예를 들어,
ORDER BY 3 desc;
라 하면 3번째 열로 내림차순 정렬을 하라는 뜻이다.
Author And Source
이 문제에 관하여(Query 입문), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@golmori/QueryPrimer저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)