SQL 기초 - ①

2024. 6. 18. 17:30·DEV/MySQL

 

01. SQL(Structured Query Language)이란? 

  • 데이터베이스와 대화를 하기 위한 언어
  • 데이터베이스 관리 시스템에서 데이터를 관리하고 조회하기 위해 사용됨

※ Query(질의)는 데이터베이스에서 정보를 얻기 위한 요청이나 질문을 의미함

각각의 쿼리는 데이터 베이스에서 다양한 작업을 수행하도록 요청하는 질의문 (모두 쿼리의 예시임)

-- customers 테이블에서 나이를 선택하는 쿼리
SELECT age
FROM customers

 

 

02. 테이블과 컬럼 

  • 테이블의 구조는 아래와 같으며, 각 열을 '컬럼' 혹은 '필드'라고 부름 

 

03. SQL 데이터 조회하기(SELET, FROM : 기본)

 

1) 기본 명령어

  • SELECT : 데이터를 가져오는 기본 명령어로, 데이터를 조회하는 모든 Query 에 사용됨
  • FROM : 데이터를 가져올 테이블을 특정해주는 문
  • * : 모든 컬럼을 가져와준다는 의미
select *
from customers

 

2) 원하는 컬럼 선택하기

select 컬럼1, 컬럼2
from 테이블

 

3) 컬럼에 별명(alias)을 주기

  • 입력한 별명으로 출력됨 
  • 영문, 언더바 : 따음표 없이 별명만 적음
  • 특수문자, 한글 : "별명" 큰 따음표 안에 작성
  • 유의사항 : 공백행이 있으면 정상 작동하지 않음. 
select email as e_mail 	#as 없어도 작동함 
       gender "성별"
from customers

 

04. 조건에 맞는 데이터 필터링 (WHERE)

 

1) WHERE  : 전체 데이터 중 특정 조건을 필터링할 때 사용 ' ex) 나이가 21살인 사람 '

select *
from 테이블
where 필터링 조건 (나이가 21살 이상)
select *
from customers
where age=21

 

2) 필터링에 유용한 표현 

 

① 비교연산 : 같음, 큼, 작음 등의 조건을 지정할 수 있음 

비교연산자 의미 예시
= 같다 age = 21
gender = 'female'
<> 같지 않다(다르다) age <> 21
gender <> 'female'
> 크다 age>21
>= 크거나 작다 age>=21
< 작다 age<21
<= 작거나 같다 age<=21
select *
from customers
where age<21

 

② BETWEEN / IN / LIKE : 필터링 조건 다양하게 지정

BETWEEN A와 B사이 where between A and B 나이가 10과 20 사이
where age between 10 and 20
IN 포함하는 조건주기 where  IN (A,B) 나이가 15,21,31세인 경우
where age in (15,21,31)
LIKE 완전히 똑같지는 않지만, 
비슷한 값을 조건으로 주기
where  like '시작문자%' '김'으로 시작하는 이름
where like '김%'
'김'을 포함하는 이름
where like ' % 김 % '
'김'으로 끝나는 이름
where like '김 % '

 

③ 논리연산 AND , OR , NOT : 여러 개의 조건으로 필터링 

AND 그리고 나이가 20세이고, 여성
where age=20 and gender = 'female'
OR 또는 나이가 20세 이상이거나, 여성
where age>20 or gender = 'female'
NOT 아닌 여성이 아닌 
where not gender = 'female'

 

④ SQL로 계산하기  : SUM, AVG, COUNT, MIN, MAX

SUM 합계 상품 준비시간을 구하고 별명 짓기
SELECT sum(food_preparation_time) total_food_preparation_time 
FROM food_orders
AVG 평균 상품준비시간의 합계와 평균 구하고 별명짓기
SELECT
sum(food_preparation_time) total_food_preparation_time
               avg(delivery_time) avg_food_preparation_time
FROM  food_orders
COUNT 갯수
- COUNT(컬럼) 컬럼명 대신
1 혹은 * 사용가능
- 몇개의 값을 가지고 있는지 구할 때 : DISTINCT
COUNT(컬럼) 컬럼명 대신 1 혹은 * 사용가능
몇개의 값을 가지고 있는지 구할 때 : DISTINCT

주문건수와, 주문 한 고객 수 구하기
SELECT
count (1)
               count(distinct customer_id)
FROM  food_orders
MIN 최솟값 주문 가격의 최솟값
SELECT min (price) min_price
FROM  food_orders
MAX 최대값 주문가격의 최대값
SELECT max (price) min_price
FROM  food_orders
숫자연산

+ , - , * , / 상품준비시간과 배달시간의 합계 
SELECT food_preparation_time + delivery_time
FROM  food_orders

 

 

 

05. GROUP BY로 범주별 연산 한 번에 끝내기

  • GROUP BY : 여러번의 쿼리 없이,  카테고리를 지정하여 수식 함수로 연산 

1) 기본 구조

select 카테고리컬럼(원하는컬럼 아무거나),
       sum(계산 컬럼),
from
group by 카테고리컬럼(원하는컬럼 아무거나)


2) 예시 : 음식 종류별 주문 금액 합계 

select cuisine_type,
       sum(price) sum_of_price
from food_orders
group by cuisine_type

 

 

06. Query 결과를 정렬하여 업무에 바로 사용하기 (ORDER BY)

  • 오름차순 : 숫자가 점점 커지는 순서로 정렬
  • 내림차순 : 숫자가 점점 작아지는 순서로 정렬
  • 기본구조
select 카테고리컬럼(원하는컬럼 아무거나),
       sum(계산 컬럼),
from
group by 카테고리컬럼(원하는컬럼 아무거나)
order by 정렬을 원하는 컬럼 (카테고리컬럼(원하는컬럼 아무거나), sum(계산 컬럼) 둘 다 가능)
종류 구문 예시
오름차순 생략 order by sum(price)
내림차순 DESC order by  sum(price) desc

 

 

07. SQL 기본 구조

select
from
where
group by
order by

 

  • 예시 

음식 종류별 가장 높은 주문 금액과 가장 낮은 주문금액을 조회하고, 가장 낮은 주문금액 순으로 (내림차순) 정렬하기

select cuisine_type,
       min(price) min_price,
       max(price) max_price
from food_orders
group by cuisine_type
order by min(price) desc
'DEV/MySQL' 카테고리의 다른 글
  • SQL 기초 - ③
  • SQL 기초 - ②
fargoe
fargoe
    fargoe
    fargoewave
    fargoe
    GitHub
    전체
    오늘
    어제
    • 분류 전체보기 (166)
      • TIL 🔖 (140)
        • TIL (69)
        • 코딩테스트 (71)
      • DEV (14)
        • Java & Spring (7)
        • MySQL (3)
        • Git&Github (4)
      • 개발지식 (10)
        • 알고리즘 (2)
        • 자료구조 (8)
        • CS (0)
      • 3D (1)
        • Unity (1)
      • ETC (0)
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
fargoe
SQL 기초 - ①
상단으로

티스토리툴바