본문 바로가기

SQL7

[SQLD] 인덱스 인덱스(Index) 인덱스는 관계형 데이터베이스에 검색 속도를 높이기 위해 컬럼을 색인화하는 것을 말한다. 테이블에 있는 모든 데이터를 돌아보며 원하는 데이터를 가져 오기엔(Full Table Scan) 시간이 오래 걸리기 때문에 컬럼의 값과 레코드에 있는 주소를 키와 값으로 묶어 인덱스를 만드는 것이다. 예를 들어, 저장된 데이터의 양이 정말 많은 경우 검색을 할 땐 시간과 자원이 많이 소모 될것이다. 그래서 자주 조회되는 컬럼에 대해 인덱스 테이블을 만들어 `SELECT`문을 사용해 Index 테이블에 있는 값들로 결과를 조회한다. 그러면 이전 보다 성능을 더 올릴 수 있을 것이다. `EXPLAINS`를 통해 쿼리 접근한 행수(rows)를 비교해보면 인덱스를 사용했을 때 좀 더 빠르게 접근했다는 것을.. 2024. 3. 11.
[SQLD] 정규화의 필요성 정규화는 왜 생겨났을까? 한 릴레이션에 두 개 이상의 속성(Attribute)가 혼합하게 되면 중복 저장으로 인해 공간을 낭비하게 된다. 좋은 관계형 데이터베이스를 설계하기 위해 이상 현상(Anomaly)이 생기지 않게 설계를 해야하는데 이 이상 현상이 테이블 내에 중복성으로 인해 생기는 데이터 불일치 현상이다. 이상 현상에는 삽입 이상, 삭제 이상, 갱신 이상이 존재한다. 삽입 이상 : 테이블에 원치 않는 자료가 삽입된다는지, 자료가 부족해 삽입이 되지 않을 때 발생하는 문제점이다. 삭제 이상 : 테이블에 자료를 삭제하고 싶은데 튜플의 전체 열을 삭제해야함으로 원치 않는 정보까지 삭제해야하는 현상이다. 갱신 이상 : 테이블에 어떤 값을 업데이트 했을 때 다른 값들과 불일치가 발생하는 현상이다. 정규화 .. 2024. 3. 2.
[SQLD] JOIN의 개념과 종류 JOIN JOIN은 두 개 이상의 테이블을 연결 혹은 결합하여 데이터를 출력하는 것이다. 일반적으로 PK와 FK의 연관에 의해 성립된다. 없어도 논리적인 값들의 연관으로 성립이 가능하다. 대표적인 조인의 종류로 내부조인, 외부조인, ANSI조인이 있다. ORM에서 FK키를 참조할 때 발생하는 SQL문이다. Oracle 문법에서는 `JOIN`이라는 명령어를 사용하지 않고 WHERE 조건절에서 JOIN을 지정한다. 반면, ANSI 표준 문법은 다른 SQL 프로그램에서도 공통적으로 사용 가능한 문법으로 JOIN 명령어를 사용 가능하다. 내부 조인(INNER) EQUI JOIN(=) 2개의 테이블 간 컬럼이 정확하게 일치하는 경우 사용하는 JOIN이다. SELECT A.USER_NAME, B.DEPT_ID, B.. 2024. 3. 1.
[SQLD] 윈도우 함수 윈도우 함수 윈도우 함수(Window Function)는 행과 행간의 관계를 쉽게 정의 하기 위한 함수라고 한다. 관계를 정의한다는 의미는 행간의 연산이나 비교를 할 수 있다는 얘기이다. 서브쿼리를 여러번 이용하면 만들 수 있지만 윈도우 함수를 통해 쉽게 처리할 수 있게 된 것이다. 윈도우 함수는 주로 분석 함수나 순위 함수, 집계 함수라고도 부르는데 이는 `Group By`와 비슷한 점이 있어서 그런 듯하다. 다만 Groupy by와 차이가 있다면, Group By는 집계된 결과만 보여주지만 윈도우 함수는 행의 수는 그대로 두면서 집계된 행을 추가하는 식이다.(집약의 과정 유무의 차이) 윈도우 함수의 또다른 특징 중첩으로 사용할 수 없으나 서브 쿼리로 사용이 가능하다. `OVER` 문구가 필수로 포함된.. 2024. 1. 27.
[SQL/DB]NoSQL과 SQL는 무슨 차이가 있는 걸까? 프로젝트를 진행하기 전에 어떤 데이터베이스를 선택해야할지도 중요한 요건 중 하나이다. 오늘은 NoSQL과 SQL의 차이를 비교하면서 어떤 경우에 어떤 데이터베이스를 선택하는게 좋은지 알아보려고 한다. 데이터베이스와 DBMS 데이터베이스(DB) : Data를 보관하는 저장소 개념 DBMS : 데이터베이스에 저장된 데이터를 관리(Manage)하거나 데이터 베이스를 생성하기 위한 관리 시스템 일반적인 파일 시스템의 경우 종속성과 중복성의 문제가 있었기 때문에 DBMS를 통해 이러한 문제를 해결할 수 있었다. RDB(SQL) 관계형 데이터베이스는 "관계"라는 단어가 중요한 역할을 하고 있다. 관계형 데이터베이스 엑셀 문서와 비슷하게 하나 이상의 행(Row), 열(Column)이 존재하는 테이블(Table, Re.. 2024. 1. 8.
[SQLD] SQL 코딩테스트에 자주 출제했던 함수들 데이터 가공 문제 날짜-시간 데이터 1. 날짜 형식 변경 먼저 해당 필드명의 형식을 바꾸는 문제이다. 만약 `2023-12-25 00:00:00`의 날짜 형식을 바꾸고 싶으면 `DATE_FORMAT` 함수를 이용해 날짜 형식을 변경할 수 있다. # DATE_FORMAT(필드명, 형식) DATE_FORMAT(CREATED_DATE, "%Y-%m-%d") 2. 날짜 차이 계산 두 날짜 필드간의 차이를 계산하고 싶은 경우 `DATEDIFF(필드명1, 필드명2)`함수로 계산할 수 있다. 여기서 `CASE ~ END` 구문은 프로그래밍 언어에 조건문과 같은 의미이다. 해당 조건이 맞으면(`WHEN`) `THEN`을 반환하고 틀리면 `ELSE`를 반환한다. # 30일을 기준으로 장기대여/단기대여 분류해 RENT_T.. 2024. 1. 7.
[SQLD] SQL 기본 쿼리문 정리 DDL 데이터 구조를 정의하는 명령어로 데이터베이스 객체를 생성하거나 삭제, 변경할 때 사용하는 명령어입니다. DDL 명령어는 시스템이나 클라이언트에 큰 영향을 미칠 수 있기 때문에 신중하게 사용하는 것이 좋습니다. 신중한 작업이니 만큼 데이터베이스 관리자나 설계자가 사용하는 명령어입니다. 데이터베이스 객체 Table, TableSpace, View, index, Procedure, Function 테이블을 생성하는 명령어 `CREATE TABLE '생성할 테이블'` 라는 명령어로 테이블을 생성할 수 있다. `AUTO INCREMENT`를 부여하면 고유 번호를 생성할 수 있다. 객체를 의미할 수 있는 적절한 이름을 사용해야 하며 단수형으로 작성해야 한다. 제약조건으로 기본키를 설정하는 경우 `CONSTR.. 2023. 11. 19.