Data Analysis/SQL

Data Analysis/SQL

[MySQL] REGEXP 정규표현식 정리

정규표현식에서 사용되는 기호를 Meta문자라고 표현한다. 표현식 의미 ^x 문자열의 시작 표현. x문자로 시작됨 x$ 문자열의 종료 표현. x문자로 종료됨 .x 임의의 한 문자의 자리수를 표현. 문자열이 x로 끝남 x+ 반복 표현. x문자가 한 번 이상 반복됨 x? 존재 여부 표현. x문자가 존재할 수도, 존재하지 않을 수도 있음을 의미 x* 반복 여부 표현. x 문자가 0번 또는 그 이상 반복됨을 의미 x|y or 표현. x 또는 y문자가 존재함 (x) 그룹 표현. x를 그룹으로 처리함 (x)(y) 그룹들의 집합을 표현. 앞에서부터 순서대로 번호를 부여하여 관리하고, x, y는 각 그룹의 데이터로 관리 (x)(?:y) 그룹들의 집합에 대한 예외 표현. 그룹 집합을으로 관리되지 않음을 의미 x{n} 반복..

Data Analysis/SQL

[MySQL] JOIN에 따른 ON/WHERE 제약 조건 구분하기

(INNER)JOIN에 따른 ON/WHERE 절 제약 조건 ON절은 WHERE절보다 순서 상 실행 속도가 더 빠르다. FROM → ON → JOIN → WHERE INNER JOIN을 사용하는 경우, ON이든 WHERE든 어디에 조건을 주든 상관이 없다. 즉, 아래의 세 쿼리는 서은ㅇ에 약간의 차이는 있을 수 있지만 결과물에 차이를 보이지는 않는다. -- 첫 번째 쿼리 SELECT D.deptno, D.dname, E.ename, E.sal FROM dept D, emp E WHERE D.deptno = E.deptno AND E.sal > 2000; -- 두 번째 쿼리 SELECT D.deptno, D.dname, E.ename, E.sal FROM dept D INNER JOIN emp E ON D...

Data Analysis/SQL

[MySQL] IFNULL vs. NULLIF

IFNULL IFNULL(a, b) : a = NULL → b 리턴 a NULL → a 리턴 NULLIF NULLIF(a, b) : a = b → NULL 리턴 a b → a 리턴 CASE WHEN a = b THEN NULL ELSE a END : NULLIF와 동일한 기능을 한다.

Data Analysis/SQL

[MySQL] 인덱스(INDEX) 정리

인덱스란? DB에서 데이터 조회 시, 결과를 빠르게 추출하도록 도와주는 하나의 'DB개체'다. (마치 사전의 '찾아보기'와 같은 역할) 인덱스에 따른 결과 값에 차이는 없고, 단지 조회 성능 개선 용도로 사용된다. 실무에서는 현실적으로 인덱스 없이 DB운영 불가. 하지만 인덱스가 무조건 있다고 해서 좋은 것은 아님. → 추가적인 DB 공간 필요 → 데이터 변경 작업 시, 오히려 성능 저하 불러일으킬 수 있다 ⇒ 꼭 필요한 칼럼에 인덱스 생성! 장점 적절한 인덱스 생성하고, 사용하면 조회 성능을 획기적으로 개선할 수 있음 = 검색 속도 향상 & 시스템 성능 향상 단점 1. 인덱스는 대략 테이블 크기의 10% 공간이 추가로 필요(인덱스 페이지 때문) 2. SELECT가 아닌 데이터의 변경 작업(INSERT,..

Data Analysis/SQL

[MySQL] LIMIT 작동원리

LIMIT 작동원리 SELECT * FROM employeesIGNORE INDEX(employees_ix02) WHERE hire_date BETWEEN '1986-05-02' AND '1986-10-31' -- 건수 1092 ORDER BY hire_date DESC LIMIT 10 ; 위 쿼리의 순서는.. 1. employees 테이블에서 WHERE조건에 만족하는 레코드를 전부 읽는다 2. 읽어온 레코드들을 hire_date 내림차순으로 정렬 3. 정렬된 결과에서 상위 10건 채우면 바로 반환 → LIMIT는 WHERE조건이 아니므로 항상 마지막에 수행한다. → 또한 쿼리에서 모든 레코드의 정렬이 완료되지 않았다 하더라도 LIMIT에서 필요한 레코드가 준비되면 바로 쿼리를 종료시킨다. = 상위 10..

Data Analysis/SQL

[MySQL] 다중 컬럼 IN 연산자 설명

보통 IN 연산자 사용 시, '특정 칼럼이 여러개의 값 중 하나' 일때의 조건에 사용한다. 보통의 IN 아래 사원 테이블을 예시로 살펴보자 부서번호가 20, 30인 부서에 속해있는 사원을 조회하는 경우 SELECT * FROM emp WHERE deptno IN (20, 30); IN 대신 OR 사용 가능 SELECT * FROM emp WHERE (deptno = 20) OR (deptno = 30); 두 쿼리의 결과 부서번호가 20이면서 직책이 MANAGER이거나 부서번호가 30이면서 직책이 CLERK인 사원 SELECT * FROM emp WHERE (deptno = 20 AND job = 'MANAGER') OR (deptno = 30 AND job = 'CLERK'); 다중 컬럼 IN 사용 방금..

Data Analysis/SQL

[MySQL] WITH RECURSIVE

Common Table Expression(CTE) WITH구문은 메모리 상 가상의 테이블을 저장할 때 사용된다. RECURSIVE 여부에 따라 재귀, 비재귀 2가지 방법으로 사용 가능하다. WITH [RECURSIVE] TABLE명 AS ( SELECT - # 비반복문. 무조건 필수 [UNION ALL] # RECURSIVE 사용 시 필수. 다음에 이어붙어야 할 때 사용 SELECT - [WHERE -] # RECURSIVE 사용 시 필수. 정지 조건 필요할 때 사용 ) WITH 구문 WITH 구문 이후에 오는 쿼리에서 임시 테이블의 테이블 명을 사용해 값을 참조할 수 있다. WITH CTE AS ( SELECT 0 AS NUM UNION ALL SELECT 0 FROM SOME_TABLE # SOME..

Data Analysis/SQL

[MySQL] JOIN

1-1. LEFT(RIGHT) JOIN 왼(오른)쪽은 무조건 표기, 매치되는 레코드가 오른(왼)쪽에 없으면 NULL 왼(오른)쪽 테이블을 중심으로 오른(왼)쪽의 테이블을 매치 왼(오른)쪽 테이블의 1개 레코드에 여러 개의 오른(왼)쪽 테이블 레코드가 일치할 경우, 해당 왼(오른)쪽 레코드 여러번 표시 SELECT A.id , A.name , A.age , B.school , B.explnation FROM A LEFT JOIN B ON A.id = B.id ORDER BY A.id ASC; A 테이블 기준으로 A의 모든 id가 출력 id = 3인 레코드가 B에 2개 있으므로 모두 출력 id = 4인 레코드가 B에 없지만 A의 레코드는 모두 출력하므로 없는 값을 NULL로 채우고 출력한다 1-2. LEFT..

Data Analysis/SQL

[MySQL] POW 함수 사용법 및 예제

사용법 POW(a, b) = a^b 예제 SELECT POW(2, 4) >> 2^4 = 16 SELECT POW(2, 3) >> 2^3 = 8

Data Analysis/SQL

[MySQL] WINDOW 함수(feat. 순위 함수, 분석 함수)

WINDOW 함수 : 행과 행간을 비교, 연산, 정의하기 위한 함수 WINDOW FUNCTION 기본 문법 SELECT WINDOW_FUNCTION(arguments) OVER ( [PARTITION BY 칼럼] [ORDER BY 칼럼] [WINDOWING 절] ) FROM 테이블명; WINDOW FUNCTION 종류 구분 함수 비교 순위 함수 RANK, DENSE_RANK, ROW_NUMBER 일반 집계 함수 SUM, MAX, MIN, AVG, COUNT SQL서버에서는 OVER절 내 ORDER BY 지원X 그룹 내 행 순서 함수 FIRST_VALUE, LAST_VALUE, LAG, LEAD SQL서버에서는 지원X 그룹 내 비율 함수 RATIO_TO_REPROT, PERCENT_RANK, CUME_DI..

J pathfinder
'Data Analysis/SQL' 카테고리의 글 목록