안녕하세요, 끙정입니다. 소계, 순위에 이어 오늘은 통계에 대해서 알아보겠습니다. 활용도에 따라서 많은 작업이 가능한 함수들입니다. 천천히 살펴보겠습니다. 1. NTILE NTILE(n) 함수는 레코드의 집합을 n개의 영역으로 구분하고 소속 영역을 구합니다. 인수 n은 나눌 영역의 개수를 지정합니다. SELECT NTILE(4) OVER (ORDER BY salary DESC) AS 구간, name, salary FROM tStaff; SELECT NTILE(4) OVER (PARTITION BY gender ORDER BY salary DESC) AS 구간, name, gender, salary FROM tStaff; 첫 번째 쿼리는 월급 순으로 정렬한 뒤 4개의 그룹으로 나눈 것입니다. 통계적으로 사..
안녕하세요, 끙정입니다. 오늘은 순위에 대해서 알아보겠습니다. 1. OVER SUM, AVG, MIN, MAX 집계 함수는 주로 GROUP BY와 함께 사용하며, 은근히 제약이 많아 복잡한 집계를 내는데 한계가 있습니다. OVER는 집계 함수를 보조하여 섬세한 그룹핑을 지원하면서도 구문은 더 간단한 축약형입니다. 집계함수() OVER(PARTITION BY 그룹핑 기준 ORDER BY 정렬기준 ROWS | RANGE) OVER 안에 상세 옵션이 들어가며 필요 없으면 생략 가능합니다. PARTITION BY 절은 GROUP BY와 유사한 그룹핑을 수행하며 ORDER BY 절은 통계를 낼 정렬 순서를 지정합니다. 다소 난해해 보일 수 있지만, 기존 집계 구문의 한계를 살펴보며 OVER를 이해해 보겠습니다. ..
안녕하세요, 끙정입니다. 오늘은 문자열 함수의 활용 방법인 검색, 변환, 대체에 대해서 알아보겠습니다. 1. 검색 검색은 문자열에서 특정 문자열이 있는지, 있다면 어디쯤에 있는지를 조사합니다. 1.1 INSTR 기본 검색 함수는 INSTR 이며 인수로 (문자열, 패턴, 시작 위치, 순서)를 전달하되, 시작 위치와 순서는 생략시 모두 1을 적용합니다. 문자열이 있으면 발견 위치를 리턴하며 없으면 0을 리턴합니다. INSTR(s, p, b, n) /* Oracle */ CHARINDEX(p, s, b) /* SQL Server */ POSITION(p IN s) /* MariaDB */ /* s에서 n번째 p를 b부터 찾아줘 */ /* Oracle */ SELECT INSTR('우리나라 대한민국', '나라'..
안녕하세요, 끙정입니다. 오늘은 분석의 시작인 소계에 대해서 알아보겠습니다. 문법으로는 ROLLUP, CUBE, GROUPING SETS가 있습니다. 대부분의 DBMS에서 호환성 걱정 없이 사용할 수 있고, 기능은 거의 비슷합니다. 하나씩 살펴보겠습니다. 1. ROLLUP (Oracle, SQL Server) , WITH ROLLUP(MariaDB, SQL Server) 가장 기본적인 통계 명령은 그룹별로 집계를 구하는 GROUP BY 입니다. 여러 개의 기준 필드를 지정하여 각 기준별로 그룹을 나누어 합계나 평균을 구할 수 있습니다. SELECT gender, SUM(salary) AS sum_salary FROM tStaff GROUP BY gender; SELECT depart, SUM(salary..
안녕하세요, 끙정입니다. 오늘은 함수 두 번째 시간으로 문자열 함수에 대해서 알아보겠습니다. 테이블에 저장하는 가장 흔한 타입은 문자열이며 길이나 형식의 제한이 없어 복합적인 정보를 포함할 수 있습니다. 데이터를 능숙하게 다루려면 문자열을 자유자재로 가공, 추출해야 합니다. DBMS는 일상적으로 필요한 모든 함수를 다 제공합니다. 지난번과 같이 함수는 오라클을 기본으로 SQL Server와 MariaDB를 같이 알아보겠습니다. DBMS별로 좌측과 동일하면 ''로 표시하겠습니다. (MariaDB의 우측은 오라클) 함수가 존재하지 않으면 'X'로 표현하겠습니다. 설명 오라클 SQL Server MariaDB 문자열의 길이 (바이트 수가 아닌 문자의 수) LENGTH LEN(s) CHAR_LENGTH 문자열의..
안녕하세요, 끙정입니다. 오늘은 함수에 대해서 알아보겠습니다. DBMS에는 크게 스칼라 함수, 집계 함수, 시스템 함수가 존재합니다. 스칼라 함수는 값 하나를 계산하며 전통적인 수학 함수와 비슷하고, 집계 함수는 여러 개의 값으로부터 통계값을 생성합니다. SUM, AVG, COUNT 등입니다. 마지막으로 시스템 함수는 NULL 관련 처리나 타입 변환 등을 처리합니다. 스칼라 함수는 또한 다루는 타입에 따라 수치, 문자열, 날자 함수로 세분화 됩니다. 오늘은 수치 함수에 대해서 알아보겠습니다. 수치 함수는 수치 값을 받아 계산을 거쳐 원하는 값을 리턴합니다. 대부분의 언어에도 비슷한 이름의 함수가 있어서 프로그래밍을 조금 해보신 분이라면 익숙하실 겁니다. 함수는 오라클을 기본으로 SQL Server와 Ma..
안녕하세요, 끙정입니다. 오늘은 조인의 마지막으로 간단하게 SELF JOIN에 대해서 알아보겠습니다. SELF JOIN은 조인 테이블이 자기 자신입니다. 특별한 문법이 없고 내부 조인 문법을 사용합니다. 한 테이블을 조인하는 것이 의미가 있으려면 테이블 내의 필드끼리 참조 관계여야 합니다. 즉, 한 필드가 다른 필드를 참조하는 1:n 의 자기 참조 관계가 있는 특수한 테이블에만 사용할 수 있습니다. 다음 테이블을 예시로 보겠습니다. /* 실습용 테이블을 만들어봅니다. */ CREATE TABLE tDirectory ( id INT PRIMARY KEY, name VARCHAR(20) NOT NULL, parent INT NOT NULL ); INSERT INTO tDirectory (id, name, p..
안녕하세요, 끙정입니다. 오늘은 조인의 여러 조건에 대해서 알아보도록 하겠습니다. 1. 서브쿼리와의 차이점 조인은 서브쿼리와 매우 유사합니다. 그러나 효과만 비슷할 뿐 수준이 다른 기술입니다. tCar와 tMaker 테이블을 통해서 티볼리를 만드는 회사를 찾고, 그 회사의 공장이 어디에 있는지를 출력해야 한다고 가정합시다. SELECT maker FROM tCar WHERE car = '티볼리'; SELECT factory FROM tMaker WHERE maker = '쌍용'; 위의 두 쿼리를 하나로 합치면 서브쿼리가 됩니다. 동시에 조인으로도 풀어보겠습니다. /* 서브쿼리 */ SELECT factory FROM tMaker WHERE maker = (SELECT maker FROM tCar WHER..
안녕하세요, 끙정입니다. 오늘은 DBMS의 꽃, 조인에 대해서 알아보려고 합니다. JOIN 또한 서브 쿼리와 같이 많은 연구와 학습이 필요합니다. 출발해보도록 하겠습니다. 1. 조인의 정의 DB에 대해서 배우신 분이라면 정규화를 알고 계실 겁니다. 정규화는 엔터티 별로 테이블을 잘게 쪼개 중복을 방지하고 논리적인 구조를 만듭니다. 정규화를 통해 테이블을 여기저기로 찢다 보니 몇몇의 정보를 한 번에 보고 싶을 때 두 개 이상의 테이블을 연속적으로 조회하는 경우가 많아집니다. 서브 쿼리도 좋은 방법이지만 더 일반적인 해결책은 바로 조인입니다. 위의 두 테이블은 maker라는 필드를 각각 외래 키로 가지고 있습니다. 소나타의 제조사의 공장이 있는 지역을 알고 싶다면, 조인을 통해 두 테이블의 정보를 조합해서 ..
안녕하세요, 끙정입니다. 오늘은 서브 쿼리의 마지막 편인 테이블 병합입니다. 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 절의 ..
- Total
- Today
- Yesterday
- Amazon
- condenast
- ChatGPT
- sql
- Intel
- aichip
- searchgpt
- sb1047
- apple intelligence
- Apple
- genai
- SSI
- perplexity
- IDC
- datacenter
- 액침냉각
- OpenAI
- Samsung
- galaxyai
- Nvidia
- Meta
- ai pc
- aitv
- alexa
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |