일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- ethers
- 프록시배포구조
- 러스트 기초
- 스마트컨트렉트 예약어 함수이름 중복
- rust 기초
- ethers v6
- Vue
- nest.js설명
- git rebase
- 스마트컨트렉트테스트
- ambiguous function description
- vue기초
- 스마트 컨트렉트 함수이름 중복
- 러스트 기초 학습
- chainlink 설명
- ethers websocket
- 티스토리챌린지
- 스마트컨트렉트프록시
- ethers type
- ethers typescript
- 머신러닝기초
- multicall
- 러스트기초
- 체인의정석
- 스마트컨트렉트 함수이름 중복 호출
- 오블완
- Vue.js
- SBT표준
- 컨트렉트 동일한 함수이름 호출
- 컨트렉트 배포 자동화
- Today
- Total
체인의정석
MySQL) 쿼리 실행 순서 및 테이블 합치기 본문
먼저 FROM 2개의 테이블을 합칠 때는 JOIN을 사용해야 한다.
select * from
테이블1 AS 별명1
INNER JOIN
테이블명2 AS 별명2
ON 테이블1.block_number = 테이블명2.block_number
where 조건;
이런 식으로 가져오고자 하는 테이블 2개를 선택한 후에 기준점으로 잡을 열을 ON으로 두고 where 조건을 걸면 된다.
이를 기본으로 하여 여러 테이블에서 합산한 값을 바탕으로 여러 조건을 필터링 하여 결과 값을 내는 경우 아래와 같이 낼 수 있다.
SELECT
MAX(row1) as 별명1, rowB as 별명2
FROM (
SELECT row1, row2 FROM 테이블1
UNION ALL
SELECT row1, row2 FROM 테이블2
) AS 테이블별명1
INNER JOIN(
SELECT rowA, rowB FROM 테이블A
UNION ALL
SELECT rowA, rowB FROM 테이블B
) AS 테이블별명2
ON 테이블1.block_number = 테이블명2.block_number
WHERE 조건 AND 조건2
GROUP BY rowB; //순서를 고려했을 때 select가 더 뒤이므로 별명 사용 불가 & 모든 연산이 여기에 다 들어가게
HAVING 조건3
ORDER BY 열이름
이렇게 여러 명령어가 들어가게 되면 명령어의 실행 순서가 중요한데
아래 블로그를 참고하여 정리를 해봤다.
https://nohriter.tistory.com/129
먼저 순서는 보는것 처럼 아래 순서로 작성이 된다.
1. SELECT 컬럼명
2. FROM 테이블명
3. WHERE
4. GROUP BY
5. HAVING
6. ORDER BY
하지만 실행 순서의 경우 조금 다르다
1. FROM
2. WHERE
3. GROUP BY (단일 값으로 축소, 이 때 합산 수식이 적용되지 않는 모든 열은 select 안에 다 나열해주어야 한다. 아니면 아래와 같은 에러가 난다.)
" SELECT list is not in GROUP BY clause and contains nonaggregated column '' which is not functionally dependent on columns in GROUP BY clause" => 해당 오류는 group by에 select에 누락된 모든 값을 써줘야 해결된다. (합산이 되는) 따라서 group by 이후에 조건을 having으로 걸고 그 뒤에 select로 거는 순서를 고려하여 쿼리문을 작성하여야 한다.
4. HAVING - where절 이후에 group by와 세트로 와서 다음 순서에서 조건절로 사용된다.
5. SELECT - 조건을 다 처리한 후 남은 데이터에서 마지막으로 가져온다. 여기서 쓰인 연산은 마지막으로 적용된다.
6. ORDER BY - 행의 순서를 가장 마지막에 정렬한다.
이에 따라서 정리하게 될 시에는 결국 조건을 순서에 따라 복잡하지만 차근차근히 필터링을 할 수 있었다.
'개발 > database' 카테고리의 다른 글
Sequalize와 raw query를 통하여 updated at, created at 만들기 (0) | 2023.08.25 |
---|---|
MYSQL에서 Insert와 update 하나의 구문으로 처리하기 (ON DUPLICATE KEY UPDATE, UPSERT, sequalize) (0) | 2023.08.21 |
스마트컨트렉트, 백엔드 , DB사이의 작업 처리에 대하여 (MySQL 다중 테이블 쿼리 + 백엔드 처리) (0) | 2023.02.13 |
Mysql에서 Json Extract & group by & CAST로 스마트 컨트렉트 이벤트 처리하기 (0) | 2023.02.08 |
sequalize에서 토큰의 데이터 타입 정의 (0) | 2022.12.01 |