본문 바로가기

DB19

쿼리 실행 순서 쿼리 실행 순서 SQL 쿼리문을 실행하는데 순서가 존재한다. FROM (+ JOIN) 쿼리의 첫 번째 실행 순서는 FROM절이다. FROM 절에서는 조회하는 테이블 전체를 가져온다. WHERE 절 WHERE 절에서는 FROM 절에서 읽어온 테이블에서 조건에 맞는 결과만 갖도록 데이터를 필터링한다. GROUP BY 절 GROUP BY 절에서는 선택한 컬럼으로 그룹핑한다. GROUP BY 절을 사용하게 되면 해당 컬럼으로 집계함수를 사용할 수 있다. HAVING 절 HAVING 절은 여러 조건들을 처리한 후 남은 데이터에서 어떤 열을 출력해줄지 선택한다. HAVING 절은 각 그룹에 조건을 걸기 때문에 퍼포먼스가 떨어지게 된다. WHERE 절에 있는 내용을 HAVING 절에서 사용할 수 있다.(단, GROU.. 2023. 5. 18.
조건식(Conditional Expressons) CASE CASE는 특정 조건을 만날 때 SQL CODE를 실행시키기 위해 사용한다. 다른 프로그래밍 언어의 IF/ELSE와 비슷하다. Searched Case Expression CASE WHEN condition1 THEN result1 WHEN conditoin2 THEN result2 ELSE some_other_result END SELECT a, --------------------- CASE WHEN a = 1 THEN 'one' | a | label | WHEN a = 2 THEN 'two' |---------------------| ELSE 'other' AS label | 1 | one | END | 2 | two | FROM test; --------------------- 다양한 조.. 2023. 5. 18.
쿼리 조회 시 *(asterisk)는 정말 지양해야 할까? https://oneny.tistory.com/11 에서 쿼리 조회하는데 *(asterisk)를 사용하면 좋지 않다고 얘기했는데 얼마나 영향이 있는지 직접 테스트해보자. *(asterisk)를 사용하여 조회한 경우 SELECT * FROM sales s, products p, users u WHERE s.barcode = p.barcode AND s.user_id = u.id; 매출(Sales) 테이블에서 barcode를 통해 판매상품(products) 테이블과 JOIN을 하고, 사용자 테이블은 user_id를 통해 JOIN하는 쿼리이다. 쿼리 결과 쿼리 결과로 30,204 레코드를 반환하는데 4.355s가 걸렸다. barcode와 user_id만 조회한 경우 SELECT s.barcode, u.name.. 2023. 5. 18.
데이터베이스 및 테이블 생성 제약 조건(Constraints) Constraints는 테이블의 데이터 컬럼에 적용되는 규칙을 말한다. 잘못된 데이터가 데이터베이스에 입력되는 것을 방지하여 데이터의 정확성과 신뢰성을 보장할 수 있다. 제약 조건은 주로 두 가지(열 제약 조건, 테이블 제약 조건)로 나눌 수 있다. 열 제약 조건(Column Constraints) 열의 데이터가 특정 조건을 준수하도록 제한하는 조건 테이블 제약 조건(Table Constraints) 개별 컬럼이 아닌 전체 테이블에 적용되는 조건 가장 일반적으로 사용되는 제약 조건 제약 조건 설명 NOT NULL 해당 컬럼을 NULL 값을 가질 수 없도록 제한 UNIQUE 해당 칼럼에서의 값이 유일하도록 제한 PRIMARY KEY 데이터베이스 테이블에서 각 행(레코드)를.. 2023. 5. 18.
JOINS와 집합 연산자 JOIN은 여러 개의 테이블을 결합할 수 있도록 해주는 기능이다. INNER JOIN INNER JOIN은 두 테이블을 충족하는 레코드 세트를 결과로 출력한다. SELECT * FROM table_a INNER JOIN table_b ON table_a.col_match = table_b.col_match; SELECT * FROM table_b INNER JOIN table_a ON table_a.col_match = table_b.col_match; SELECT * FROM table_a, table_b WHERE table_a.col_match = table_b.col_match; INNER JOIN에서는 테이블의 순서가 중요하지 않다. 또한, JOIN에 INNER 키워드가 없는 경우 Postgre.. 2023. 5. 16.
서브쿼리(Sub Query) 서브쿼리는 알려지지 않은 기준을 이용한 검색을 위해 사용한다. 서브쿼리를 이용하면 다른 쿼리의 결과에 대한 메인쿼리의 일부로 수행하여 복잡한 쿼리를 구성할 수 있다. 구문은 간단하며 두 개의 SELECT 문을 포함한다. SQL문에서 서브쿼리를 사용할 수 있는 절 SELECT FROM WHERE HAVING ORDER BY INSERT 문의 VALUES UPDATE 문의 SET 조인과 서브쿼리 차이점 조인은 조인에 참여하는 모든 테이블이 대등한 관계에 있기 때문에 조인에 참여하는 모든 테이블의 칼럼을 어느 위치에서라도 자유롭게 사용할 수 있다. 조직(1)과 사원(M) 테이블을 조인하면 결과는 사원 레벨(M)의 집합이 생성된다. M:N 관계의 테이블을 조인하면 MN(= M * N) 레벨의 집합이 결과로서 생.. 2023. 5. 16.
시간 데이터 유형 테이블과 데이터베이스를 설계하고 시간 데이터 유형을 선택할 때는 신중하게 고려해야 한다. 상황에 따라 전체 TIMESTAMPTZ 레벨이 필요하거나 필요하지 않을 수 있다. 타임존 확인 show timezone; 타임존 설정(변경) set timezone = 'America/Los_Angeles'; Date and Time 정보와 관련된 데이터 타입 TIME: 시간만 포함 15:03:30.484561 DATE: 날짜만 포함 2023-05-16 TIMESTAMP: 타임존을 명시하지 않은 날짜와 시간 2023-05-16 15:03:30.484561 TIMESTAMP는 타임존에 따른 시간 변경이 적용되지 않는다. TIMESTAMPTZ: 타임존을 명시한 날짜와 시간 2023-05-16 18:01:40.920477.. 2023. 5. 16.
GROUP BY와 집계 함수 GROUP BY는 데이터를 분류하여 데이터가 어떤 범주에 어떻게 분포되는지를 이해하기 위해 데이터를 집계하는데 사용된다. 집계 함수 https://www.postgresql.org/docs/current/functions-aggregate.html SQL은 다양한 집계 함수를 제공한다. 집계 함수의 주요 아이디어는 여러 입력값을 가져와 하나의 출력값을 반환하는 것이다. 가장 일반적인 집계 함수: AVG() : 평균값을 반환 COUNT() : 값의 개수를 반환 MAX() : 최대값을 반환 MIN() : 최소값을 반환 SUM() : 모든 값의 합계를 반환 집계 함수 호출은 SELECT 절이나 HAVING 절에서만 발생하낟. 주의사항 AVG()는 소수점 이하 많은 자릿수의부동 소수점 값을 반환한다. COUNT.. 2023. 5. 15.
비교 연산자 및 기타 연산자 우선 순위 괄호() NOT 연산자 비교 연산자, SQL 연산자 AND OR 비교 연산자 모든 자료형에 대해 적용 가능 NOT, AND, OR (우선순위: NOT > AND > OR) 다음 SQL문 중 실행 결과가 나머지 두 가지와 다른 것은? SELECT player_name, position, height FROM player WHERE position 'GK' AND height > 180; SELECT player_name, position, height FROM player WEHRE NOT(position = 'GK') AND height > 180; SELECT player_name, position, height FROM player WHERE NOT(position = 'GK' AN.. 2023. 5. 15.