데이터베이스와 SQL
-
[데이터베이스] SQL 서브 쿼리의 유형 ( IN, NOT IN, EXISTS )데이터베이스와 SQL 2023. 1. 29. 17:49
서브 쿼리는 하나의 SQL문에 포함되는 또 다른 SQL 문으로, 중첩 서브쿼리와 상관 서브 쿼리로 분류 할 수 있다. 중첩 서브쿼리는 단독 실행 가능한 형태이며, 상관 서브쿼리는 외부 테이블 열 참조가 필요한 형태이다. 서브쿼리는 메인 쿼리의 열을 모두 사용할 수 있지만, 메인 쿼리는 서브 쿼리의 칼럼을 사용할 수 없다. 중첩 서브쿼리는 SELECT절의 비교 연산자에서 많이 사용한다. SELECT ProductID ,UnitPrice ,AvgPrice = (SELECT UnitPrice FROM dbo.[Order Details]) -- 다중 행 반환 FROMdbo.[Order Details] As od WHEREOrderID 20 ); NOT IN ()은 비교 연산자 ()와 논리 연산자 (AND)와 결..
-
[데이터베이스] SQL 집합 연산자 (intersect, union, except)데이터베이스와 SQL 2023. 1. 23. 18:06
집합 연산자는 두 개 이상의 테이블에서 조인을 사용하지 않고, 연관된 데이터를 조회하는 방법 중 하나이다. SELECT 절의 칼럼 수가 동일하고, 동일 위치에 존재하는 칼럼의 데이터 타입이 상호 호환이 가능해야 한다. INTERSECT 여러 개의 테이블에 대한 교집합이다. (AND) INNER JOIN은 중복된 값을 모두 추출하지만 기본적으로 intersect는 중복 값을 하나의 행으로 만든다. UNION 여러 개의 테이블에 대한 합집합으로, 중복된 행은 역시 하나로 만든다. n(A ∪ B) = n(A) + n(B) - n(A ∩ B) UNION ALL 여러 개의 테이블에 대한 합집합이지만, 중복된 행은 전부 결과로 추출한다. 중복 값이 없다면 UNION과 동일한 결과를 보여주지만, 결과의 정렬 순서는 ..
-
[데이터베이스] MSSQL 조인 방법, inner join과 outer join 차이데이터베이스와 SQL 2023. 1. 23. 17:21
관계형 데이터베이스에서 조인 (JOIN)이란, 두 개 이상의 테이블들을 연결 또는 결합하여 데이터를 출력하는 것을 의미한다. 데이터베이스에서 테이블은 정규화되어 여러 개의 테이블로 나뉘어 있으며, 이때 필요한 데이터를 결합하여 원하는 데이터를 추출할 수 있다. 조인에는 여러가지 종류가 있다. Inner Join = (A ∩ B) A INNER JOIN B on A.key = B.key 결과 집합은 교집합으로 중복을 허용한다. OUTER JOINs 은 차집합 + 교집합으로, 교집합은 inner join 차집합은 NULL 값 열로 결합한다. 조인 조건은 교집합에 대한 조건으로 where 절의 위치나 조인 순서에 따라 결과나 성능이 달라진다. 잘못된 OUTER JOIN은 사용하지 않도록 해야한다. Left O..
-
동적 SQL, EXEC() 와 sp_executesql데이터베이스와 SQL 2023. 1. 7. 10:51
문자열로 구서왼 동적 쿼리가 필요할 경우, 기본적으로 sp_executesql을 사용한다. EXEC() 보다 상대적으로 보안이 안전한 편이며 컴파일 부하가 적다. 한번 컴파일 하면, Caching된 것을 사용하기 때문에 Cache의 재사용 효율이 좋다. 또한 출력 매개변수 지원을 지원한다. EXEC()는 순수 동적 쿼리로, Query Optimizer에 의해 자동 매개변수화 쿼리로 변환이 가능하다. EXEC() DECLARE @TableName varchar(128) = 'Orders', OrderID int = 10248; DECLARE @sql varchar(8000), @sql2 varchar(max); SET @sql = 'SELECT OrderID, OrderDate' + ' FROM ' + '..
-
[데이터 베이스] MSSQL 임시테이블과 테이블 변수데이터베이스와 SQL 2023. 1. 7. 10:31
임시테이블 활용 동일한 행들에 대한 중복, 반복, 집계 처리가 필요한 경우 중간 결과 저장과 재사용 cursor 대체용: 재귀 호출 처리 대량 조인 + union + 집계 쿼리 => 단순화 기타 SQL server 내부적으로 사용 MTF (Multi statement Table-valued Function) TVP (Table Valued Parameter) 임시테이블과 테이블 변수 특징 tempdb에 물리적으로 저장 #: Local Temp Table (현재 세션 용) ##: Global Temp table (전체 세션 공유) @: Table Variable 현재 배치 용 Table 변수 PK/UNIQUE 생성 지원 기타 인덱스는 비지원 FK 제약 조건은 선언만 가능 CHECK 제약 조건 지원
-
[데이터 베이스] MSSQL SEQUENCE (시퀀스) 개체 생성 및 사용데이터베이스와 SQL 2022. 12. 17. 14:21
시퀀스(Sequene) 는 단어 의미 그대로, 순서를 부여하는 것을 의미한다. 독립 개체로 생성되는데, 순번의 중앙 저장소로 디폴트 타입은 bigint이다. 독립 개체이므로 관리가 필요하며, IDENTITY와 동일하게 활용할 시에는 테이블 단위 개체가 필요하다. 여러 테이블에 공유되는 고유 순번을 생성할 수 있다. 지정 번호 도달하면 다시 시작이 필요한 경우 처음부터 다시 시작하는 cycling 을 지원하고, 순번의 조정 및 변경이 자유로운 편이다. 시퀀스 값을 다른 열을 기준으로 정렬해야 하는 경우에 NEXT VALUE OVER () 절을 사용하면 된다. SEQUENCE 개체 VS. IDENTITY sequence 와 identity의 차이는 다음과 같이 정리할 수 있다. 기능 IDENTITY SEQU..
-
[데이터베이스] MSSQL 다양한 DML 활용하기, 변수와 임시 테이블데이터베이스와 SQL 2022. 11. 11. 20:44
UPDATE + SET 절 열 값을 변수에 저장할 수 있어 후행 SELECT 쿼리가 불필요하다. DECLARE @PVID int = 3150; BEGIN TRAN SELECT PV_ID, UnitLength FROM dbo.ROAD WHERE PV_ID = @PVID; DECLARE @bLeng length, @aLeng length; UPDATE dbo.ROAD SET @bLeng = UnitLength , @aLeng = UnitLength = UnitLength * 1.15 WHERE PV_ID = @PVID; SELECT @bLeng AS bLeng, @aLeng AS aLeng; SELECT PVID, UnitLength FROM dbo.ROAD WHERE PV_ID = @PVID; IF @@t..
-
[데이터베이스] SQL 테이블 값 생성자 VALUES()데이터베이스와 SQL 2022. 10. 29. 18:29
테이블 값 생성자: Values() 행 집합을 선언한 후에 테이블 값을 입력할 때 사용한다. 구현 1 ) FROM ()의 파생 테이블 이전에는 임의의 값을 생성할 때 Union (all)을 이용해서 생성했다면, 현재는 Values를 생성하여 임의의 테이블을 생성할 수 있다. SELECT * FROM (VALUES (1), (2), (3)) AS d(num) 구현 2) INSERT ... VALUES DECLARE @products TABLE ( productName varchar(80), UnitPrice money ); INSERT INTO @products VALUES ('후추', \1000), ('구름', \2000), ((SELECT ProductName FROM dbo.Products WHERE..