SQL

    [SQL] 프로그래머스 특정 물고기를 잡은 총 수 구하기 - 조인 & 상관중첩질의

    프로그래머스 Lv1 다음 문제를 풀어보자. FISH_INFO와 그리고 FISH_NAME_INFO 두 개의 테이블이 존재하고, join을 활용하면 쉽게 풀리는 문제이다. 하지만 단순하게 하나의 SQL 방법에 의존하게 되면, 향후 복잡한 쿼리를 사용할 때 제한적인 생각에 갇힐 수도 있다. 따라서 상관 중첩 질의를 이용해서도 풀이를 작성해놨다. (상관 중첩 질의 내용 포스팅은 여기로) Join 문을 이용한 코드 SELECT count(*) AS FISH_COUNT FROM fish_info as f INNER JOIN fish_name_info as n ON f.fish_type = n.fish_type WHERE n.fish_name in ('BASS', 'SNAPPER') ; 위 코드는 단순하게 전체 결과..

    [SQL] 중첩 질의 - 상관 중첩 질의와 존재 연산자 EXISTS (3)

    상관 중첩 질의 (Correlated Nested Query) 중첩 질의에서 하위 질의의 WHERE 절에 있는 레코드 검색 조건에 주질의에서 선언된 테이블의 컬럼을 참조하는 경우 상관 중첩 질의라고 함! 아래 예제를 통해 이해해보겠습니다. 사원 테이블: EMPLOYEE(Fname, Minit, Lname, SSN, Bdate, Address, Sex, Salary, Super_ssn, Dno) 부양 가족 테이블: DEPENDENT(Essn, Dependent_name, Sex, Bdate, Relationship) 아래 쿼리는 부양 가족 (dependent)과 성별이 같은 근로자의 ssn을 조회하는 쿼리입니다. 단일 질의는 join문을 활용하여 조회했습니다. -- 단일 질의 SELECT ssn FROM ..

    [SQL] 검색 - 목록 검색 연산자와 중첩 질의 Nested Query (2)

    SQL에서 목록 검색 연산자라고 하면 IN과 NOT IN이 있다. IN 연산자는 일반적으로 주 질의의 WHERE 절에서 하나의 컬럼 값이 하위 질의가 반환한 결과 목록에 포함되는지 확인을 하는 역할을 한다. 지난 첫번째 중첩질의 포스팅에서도 다뤘지만, 하위 질의는 테이블(뷰) 형태를 반환할 수 있기 때문에 두개 이상의 값을 취할 수 있다. 주 질의는 WHERE 절의 컬럼 값이 하위 질의의 결과 목록에 포함되면 True를 반환한다고 이해하면 된다. 예시를 들어보자. 다음과 같은 3개의 테이블(emplyee, department, dependent) 이 존재한다고 가정해보자. 예제 1) 관리자인 사원의 정보를 검색 중첩질의를 활용해 이 문제를 해결해보자면 다음과 같이 SQL을 만들어서 원하는 답을 구할 수..

    [SQL] 검색 - 비교 연산자와 중첩 질의 Nested Query (1)

    어느 정도 데이터베이스 입문을 끝냈을 때 (ER 모델, RDB와 논리적 설계, 관계대수와 관계해석 파트까지), 드디어 실무에서 가장 많이 쓰일 수 있다고 생각되는 SQL 내용이 등장하기 시작한다. 많은 SQL 영역 중에서도 검색 분야의 중첩 질의에 대해 다뤄보고자 한다. 중첩 질의 중첩 질의는 다음과 같은 의미로 사용된다. SELECT문 (주 질의)의 WHERE 절 내에 새로운 SELECT문 (하위 질의)를 포함하는 질의 하위 질의는 주 질의의 WHERE절에서 레코드 검색 조건과 함께 사용된다. 간단하게 예를 살펴보자 예) 'Research' 부서의 사원 수 검색 이때 부서의 사원수를 검색하기 위해서 where 절에 하위 질의로 또다른 SELECT문이 등장하여 조건을 충족시켰다. 물론 join으로도 ..

    [SQL] 조건에 부합하는 중고거래 댓글 조회 (프로그래머스)

    프로그래머스 SQL LV1 문제중 가장 질문 게시판이 핫한 문제중 하나를 들고 와봤다. 이 문제는 두 테이블 (게시판 & 댓글)을 활용하여 쿼리를 작성하는 전형적인 join 과 관련된 문제이다. 이 문제는 DATE 형태만 제대로 작성하면 문제없이 원하는 결과물을 만들 수 있다. 올바른 DATE 포맷 사용하기 -> DATE_FORMAT() 함수 활용 SELECT b.TITLE, b.BOARD_ID, r.REPLY_ID, r.WRITER_ID, r.CONTENTS, DATE_FORMAT(r.CREATED_DATE, '%Y-%m-%d') AS CREATED_DATE FROM USED_GOODS_BOARD b INNER JOIN USED_GOODS_REPLY r ON b.BOARD_ID = r.BOARD_ID ..

    [sql] 클러스터형 인덱스와 보조 인덱스 특징

    클러스터형 인덱스 특징 (Clustered Index) 클러스터형 인덱스 생성 시에는 데이터 페이지 전체가 재정렬됨. 따라서 이미 대용량 데이터가 입력된 상태라면 업무시간에 클러스터형 인덱스를 생성하는 것은 심각한 시스템 부하를 줄 수 있음. 클러스터형 인덱스는 인덱스 자체의 리프 페이지가 곧 데이터임. 그러므로, 인덱스 자체에 데이터가 포함되어 있다고 할 수 있음 클러스터형 인덱스는 보조 인덱스보다 검색 속도는 더 빠르다. 하지만 데이터 입력/수정/삭제는 더 느림 클러스터 인덱스는 성능이 좋지만 테이블에 한 개만 생성할 수 있음. 따라서, 어느 열에 클러스터형 인덱스를 생성하는지에 따라서 시스템의 성능이 달라질 수 있음 보조 인덱스 (Secondary Index) 보조 인덱스 생성 시, 데이터 페이지는..

    [SQL] 뷰(VIEW)란 무엇인가?

    SqlD나 데이터베이스를 공부하다 보면 뷰(view)에 대해 다룬 내용을 마주할 때가 있으리라 생각됩니다. 대부분 뷰가 그냥 SELECT문을 날려서 보여주는 테이블 정도로만 이해하하고 넘어가시는 분도 계시지만 조금 구체적으로(?) 뷰와 뷰의 특징은 어떻게 되는지 한번 알아보겠습니다. 우선 뷰는 한 번 생성해 놓으면 테이블이라고 생각해도 될 정도로 테이블과 거의 동일한 개체로 여겨집니다. 그렇기 때문에 사용자가 SELECT 문을 통해 쿼리를 실행하면, 그것에 대한 결과값으로 보여지는 테이블이 뷰 테이블이라고 할 수 있습니다. 그럼 일반 테이블이랑 뭐가 다른 것이냐? '읽기 전용'으로 많이 사용되는 것이 다르다고 할 수 있습니다. 하지만 뷰를 통해 원 테이블의 데이터를 수정할 수도 있습니다. 이 부분에 대해..