전체 글 221

디비 스터디 4주차

시진엽 윈도우 함수 조회하는 현재 레코드를 기준으로 연관된 레코드 집합의 연산을 수행함 집계함수 : GROUP BY 그룹, 또는 전체그룹 별로 하나의 레코드로 묶어서 출력 윈도우함수 : 조건에 일치하는 레코드 건수는 변하지 않고, 그대로 유지 쿼리 각 절의 실행 순서 FROM, WHERE, GROUO BY, HAVING 절에 의해 레코드가 결정 → 윈도우함수가 실행 → SELECT, ORDER BY, LIMIT 에 의해 결과를 보여줌 1번은 조건에 일치하는 17건의 데이터를 모두 가져온 다음 윈도우 함수를 실행 그 후5개만 반환(17건의 평균) 2번은 5개의 평균 위도우 함수 기본 사용법 집계함수와는 달리 함수 뒤에 OVER 절을 잉요해 연산 대상을 파티션하기 위한 옵션을 명시 할 수 있음 OVER 절에..

카테고리 없음 2023.06.26

디비스터디 3주차

시진엽 SELECT 절에 사용된 서브쿼리 내부적으로 임시테이블을 만들거나 쿼리를 비효율적으로 실행되지 않도록 만들기 때문에 서브쿼리가 적절히 인덱스를 타게되면 좋은 성능을 보임 SELECT 절에 서브쿼리 사용 시 항상 칼럼과 레코드가 하나인 결과를 반환함 다만, 그 값이 NUll이든 관계없이 레코드가 1건이 존재해야함 1번) NUll값을 사용 / 2번) 1건이 아닌 10건을 가져와서 에러남 / 3번) 컬럼이 2개 이상이라 에러남 SELECT 절의 서브쿼리는 로우 서브쿼리를 사용할 수 없고, 스칼라 서브쿼리만 사용가능함 -스칼라 서브쿼리란, 레코드의 칼럼이 각각 하나이 결과를 만들어난 서브쿼리 -로우 서브쿼리(레코드 서브쿼리)란, 레코드 건수가 많거나 칼럼수가 많은 결과를 만들어낸 서브쿼리 조인을 사용할 ..

카테고리 없음 2023.06.21

디비 스터디 2주차

WHERE,GROUP BY, ORDER BY 절 인덱스 사용 인덱스를 사용하려면 칼럼 값을 변환하지않고, 그대로 사용해야함 SELECT * FROM SALAIES WHERE SALARY*10 > 15000; // (X) SELECT * FROM SALAIES WHERE SALARY > 15000/10; // (O) 데이터 비교 시 타입이 같아야함 WHERE 절은 A인덱스, GROUP BY(ORDER BY)는 B인덱스를 사용 할순 없음 WHERE, GROUP BY(ORDER BY) 모두 같은 인덱스 사용 : 가장 좋은 방법 WHERE 절만 인덱스 사용 : 조건에 일치하는 데이터가 많지 않을 때 좋은 방법 ORDER BY만 인덱스 사용 : 많은 양의 데이터를 조회해서 정렬할때 사용하는 방법 (정렬된 데이터를..

카테고리 없음 2023.06.14

디비 스터디 1주차

BETWEEN, IN() SELECT * FROM TCUSTOMERPERSONAL WHERE CUSTNO BETWEEN 3 AND 5 AND NAME = "김"; SELECT * FROM TCUSTOMERPERSONAL WHERE CUSTNO IN (3, 4, 5) AND NAME = "김"; /* 1번은 CUSTNO가 3에서 5인 레코드의 전체 범위를 다 비교하지만, 2번은 (3, "김"), (4, "김"), (5, "김")인 레코드만 비교하기 때문에 성능 차이가 생김 */ ❓ 둘이 왜 다른거죠..? 둘다 3,4,5 먼저 조회 하고 뒤에 조건 검색하니까 비교하는 레코드 수는 같은거 아닌가요..? JSON JSON_PRETTY(doc) 제이슨 형태를 이쁘게 보여줌 (사용은 안해봄 ㅠ) JSON_EXTRA..

카테고리 없음 2023.06.14

인덱스(INDEX)

인덱스란 추가적인 쓰기 작업과 저장공간을 활용하여 데이터베이스 테이블의 검색속도를 향상하기 위한 자료구조 구조 특정 컬럼에 인덱스를 생성하면, 해당 컬럼의 데이터들을 정렬하여 별도의 메모리 공간에 데이터의 물리적 주소와 함께 저장 B+트리 자료구조 : O(log2^N) 성능의 빠른 조회 가능 장점 - WHERE 조건 - 풀스캔(Full Sacn) : 데이터 전체를 모두 돌면서 조회하는 방법 O(n) - 인덱스스캔(Index Scan) : 인덱스 설정한 컬럼은 정렬되어 있기 때문에 조건에 맞는 데이터를 빠르게 찾아낼 수 있음 - ORDER BY 정렬 - 인덱스 설정 시 이미 별도의 메모리에 데이터를 정렬하여 저장하기 때문에 정렬이 되어있음 단점 - 데이터 변경에 취약 - INSERT, UPDATE, DEL..

coding/IT, CS 2023.01.27

SQL - JOIN

JOIN이란 두 테이블의 공통된 정보(key 값)를 기준으로 테이블을 연결해서 한 테이블처럼 보는 것 SELECT * FROM TABLE1 INNER JOIN TABLE2 ON TABLE1.key = TABLE2.key # 기본문 SELECT * FROM orders o INNER JOIN users u ON o.user_id = u.user_id # 오더 테이블과 유저 테이블 조인 쿼리가 실행되는 순서 FROM => JOIN => ON => SELECT 1. FROM에서 기준이 되는 테이블을 가져옴 2. JOIN으로 다른 테이블을 붙임 3. 붙일 때 ON으로 공통된 key가 되는 데이터들을 붙임 4. 공통된 key로 붙여진 값들을 가져옴 # WHERE SELECT * FROM orders o INNER..

카테고리 없음 2023.01.26

트랜잭션

트랜잭션이란 데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위, 한꺼번에 모두 수행되어야 할 일련의 연산들 특징 - 데이터베이스 시스템에서 병행 제어 및 회복 작업 시 처리되는 작업의 논리적 단위 - 사용자가 시스템에 대한 서비스 요구 시 시스템이 응답하기 위한 상태 변환 과정의 작업단위 - 하나의 트랜잭션은 Commit 되거나 Rollback 됨 성질 - 원자성 : 트랜잭션 작업이 모두 반영되거나, 전혀 반영되지 않음 - 일관성 : 트랜잭션 작업 처리 결과가 항상 일관성 있어야 함 - 독립성 : 둘 이상의 트랜잭션 작업 시 서로 다른 트랜잭션 연산에 끼어들 수 없음 - 지속성 : 트랜잭션 작업 성공 시 결과는 영구적으로 반영됨 연산 - Commit : 트랜잭션 작업이 성공적으로 끝난 상태 - ..

카테고리 없음 2023.01.21

SQL - GROUP BY, ORDER BY

- GROUP BY 00별 00의 개수 SELECT 00, COUNT(*) FROM TABLE GROUP BY 00 00별 00의 합계, 평균, 최댓값, 최솟값 SELECR 00, SUM(00) FROM TABLE GROUP BY 00 00별 @@의 개수 SELECT 00, COUNT(@@) FROM TABLE GROUP BY 00 GROUP BY문을 작성하는 쉬운 방법 1. SELECT * FROM TABLE 2. SELECT * FROM TABLE GROUP BY 00 3. SELECT 00, COUNT(*) FROM TABLE GROUP BY 00 1. 기본문을 작성(조건문 넣어줘도 됨) 2. 00별로 묶는 것을 확인하고 GROUP BY를 작성 그룹으로 묶었는데 *를 쓰면 00으로 묶었을 때의 똑같..

카테고리 없음 2023.01.08

SQL - 쿼리문 CRUD 명령어

SQL 쿼리문 CRUD 명령어 DB구조 DATABASE(DB) > TABLE > COLUMN > DATA - SELECT 조회 가장 기본 구문 SELECT * FROM TABLE WHERE COLUMN = ? DB가 다른 테이블에서 조회 SELECT * FROM DB.TABLE WHERE COLUMN = ? 특정 칼럼만 조회(조건 x) SELEECT COLUMN1, COLUMN2 FROM TABLE 칼럼1에 대한 중복을 제거한 데이터 조회 SELECT DISTINCT COLUMN1 FROM TABLE 칼럼1을 별칭으로 출력 SELECT COLUMN1 AS WORD FROM TABLE 칼럼1에 1.1을 곱한 값(10%의 값)을 조회 - 표현식 SELECT COLUMN1*0.1 FROM TABLE Ex) E..

coding/IT, CS 2022.12.31

재귀함수 recursion Function

재귀 함수 함수가 직접 또는 간접적으로 자신을 호출하는 함수 필수 조건 재귀 함수는 끝나는 지점(종단점)을 설정해주어야 하고, 매번 다른 인풋 값이 들어갈 수 있도록 해야 함 주의할 점 종단점 미설정(무한 루프에 빠짐) 잘못된 값을 반환, 반환을 하지 않음(같은 인풋 값이 들어가서 무한루프에 빠짐) // n부터 카운트다운 하는 함수 function consoleN(n) { if (n === 0) { // 끝내는 조건 console.log("done!"); return; } console.log(n); n--; // 매번 다른 인풋값 consoleN(n); // 자기자신 다시 호출 } consoleN(3); /* 3 2 1 done! */ // n까지 숫자의 합 function sumN(n) { if (n..

coding/JS 2022.12.20