얼음꽃의 일지

Sql 기본 문법 간단한 정리 본문

잡다한 지식

Sql 기본 문법 간단한 정리

얼음꽃 2023. 2. 9. 14:33
728x90

SQL

* 관계형 데이터베이스에서 표의 기본 형태
-> 테이블 or 릴레이션 : 표 자체를 의미
-> 스키마 or 필드 : 첫번째 열에 나와있는 각 행의 무엇을 뜻하는지 알려주는 것
-> 인스턴스 or 데이터파트 : 실제 데이터가 들어가는 파트
-> 튜플 : 테이블에서 행의 개수를 의미

* 실행 순서 : from -> on -> join -> where -> group by -> having -> select -> distinct -> order by -> top -> limit


1. 데이터를 불러오기 select
-> 표에서 모든 데이터를 불러오기 : select * from 표 이름
-> 만약 표의 특정 필드만 가져올꺼면 * 대신 그 특정 필드의 이름을 가져오면 됨

2. 조건에 맞게 필터링 : where
-> ex) select * from orders where payment_method = "Cash"
-> 위의 ex에서 "Cash"에 쌍 따옴표가 들어간 이유는 이렇게 안하면 파일을 읽을 수 없음
-> 여러 조건을 걸때는 and로 이어서 쓰면됨

3. 데이터 범주에 따라 묶어서 통계치를 구하기 : group by
-> 보통 통계치를 구할때, ex) select count(*) from users where name = "황**" 이렇게 해서 황씨 성을 가진 사람의 수를 체크함
-> 근데 이 성이 엄청나게 많은경우 하나하나 위의 내용처럼 적을수는 있지만.. 양이 너무 많이 존재
-> 그렇기 때문에 select name, count(*) from users group by name 으로 해서 성씨별로 각각 인원 수를 체크
-> select 범주별로 세어주고 싶은 필드면, count(*) from 테이블명 group by 범주별로 세어주고 싶은 필드명

4. 정렬 : order by
-> 이건 단순한 정렬을 의미
-> ASC( 오름차순 - 작은 -> 큰 ) , DESC( 내림차순 - 큰 -> 작은 )
-> ex) 어떠한 sql query문 뒤에 order by 정렬의 기준이 될 필드명 + ASC or DESC(optional) 하면 됨 ( 참고로 기본적으로 true 값은 ASC로 되어 있음 )

5. 여러 데이터를 합쳐서 분석 : join

6. 더 쉽게 깔끔하게 원하는 데이터 얻기 : Subquery
-> 쿼리 안의 쿼리 즉, 하위 쿼리의 결과를 상위 쿼리에서 사용하여 SQL쿼리가 훨씬 간단
-> ex ) SELECT u.user_id, u.name, u.email FROM users u INNER JOIN orders o ON u.user_id = o.user_id WHERE o.payment_method = 'kakaopay' 를 서브쿼리로 바꾸면
-> SELECT u.user_id, u.name, u.email FROM users u WHERE u.user_id IN ( SELECT user_id FROM orders WHERE payment_method = 'kakaopay' ) 로 바뀐다

7. 표 혹은 테이블에서 맨 첫번째 열에 나와있는 각각의 특징을 말하는 부분 : 필드(field)

8. 표를 보여주는 방법 : show 표 이름

9. 범위 조건 : between A and B

10. 포함 조건 : in 
-> ex) in week(1,3) : 1~3

11. 패턴 조건 : like
-> ex) where email like '%daum.net'
-> 위의 ex 처럼 이메일이 다음으로 끝나는 것들 찾아옴
-> 'a%' : a로 시작하는 단어
-> '%a' : a로 끝나는 단어
-> '%a%' : a를 포함하는 단어
-> ''a%o' : a를 시작해서 o로 끝나는 단어

12. 일부 데이터, 제한된 개수 만큼 가져오기 : limit
-> limit된 개수만큼만 가져옴
-> select * from orders where payment_method = "kakaopay" limit 5;

13. 중복 데이터 제외하고 가져오기 : distinct
-> ex) select distinct(payment_method) from orders;
-> 우의 ex 처럼 특정 값에서 중복 데이터를 제외해서 가져옴

14. 숫자 세기 : count
-> ex) select count(*) from orders
-> 여기서 괄호 안은 원하는 특정 값을 넣을 수 있음

15. 최소, 최대 : min, max
-> ex) select 범주가 담긴 필드명, min(최솟값을 알고 싶은 필드명) from 테이블 명 group by 범주가 담긴 필드명;
-> ex) select 범주가 담긴 필드명, max(최댓값을 알고 싶은 필드명) from 테이블 명 group by 범주가 담긴 필드명;

16. 평균 : avg
-> ex) select 범주가 담긴 필드명, avg(평균값을 알고 싶은 필드명) from 테이블 명 group by 범주가 담긴 필드명;
-> 추가로 avg를 반 올림 하고 싶은경우 avg를 소괄호로 묶은 후 round를 붙이면 됨

17. 합 : sum
-> ex) select 범주가 담긴 필드명, sum(합계를 알고 싶은 필드명) from 테이블 명 group by 범주가 담긴 필드명;

18. 별칭 : as
-> select payment_method, count(*) as cnt 이런식이면 count가 된 값이 필드명이 count(*)아닌 cnt로 나옴
-> as를 안 붙이고 바로 count(*) cnt라고 해도 별칭이 자동적으로 인정됨

19. 합치기 : join ( join을 함께 쓰는 경우 on을 이용하여 사용 )
-> 두 테이블의 공통된 정보 (Key값)를 기준으로 테이블을 연결해서 한 테이블처럼 보는 것
-> Left Join => (A차집합B) 합칩합 (A교집합B) ( 결국 A그 자체인데 B의 내용을 포함하는거 까지 보여주는 것 ( 비어있는 값이 존재 할 수 있음, A에 맞춰서 B의 데이터를 당겨오는거기 때문 )
-> Inner Join => A교집합B ( 공통된 부분만 값을 가져오기 때문에 여기서는 비어있는 값이 따로 없고 값은 다 있음 )
-> join의 범위를 더 확장 시키면 Left Outer Join, Full Outer Join, Right Outer Join

728x90

'잡다한 지식' 카테고리의 다른 글

[JS] sequelize op 사용  (0) 2023.10.26
[JS] ioredis 라이브러리  (0) 2023.10.11
정규식  (0) 2023.01.10
Nest 기본 형태  (0) 2023.01.08
NestJS 란?  (0) 2023.01.01