
안녕하세요, 끙정입니다. 오늘은 서브 쿼리의 마지막 편인 테이블 병합입니다. MERGE와 UPDATE FROM이 있습니다. 천천히 알아보겠습니다. 1. MERGE(Oracle, SQL Server Only) 작업을 할 때는 혹시 모를 사고를 대비하기 위해 사본을 떠 두거나 백업을 떠 두곤 합니다. 그리고 변경된 사본 데이터를 다시 원본으로 가져오는데, 정확하게 똑같이 만들어야 한다면 덮어써 버리 되지만 때로는 선별적으로 가져와야 할 때도 있습니다. 이럴 때 무엇이 바뀌었는지 일일이 살펴보고 바뀐 건 UPDATE 하고 지운 건 다시 INSERT 해야 합니다. 이런 작업을 한 번에 해주는 것이 바로 MERGE입니다. 비교, 삽입, 갱신을 한 방에 해준다고 해서 UPSERT라고 부르기도 합니다. 다만 두 테이..

안녕하세요, 끙정입니다. 기나긴 서브 쿼리에 대해서 여정 중입니다. 오늘은 테이블 조합을 통한 서브 쿼리에 대해서 알아보겠습니다. 하나의 엔터티를 저장하는 테이블이라도 성능상의 이유로 일정한 조건에 따라 테이블을 나누어 놓기도 합니다. 예를 들어 매출 정보를 몇 년치 모으면 너무 거대해지는 데다 작년, 재작년 데이터를 굳이 같이 둘 필요가 없습니다. 이럴 때는 연도별로 또는 월별로 테이블을 분할하여 관리합니다. 이렇게 흩어져 있는 테이블의 정보를 조합하여 보아야 할 때, 집합 연산자를 사용합니다. 1. UNION / UNION ALL UNION 연산자는 복수 개의 결과셋에 대한 합집합을 생성합니다. 합집합은 이쪽에 있는 정보와 저쪽에 있는 정보를 합쳐 한 덩어리로 보여주는 것입니다. /* 두 출력 결과를..

안녕하세요, 끙정입니다. 오늘도 서브쿼리에 대해서 알아보겠습니다. 오늘은 서브쿼리에서 인라인 뷰에 대해서 알아보고자 합니다. 아주 유용하고 활용도가 높은 문법입니다. 1. SELECT의 중첩 서브쿼리는 값이 올 수 있는 곳이면 어디나 올 수 있지만 주로 다음 세 곳에서 사용합니다. 1) WHERE 절: 조건에 사용할 값을 찾는다. 2) SELECT 절의 필드 목록: 출력할 값을 찾는다. 3) FROM 절: 출력 대상 테이블을 생성한다. WHERE 절이나 SELECT 절의 서브쿼리는 둘 다 값을 리턴합니다. 이에 비해 FROM 절에 오는 서브쿼리는 값이 아닌 테이블을 리턴합니다. FROM 절은 조회 대상 테이블을 명시하는 문장이니 FROM 다음의 서브쿼리는 테이블과 자격이 같습니다. 이러한 FROM 절의 ..

안녕하세요, 끙정입니다. 오늘은 서브 쿼리 탐구 2편, 서브쿼리 연산자에 대해서 알아보겠습니다. 전에 살펴본 IN 연산자와 비슷하게 ANY, ALL, EXISTS 가 있습니다. 천천히 살펴보겠습니다. 1. ANY, ALL IN 연산자는 괄호 안의 결과 셋과 순차적으로 상등 비교하는데 비해, ANY, ALL 연산자는 결과셋 전체와 비교합니다. ANY는 그중 하나라도 만족하는 값이 있으면 참이고, ALL은 모두 만족해야 참입니다. ANY는 조건을 OR로 연결하는 것이고, ALL은 조건을 AND로 연결합니다. 다음 두 쿼리를 통해 ANY와 ALL을 비교해보겠습니다. /* 영업부서의 직원들의 어떤 salary 보다 큰 직원 */ SELECT name FROM tStaff WHERE salary > ANY (SE..

안녕하세요, 끙정입니다. 오늘부터는 서브쿼리에 대해서 알아보겠습니다. 서브쿼리부터는 이제 쿼리가 다소 길어지고 복잡해질 수 있습니다. 그러나 조금씩 이해를 하고 쿼리를 바라본다면, 서브쿼리도 금방 익숙해질 수 있습니다. 서브쿼리는 쿼리문 안에 또 다른 쿼리문이 포함된 구문입니다. 단발적인 질문이 아닌 복합적이고 단계적인 질문을 할 때는 여러 개의 쿼리를 중첩해서 사용합니다. 리턴하는 행과 열의 개수에 따라 다음과 같이 분류합니다. 1) 단일행 서브쿼리: 하나의 값만 리턴. 스칼라값 하나를 리턴. 2) 다중행 서브쿼리: 여러 개의 행을 리턴. 3) 다중행 열 서브쿼리: 여러개의 열로 구성된 여러 개의 행인 테이블을 리턴. 또한 외부쿼리와의 관계에 따라 독립 서브쿼리와 연관 서브쿼리로도 구분합니다. 1. 단..

안녕하세요, 끙정입니다. 오늘은 시퀀스에 대해서 알아보고자 합니다. 시퀀스는 DBMS마다 문법이 전부 다르기 때문에 다소 헷갈리고 귀찮을 수 있습니다. 역시나 대표 3인방인 Oracle, SQL Server, MariaDB의 문법을 비교해가면서 살펴보겠습니다. 1. 들어가기 전에 기본키는 레코드의 유일성을 보장할 뿐만 아니라 관계를 형성하는 중요한 역할을 합니다. 그러나 기본키가 강제 규정은 아니기도 하고, 마땅한 필드가 없는 경우도 있습니다. 이럴때 사용하는 것이 일련번호입니다. 계속 증가하는 일련번호를 붙이면 NULL도 아니고 고유성도 부여할 수 있습니다. 또한 정수형이기 때문에 테이블 용량이 늘어나더라도 크게 부담되지는 않습니다. 2. 시퀀스 SEQUENCE (오라클, SQL Server Only)..

안녕하세요, 끙정입니다. 오늘은 기본키, PRIMARY KEY에 대해 알아보겠습니다. 무결성을 지키기 위해서는 레코드가 중복되면 안됩니다. 그러기 위해서는 레코드 고유의 값이 필요합니다. 바로 기본키입니다. 1. 식별자 테이블의 특정 레코드를 읽거나 변경하려면 레코드끼리 구분할 수 있는 고유의 키가 필요합니다. 이러한 고유의 키가 될 수 있는 조건은 1) 값이 꼭 존재해야 하며 2) 구분을 위한 고유값을 가져야 합니다. 예를 들어 어떤 테이블에 아래와 같은 필드 목록이 있다고 가정합니다. 주민등록번호, 사번, 몸무게, 키, 직급, 이름, 핸드폰, 이메일. 이러한 필드 목록 중에서 어떤 필드를 기본키로 결정할지는 사용자의 선택이지만, 그 중에서 가장 적합한 것을 골라야 합니다. 적합한 키 주민등록번호, 사..

안녕하세요, 끙정입니다. 오늘은 DB에서 아주 중요한 개념인 무결성에 대해서 알아보도록 하겠습니다. 또한 무결성을 위해서 제약이라는 방식이 따라붙습니다. 처음 들으면 이게 뭔 소린가 하시겠지만, 천천히 이해하면 크게 어렵지 않습니다. 자, 따라오시죠. 1. 무결성 관리 DB에서는 모든 데이터가 결함 없이 완벽한 상태를 무결성(Integrity)이라고 합니다. DB가 이전의 단순한 정보 저장 방식과 다른 것은 바로 이런 무결성 덕분이라고도 할 수 있습니다. 예를 들면 아래와 같은 컴퓨터 부품을 파는 쇼핑몰의 주문 테이블이 있다고 가정해봅시다. 날짜 회원 제품 개수 2020-3-4 김유신 NVIDIA GEFORCE 3070 2 2020-3-10 최영 SAMSUNG DDR RAM 16G 32352 2045-3..

안녕하세요, 끙정입니다. 오늘은 레코드를 삭제하거나 갱신하는 문법에 대해서 알아보도록 하겠습니다. 레코드를 삭제하는 DELETE, 테이블을 비워버리는 TRUNCATE, 레코드를 수정하는 UPDATE가 있습니다. 하나씩 살펴보겠습니다. 1. DELETE 레코드를 삭제할 때는 DELETE를 사용합니다. 삭제는 항상 레코드 단위로 수행하므로 필드(열)에 대한 지정은 없습니다. /* 필드 지정 없이 레코드 정보가 삭제 된다. */ DELETE FROM 테이블 WHERE 조건 INSERT는 전치사 INTO를 쓰는 반면에, DELETE는 전치사 FROM을 씁니다. 오라클과 SQL Server는 FROM의 생략을 허용하지만, Maria DB는 생략을 허용하지 않습니다. 결국 항상 FROM을 써주는 것이 좋습니다. M..

안녕하세요, 끙정입니다. 오늘은 테이블에 레코드를 입력할 수 있는 삽입문에 대해서 알아보고자 합니다. 기본적으로는 INSERT를 생각하실 겁니다. 그 외에도 목적에 따라 INSERT SELECT라든지 CREATE SELECT 도 있습니다. 하나씩 찬찬히 뜯어보겠습니다. 1. INSERT INSERT INTO 테이블 (필드목록) VALUES (값목록) 기본적인 INSERT 구문의 형식은 위와 같습니다. 구문 해석상 전치사 INTO가 꼭 필요한 것은 아니지만 SQL 표준에서는 INTO를 붙여야 합니다. 예외로 SQL Server나 Maria DB는 INTO를 생략하는 것을 허용하지만, 습관적으로 붙이는 것이 여러모로 좋습니다. Oracle은 INTO를 넣어야 한다. SQL Server와 Maria DB는 I..

안녕하세요, 끙정입니다. 오늘은 다른 형식의 집계 함수인 GROUP BY에 대해 알아보겠습니다. 1.GROUP BY 우리가 만일 각 부서별 평균 월급을 알고 싶다면, 부서마다 AVG 함수를 호출하면 됩니다. 다음과 같이 말이죠. 그러나 굉장히 비효율적이라는 것을 아실겁니다. 부서가 수십개라면, 수십개의 쿼리를 따로 날려줘야하고, 한 눈에 보기도 힘듭니다. 이럴때 사용하는 것이 바로 GROUP BY입니다. GROUP BY는 기준 필드가 같은 레코드를 모아 통계값을 구합니다. 또한 기준 필드는 집계 함수와 함께 쓸 수 있어 목록도 보기 좋게 출력할 수 있습니다. /* GROUP BY 와 필드를 넣어준다. */ SELECT depart, AVG(salary) FROM tStaff GROUP BY depart;..

안녕하세요, 끙정입니다. 오늘은 집계함수를 알아보도록 하겠습니다. 함수는 입력값으로부터 모종의 계산을 하여 출력값을 리턴하는 장치입니다. 입력은 함수명 다음의 괄호 안에 인수로 전달하여 함수 호출문은 실행 결과를 리턴합니다. SQL 함수의 입력값은 대부분 필드이며 계산식이나 * 같은 기호도 전달할 수 있습니다. FUNCTION (필드) 1. COUNT 가장 대표적인 집계함수는 COUNT가 있습니다. 조건에 맞는 레코드 개수를 반환합니다. SELECT COUNT(*) FROM tStaff; /* 필드명을 지정해주면 보기 편하다. */ SELECT COUNT(*) AS "총 직원수" FROM tStaff; WHERE 절을 포함해서 조건에 맞는 레코드 개수를 출력할 수도 있습니다. /* salary 가 400..
- Total
- Today
- Yesterday
- genai
- Apple
- Samsung
- Nvidia
- perplexity
- aichip
- aitv
- datacenter
- condenast
- IDC
- galaxyai
- Meta
- sql
- apple intelligence
- searchgpt
- 액침냉각
- Amazon
- ChatGPT
- sb1047
- SSI
- alexa
- Intel
- ai pc
- OpenAI
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |