정리

25 TIL 정리 (SQL-Read)

모_아이 2022. 5. 24. 00:41

데이터베이스

여러 사람들이 같이 사용할 목적으로 데이터를 담는 통

모든 데이터 베이스는 CRUD에 해당하는 기능을 지웒나다.

 

C(Creat) : 데이터의 생성

R(Read): 저장된 데이터를 읽어오는 것

U(Update): 저장된 데이터를 변경

D(Delete): 저장된 데이터를 삭제

 

SQL(Structured Query Language)을 이용하면 데이터를 손쉽고 깔금하게 정리/분석 가능하며 R(Read)을 편하게 만들어준다.

 

SQL

Select 쿼리문

※쿼리(Query)문

질의를 의미, 데이터베이스에 명령을 내리는 것

 

Select 쿼리문은 1. 어떤테이블에서 2. 어떤필드의 데이터를 가져올지로 구성

<< order_no , created_at 이 각각의 필드

데이터가 담긴 엑셀시트

 

 

 

 

 

 

 

 

<< orders 가 테이블

엑셀시트명

 

where절

Select 쿼리문으로 가져올 데이터에 조건을 걸어주는 것

select * from orders  // orders의 테이블의 모든 값을 불러와
where payment_method = "kakaopay";  // 그중 결제수단이 kakaopay인 것만 보여줘
주의! 'kakaopay'가 아닌 kakaopay로 따옴표를 생략할 경우 에러(문자열로 인식 안함)

같지 않음

!=  // !이 부정을 의미

 

범위

between 사용

select * from orders 
where created_at between "2020-07-13" and "2020-07-15"; // 7.13 부터 7.15이전에 가입한 사람만 and 붙이기

포함

in 사용

select * from checkins
where week in (1, 3);  //week란 필드의 1주차 3주차 데이터만 불러와줘

패턴

like 사용

select * from users 
where email like '%daum.net'; // email필드에서 앞에 뭐라 써있든 마지막이 daum.net 인것만 불러와줘

% 이용해 다양하게 사용가능

a% << a로 시작하는 필드값

b% .com << b로 시작해서 .com으로 끝나는 필드값 

 

유용한 문법

limit 제한하기

select * from orders 
where payment_method = "kakaopay" //카카오 페이로 결제한 데이터만
limit 5; // 5개만 보여줘

Distinct 중복데이터 제외

select distinct(payment_method) from orders; // 결제수단별로 보여주지만 중복된건 빼줘

Count 숫자 세보기

select count(*) from orders //orders에 데이터가 몇개인지 세줘

Distinct + count

SELECT count(distinct(name)) from users; 
//name필드를 불러오는데 중복값은 제거하고 몇개인지 세줘(성씨가 몇개인지 알아보기)

※where절과 함께 쓸때는 and를 사용

select count(*) from users
where created_at between "2020-07-12" and "2020-07-14"// 가입일자 범위를 정한 후
and email like "%gmail.com"; // gmail로 가입한 사람만 추려줘

 

Group by

select name, count(*) from users 
group by name;

순서

1. users 테이블에서 데이터를 가져온다

2. name이라는 필드에서 동일한 값을 갖는 데이터를 하나로 합쳐준다 group by 사용

3. select 를 이용해 name과 count(*) 그룹으로 묶어진 데이터 개수를 세어준다.

from > group by > select

 

응용

-동일 범주 개수 구하기는 위와 동일

-동일 범주 최솟, 최대 값 구하기

select 범주가 담긴 필드명, min(최솟값을 알고 싶은 필드명) from 테이블명
// 최댓값을 알고 싶다면 min>>max로 교체
group by 범주가 담긴 필드명;

-평균 / 합계 구하기

select 범주가 담긴 필드명, avg(평균값을 알고 싶은 필드명) from 테이블명
// 합계는 avg >> sum 으로 변경
group by 범주가 담긴 필드명;

 

Order by - 정렬기능

select name, count(*) from users
group by name //name을 묶고 데이터 숫자를 셈
order by count(*); // 그걸 오름차순으로 정렬 
//내림차순으로 정렬하고 싶을 경우 order by count(*) 뒤에 desc 넣기

desc = descending // 내림차순  

오름차순은 자동이므로 넣지 않아도 됨

 

Order by 가 실행되는 순서

from > group by > select > order by

 

1. users 테이블 데이터 전체 가져오기 (from)

2. users 데이틀 데이터에서 같은 name을 갖는 데이터 합치기(group by)

3. name에 따라 합쳐진 데이터가 각각 몇개인지 세어주기 ( select name, count(*) )

4. 합쳐진 데이터 개수에 따라 정렬(order by) // 기본 오름차순 , desc 넣을시 내림차순

 

Where과 Order by , Group by 함께 사용하기

where절로 조건이 하나 추가되고 이후 Group by, Order by가 실행

select payment_method, count(*) from orders
where course_title = "웹개발 종합반"
group by payment_method
order by payment_method;

순서 : from > where > group by > select

1. users 테이블 데이터 전체 가져오기 (from)

2. 웹개발 종합반 데이터만 남겨주기 (where)

3. users 데이틀 데이터에서 같은 name을 갖는 데이터 합치기(group by)

4. name에 따라 합쳐진 데이터가 각각 몇개인지 세어주기 ( select name, count(*) )

5. 합쳐진 데이터 개수에 따라 정렬(order by) // 기본 오름차순 , desc 넣을시 내림차순

 

※쿼리 작성 요령

1. show tables로 어떤 테이블이 있는지 확인

2. 원하는 정보가 있을 것 같은 테이블에 select * from 테이블명 limit 10 쿼리를 날려보기

3. 원하는 정보가 없으면 다른테이블도 2번 방법을 써서 확인

4. 테이블을 찾을 경우 범주를 나눠 보고싶은 필드 찾기

5. 범주별로 통계를 보고싶은 필드 찾기

6. SQL 쿼리 작성

 

Alias

쿼리가 길어지면서 종종 헷갈릴 일이 생길수 있는데 SQL에선 Alias라는 별칭 기능을 지원한다.

select payment_method, count(*) as cnt from orders o // orders옆 o는 별칭
// count(*) 뒤 as는 데이터 필드 이름을 cnt로 글자 변경해 보여주세요
where o.course_title = '앱개발 종합반'//course 앞 o. 가 별칭 이용
group by payment_method

혼동을 최소화 하고 원하는 이름으로 결과를 출력하기 위해 사용!

반응형

'정리' 카테고리의 다른 글

26-2 TIL 정리 (SQL subquery)  (0) 2022.05.25
26 TIL 정리 (SQL-Read)  (0) 2022.05.25
23 TIL 정리(GCP-가상머신)  (0) 2022.05.19
22 TIL 정리 (java 객체지향)  (0) 2022.05.18
21 TIL 정리 (java 기초)  (0) 2022.05.17