본문 바로가기

DB/DB 문법13

뷰(View) 뷰(View) 테이블은 실제로 데이터를 갖고 있지만, 뷰는 실제 데이터를 갖지 않는다. 뷰 정의(View Definition, SQL 텍스트 파일)만 갖고 있다. 쿼리에서 뷰가 사용되면 DBMS 내부적으로 질의를 재작성(Rewrite)한다. 실제 데이터를 가지고 있지 않지만 테이블의 역할을 수행한다. 가상 테이블(Virtual Table)이라고도 한다. VIEW 생성 CREATE VIEW v_palyer_team AS SELECT p.player_name, p.back_no, p.team_id, t.team_name FROM player p INNER JOIN team t ON p.team_id = t.team_id; CREATE VIEW 문을 통해 VIEW 생성를 생성할 수 있다. VIEW 확인 SEL.. 2023. 5. 23.
!= NULL, <> NULL, IS NOT NULL 차이 !=, , IS NOT 차이 의미상으로는 같지 않다를 나타내어 모두 동일한 결과를 반환할 것이라고 생각할 수 있다. 하지만,, !=, , IS NOT에는 타입 비교 대상의 범위 차이가 있다. != 와 연산자는 동일한 기능을 하며 원시 타입(Primitive Type)에 대해서만 동작하고, IS NOT NULL은 모든 타입에 대해 동작한다. !=, , IS NOT NULL 예시 != NULL을 사용한 경우 SELECT delv_msg FROM table WHERE delv_msg != NULL; != NULL을 사용한 경우에는 출력한 레코드가 없는 것을 확인할 수 있다. 와는 동일한 기능을 하기 때문에 는 넘어가겠다. IS NOT NULL을 사용한 경우 SELECT delv_msg FROM table WH.. 2023. 5. 19.
TCL(Transaction Control Language) TCL 이란? DCL(Data Control Language)에서 트랜잭션을 제어하는 명령인 COMMIT과 ROLLBACK만을 따로 분리해서 TCL이라고 한다. 트랜잭션 데이터베이스의 논리적 연산 단위 의미적으로 분할할 수 없는 최소의 단위 일반적으로 하나의 트랜잭션은 여러 SQL 문장을 포함한다. 성공 시 모든 연산을 반영, 취소 시 모든 연산을 취소한다 => All or Nothing 트랜잭션 상황 예시 도서 주문 재고 수량 감소, 주문 내역 생성 결제 포인트 적립 교통카드 충전 잔액 증가 결제 계좌 이체 원 계좌의 잔액 감소 주문 내역 생성 결제 포인트 적립 이체라는 하나의 행위를 실행하기 위해서는 한 쪽에서 잔액을 감소하고, 다른 한쪽에서 잔액을 증가시키는 두 연산이 필요하다. 트랜잭션의 특성 (.. 2023. 5. 19.
쿼리 실행 순서 쿼리 실행 순서 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.