일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- netlify
- CSS
- GOF
- 다형성
- git
- 캡슐화
- 객체지향
- npm
- DP
- 서브셋폰트
- github
- process.env
- Solid
- AOP
- mock
- MariaDB
- 디자인 패턴
- dfs
- PostgreSQL
- 메모이제이션
- Secret
- package
- azure
- dotenv
- 추상화
- Java
- 동적계획법
- 상속
- 클라우드
- bfs
- Today
- Total
이것저것 해보기🌼
[SQL] postgreSQL 문법 정리(CASE,JOIN,GROUP BY등) 본문
참고 포스팅
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=wiseyoun07&logNo=221135110180
http://www.gurubee.net/lecture/2953
기본 문법
1) 현재시간 출력 -> now()
select now();
-> CHAR() 형으로 바꾸기
select to_char(now(), 'yyyy-mm-dd');
※오라클의 FROM DUAL; 같은 것은 사용하지 않는다.
2) 오라클 NVL -> coalesce()
select coalesce(user_id, 0) from user_t;
-> user_id 가 NULL 이면 0으로 출력하기
3) 오라클 ROWNUM=3 -> LIMIT 3
select name from exam_t
limit 5
-> exam_t 상위 5개 이름 출력
※만약 오름차순, 내림차순으로 상위 값들을 출력하고 싶으면
먼저 order by 로 정렬한 결과를 다시 감싸서 limit 지정해야함
4) CASE 문
(ORACLE의 DECODE는 제공안함)
CASE WHEN nation = 'KR' THEN type = 'DOMESTIC' ELSE type = 'INTERNATIONAL' END
예시)
SELECT ename
, deptno
, CASE WHEN deptno = '10' THEN 'New York'
WHEN deptno = '20' THEN 'Dallas'
ELSE 'Unknown'
END AS loc_name
FROM emp
WHERE job = 'MANAGER'
5) JOIN
[INNER] JOIN
LEFT [OUTER] JOIN
RIGHT [OUTER] JOIN
FULL [OUTER] JOIN
CROSS JOIN
그런데 나의 경우에는 구름 테스트환경에서 PostgreSQL 로 풀때 INNER 를 붙이니까 잘 안되었던 것 같다.
그냥 INNER, OUTER는 생략하고 시험을 봐야겠다.
- INNER JOIN
SELECT *
FROM T1
JOIN T2
ON T1.num = T2.num;
T1의 num 과 T2의 num 이 서로 매칭이 되는 경우만 출력
그런데 꼭 INNER JOIN 안쓰고 EQUI JOIN 도 가능한것 같다.
- LEFT JOIN
SELECT *
FROM T1
LEFT JOIN T2
ON T1.num = T2.num
T1, T2와 INNER JOIN 해서 T1의 모든 값을 출력하고, T2에 매칭되는 값이 없는 경우에는 null 값을 넣어 출력
- RIGHT JOIN
SELECT *
FROM T1
RIGHT JOIN T2
ON T1.num =T2.num;
T1과 T2를 INNER JOIN 해서 T2의 모든 값을 출력하고, T1에 매칭되는 값이 없는 경우에는 null 값을 넣어 출력
- FULL OUTER JOIN
SELECT *
FROM T1
FULL JOIN T2
ON T1.num = T2.num;
T1, T2의 모든 결과를 다 가져오고, 매칭되는 값이 없는 경우 null 을 넣어서 출력
- CROSS JOIN
SELECT *
FROM t1
CROSS JOIN t2;
어떤 값을 기준으로 매칭하는 것이 아닌, 모든 경우의 수를 전부 매칭
t1이 N행 있고, t2가 M행 있다면 결과는 N * M 행
6) GROUP BY
ORCLE과 사용법이 동일하다.
PAYMENT 테이블을 STAFF_ID 기준으로 PAYMENT_ID의 카운트를 조회하며 STAFF_ID 기준으로 GROUP BY
SELECT
STAFF_ID,
COUNT(PAYMENT_ID) AS COUNT
FROM
PAYMENT
GROUP BY
STAFF_ID;
GROUP BY를 사용하면 SELECT 절에는 GROUP BY에 쓰인 column만 사용가능하다.
만약 위에서 STAFF_NAME이 필요한 경우에는, 아래와 같이 사용해야한다.
SELECT
A.STAFF_ID,
COUNT(A.PAYMENT_ID) AS COUNT,
B.STAFF_NAME
FROM
PAYMENT A,
STAFF B
WHERE
A.STAFF_ID = B.STAFF_ID
GROUP BY
A.STAFF_ID,
B.STAFF_ID
GROUP BY로 PAYMENT의 STAFF_ID 를 사용하면, PAYMENT의 다른 칼럼에도 접근이 가능해진다.
참고자료 : https://nittaku.tistory.com/431
RANK() 나 PARTITION BY() 정도 수준은 안나올것 같으므로 우선 이정도만 정리!
'코딩테스트' 카테고리의 다른 글
[자료구조] List, Map, Set, Stack, Queue 연습 (JAVA) (0) | 2021.07.02 |
---|---|
[백준 온라인 저지] 1991번: 트리 순회 (0) | 2021.07.02 |
[DFS/BFS/백트래킹] 참고자료, 코드 (0) | 2021.07.02 |
[구름] 코딩테스트 대비 JAVA BufferedReader 사용법 (0) | 2021.07.02 |
[프로그래머스] 타겟 넘버 (0) | 2021.07.02 |