mysql
[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 ..