전체 글 95

격리수준(Isolation)(2)

4. REPEATABLE READ COMMIT된 데이터만 읽도록 하며 현재 트랜잭션이 조회하는 데이터를 다른 트랜잭션에서 수정할 수 없도록 지정하여 한 트랜잭션 내에서 읽은 데이터는 항상 같은 값을 읽게 하는 격리 수준입니다. 즉, 데이터 조회 시 공유 잠금을 획득하고 트랜잭션이 완료되기 전까지 반환하지 않습니다. 다만 범위 조건 검색 시 해당하는 데이터에 UPDATE가 불가능하지만 INSERT는 가능합니다. 그래서 Drity Read, Non-Repeatable Read는 방지되지만 Phantom Read가 발생합니다. [Session 57]에서 REPEATABLE READ 격리 수준으로 테이블에서 NO가 1보다 큰 데이터를 조회하였고 해당하는 키값에 공유 잠금을 획득합니다.이후 [Session 56]..

Database/MS-SQL 2024.10.02

격리수준 (ISOLATION)(1)

격리수준(ISOLATION)이란?트랜잭션이 수행될 때 다른 트랜잭션으로부터 영향을 받지 않게 고립성을 유지시키는 트랜잭션 특징입니다.다른 트랜잭션에 영향을 받지 않도록 잠금(Lock)을 사용하며 트랜잭션 작업에 대한 고립성을 유지하기 위해 다양한 격리 수준으로 잠금의 유형을 정의합니다.즉, 여러 트랜잭션이 동시에 수행될 때 한 트랜잭션에서 조회 또는 변경되는 데이터에 대해 다른 트랜잭션에서 접근 가능한 수준을 정하는 것입니다 기본 격리 수준은 READ COMMITTED 이며, 격리 수준 옵션을 지정하는 구문은 다음과 같습니다.SET TRANSACTION ISOLATION LEVEL{ READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ |SNAPSHOT | SERI..

Database/MS-SQL 2024.09.24

부속 질의 ( 스칼라 서브쿼리, 인라인 뷰)

2. 스칼라 부속질의 - SELECT 부속질의 스칼라 부속질의 Scalar Subquery는 SELECT 절에서 사용되는 부속질의로, 부속질의의 결과 값을단일행, 단일열의 스칼라값으로 반환합니다. 만약 결과 값이 다중행이거나 다중열이라면DBMS는 그 중 어떠한 행, 어떠한 열을 출력해야 하는지 알 수 없어 에러를 출력합니다.또한 결과가 없는 경우에는 NULL 값을 출력합니다.스칼라 부속질의는 원칙적으로 스칼라값이 들어갈 수 있는 모든 곳에 사용 가능하며,일반적으로 SELECT 문과 UPDATE SET 절에 사용됩니다.주 질의와 부속질의와의 관계는 상관/비상관 모두 가능합니다.  예제 ) 고객별 판매액을 보이시오 (고객이름과 고객별 판매액 출력) SELECT (SELECT name FROM C..

Database/MS-SQL 2024.09.09

부속 질의 ( 서브 쿼리 )

부속 질의 (SubQuery) 는 SQL 문 안에 다른 SQL 문이 중첩된 질의를 말합니다. 다른 테이블에서 가져온 데이터로 현재 테이블에 있는 정보를 찾거나 가공할 때 사용합니다.예를들어서 고객 이름과 주문내역을 같이 보려면 Orders 테이블과 Customer 테이블을 연관시켜야합니다. 두 테이블의 관계를 토대로 특정 고객의 주문 내역을 확인하려면 조인 또는 부속 질의를 사용하면 됩니다. 조인을 사용할 경우 :  Customer 테이블과 Orders  테이블의 고객번호로 조인한 후 필요한 데이터를 추출한다.부속질의를 사용할 경우 : Customer 테이블에서 특정 고객의 고객 번호를 찾고, 찾은 고객번호를 바탕으로 Orders 테이블에서 확인한다.[ 부속질의의 종류 ]명칭위치영문 및 동의어설명중첩질의..

Database/MS-SQL 2024.09.02

내장함수 (2) | Null 함수

날짜 및 시간 함수 날짜는 단순히 문자열로 저장하여 관리할 수 있지만 날짜형 데이터로 저장하여 관리하면 편리합니다.날짜를 더하거나 차이를 구하는 연산을 쉽게할 수 있기 때문입니다.     DATEADD 함수 DATEADD()는 입력된 날짜에 사용자가 원하는 날짜만큼 더한 날짜를 반환하는 함수입니다.아래는 DATEADD 함수를 활용한 예시입니다. SELECT orderid "주문번호", orderdate "주문일", DATEADD(dd, 10, orderdate) "확정"FROM Orders;   SYSDATETIME 함수 SYSDATETIME() 함수는 SQL Server의 현재 시간을 반환하는 함수입니다. SELECT SYSDATETIME();-- 현재시간 SELECT DAY(SYSDATETIME())..

Database/MS-SQL 2024.08.26

내장 함수

이번에는 SQL의 내장함수에 대해 알아보는 시간을 가져볼 것입니다. 수학에서 함수 y = f(x) 는 값 x를 함수 f에 넣으면 y값을 결과로 반환한다는 의미입니다.SQL 에서도 수학의 함수처럼 특정 값이나 열의 값을 입력받아 그 값을 계산하여 결과 값을 돌려주는 개념을 사용합니다.SQL 에서 사용하는 함수에는 DBMS가 제공하는 내장 함수와 사용자가 직접 만든 사용자 정의 함수가 있습니다. SQL 내장 함수는 다음과 같이 SELECT 절, WHERE 절, UPDATE 절 등에서 모두 사용할 수 있습니다.SELECT 함수명(인자1,인자2,인자3,...)FROM 테이블이름WHERE 열이름 = 함수명(인자1,인자2,인자3,...); UPDATE 테이블이름SET 열이름 = 함수명(인자1,인자2,인자3,...)..

Database/MS-SQL 2024.08.15

[MS-SQL] 인덱스 (INDEX)란?

이번 시간에는 인덱스에 대해서 공부해보는 시간을 가져보겠습니다.  INDEX란?인덱스는 무작위로 저장된 데이터 집합에서 원하는 데이터를 쉽고 빠르게 찾을 수 있도록 제공되는 하나의 오브젝트입니다. 조건에 맞춰서 테이블을 검색할 때 테이블 전체의 데이터를 읽어가며 찾아내는 것이 아니라,인덱스의 키로 조건을 탐색하고 함께 저장된 행의 주소값을 통해 테이블의 다른 열을 참조하는 방식으로 수행합니다. 예를 들어, 책의 목차로 비유하면 책 속의 원하는 내용을 찾을 때 목차를 통해 페이지 번호를 쉽게 알아낼 수 있습니다.(목차가 세분화될수록 원하는 페이지를 정확하게 찾아낼 수 있음) 위의 예시와 마찬가지로 인덱스도 상세할 수록 데이터를 더 정확히 찾아낼 수 있습니다. 인덱스를 생성하는 기본 구문은 아래와 같습니다...

Database/MS-SQL 2024.08.12

[SQL] WHERE 절의 IN 연산자

데이터베이스에서 특정 조건일 때의 데이터를 조회하고 싶을 때 OR 문을 사용하는 경우가 많을 것입니다. 그런데SELECT [컬럼명]FROM [테이블명]WHERE [컬럼명] = [조건1] OR [컬럼명] = [조건2] OR [컬럼명] = [조건3] OR [컬럼명] = [조건n...] 이런식으로 조건이 많을 경우 눈에 보기 어려운 경우가 있을 것입니다.그럴 때는 IN 연산자를 활용하면 훨씬 간편하게 사용할 수 있습니다. 그리고 IN 연산자는 OR 연산자 보다 처리 속도가 빠르기 때문에 방대한 데이터에 접근할 경우, 성능면에서 유리합니다.또한, IN 연산자 안에 하위 쿼리를 작성할 수 있습니다. 아래는 IN 연산자의 예시입니다. SELECT [컬럼명]FROM [테이블명]WHERE [컬럼명] IN ('조건1',..

Database/MS-SQL 2024.08.01

정규화 (Normalization) 란?

정규화란 데이터베이스의 데이터를 구성하는 프로세스입니다.중복과 일관성 없는 종속성을 제거하여 데이터베이스를 보다 유연하게 만듭니다.=> 중복된 데이터를 없애는 과정을 통해 무결성(Integrity)을 유지할 수 있으며,데이터베이스의 저장 용량 또한 줄일 수 있습니다. 정규화 진행 단계로는 다음과 같이 있습니다.  제1 정규화제1 정규화란 테이블의 컬럼이 원자값 (Atomic Value, 하나의 값)을 갖도록 테이블을 분해하는 것입니다. 예시) => 여기서 조승연은 게임, 축구 2개의 취미를 가지고 있기 때문에 제1 정규형을 만족하지 못합니다. 위의 테이블에서 제 1 정규화를 진행하면 위와 같이 조승연의 게임, 축구가 2개의 필드로 분리되는 것을 확인할 수 있습니다.  제2 정규화제2 정규화란 제1 정규화..

Database/MS-SQL 2024.08.01