프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.krSELECT CATEGORY, SUM(SALES) TOTAL_SALESFROM BOOK B JOIN BOOK_SALES BS ON B.BOOK_ID = BS.BOOK_IDWHERE BS.SALES_DATE BETWEEN '2022-01-01' AND '2022-01-31'GROUP BY CATEGORYORDER BY CATEGORY왜 이렇게 풀었을까? 2022년 1월의 카테고리별 도서 판매량을 계산하기 위해 두 테이블을 BOOK_ID를 기준으로 JOIN(INNER JOIN)했습니다.이후 WHERE 절을 이용해 2022년 1월에 해당하는 데이터만 필터링하였고,..
프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.krSELECT ORDER_ID, PRODUCT_ID, DATE_FORMAT(OUT_DATE, '%Y-%m-%d') AS OUT_DATE, CASE WHEN OUT_DATE IS NULL THEN '출고미정' WHEN OUT_DATE 왜 이렇게 풀었을까?CASE 구문을 통해서 OUT_DATE가 NULL인 데이터들은 출고미정으로, OUT_DATE가 22년 5월 1일 전일 경우에는 출고가 완료된 상태로, 이외에는 대기 상태로 지정해주었습니다.또 '%Y-%m-%d' 형식으로 날짜를 출력해주어야했기에 DATE_FORMAT 함수를 이용해서 ..
프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.krSELECT INS.NAME, INS.DATETIMEFROM ANIMAL_INS INS LEFT JOIN ANIMAL_OUTS OUTSON INS.ANIMAL_ID = OUTS.ANIMAL_IDWHERE OUTS.ANIMAL_ID IS NULLORDER BY INS.DATETIME ASCLIMIT 3;왜 이렇게 풀었을까?Left Join을 사용하여 ANIMAL_INS에 있는 동물 중 ANIMAL_OUTS에 없는 데이터를 필터링해냈습니다.또 WHERE 조건에 있는 IS NULL 조건으로 입양되지 않은 동물을 식별할 수 있었습니다.또한 보호 시작일 순..
프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.krSELECT E1.ID, E1.GENOTYPE AS GENOTYPE, E2.GENOTYPE AS PARENT_GENOTYPEFROM ECOLI_DATA E1 JOIN ECOLI_DATA E2 ON E1.PARENT_ID = E2.IDWHERE (E1.GENOTYPE & E2.GENOTYPE) = E2.GENOTYPEORDER BY E1.ID ASC;왜 이렇게 풀었을까?Self Join으로 부모 ID와 자신의 ID가 같은 데이터들을 고른 뒤,비트 연산 중 AND 연산(E1.GENOTYPE & E2.GENOTYPE)의 결과를 부모의 형질과 비교..
이번에는 DML과 TCL에 이어 나머지 명령어인 DDL, DCL에 대해 알아보겠습니다! DDL(Data Definition Language)이란? DDL은 말 그대로 데이터 정의 언어로, 데이터베이스 스키마를 생성, 변경, 삭제하는 데 사용되는 SQL 명령어의 집합입니다. 데이터베이스의 구조를 정의하는 데 필수적인 명령어로, 테이블, 컬럼, 제약조건 등 데이터베이스 객체의 생성 및 관리에 사용됩니다. ✅ CREATECREATE 명령어는 새로운 데이터베이스, 테이블, 인덱스 등의 데이터베이스 객체를 생성하는 데 사용됩니다. 가장 기본적인 사용법은 테이블을 아래와 같이 생성하는 것입니다.CREATE TABLE 테이블명 ( 컬럼명1 데이터타입 [제약조건(DEFAULT / NULL 여부)], 컬럼명2..
이번에는 마지막 챕터인 관리 구문 중 DML, TCL에 대해 알아보겠습니다! DML(Data Manipulation Language)이란?DML은 데이터베이스에서 데이터를 조작하는 데 사용되는 언어로, 데이터를 추가, 업데이트, 삭제하는 등의 작업을 수행합니다. 주로 사용되는 DML 명령어에는 INSERT, UPDATE, DELETE, 그리고 MERGE가 있습니다. INSERT, UPDATE, DELETE의 경우에는 명령어를 실행하고 별도의 COMMIT 명령어를 실행시켜 주어야 데이터가 반영되며 ROLLBACK도 가능합니다. ✅ INSERT INSERT 명령어는 테이블에 새로운 행을 추가하는 데 사용됩니다. 기본 구조는 다음과 같습니다.INSERT INTO 테이블명 (컬럼1, 컬럼2, ...) VALUE..
앞선 글에서 나오지 않은 개념이나 헷갈리는 문제들을 정리하고 'SQL 활용' 챕터를 마무리하고자 합니다. ✅ 비연관 서브쿼리비연관 서브쿼리는 주로 메인쿼리에 값을 제공하기 위한 목적으로 사용됩니다. ✅ 다중 행 서브쿼리다중 행 서브쿼리 비교 연산자는 단일 행 서브쿼리의 비교 연산자로도 사용할 수 있습니다.서브쿼리의 결과가 복수 행 결과를 반환하는 경우에는 IN, ALL, ANY 등의 복수 행 비교 연산자와 사용하여야 합니다.그래서 다중 행 서브쿼리는 일반적으로 = 조건과 함께 쓰일 수 없습니다.그러나, ROWNUM 조건절로 인해 단일 행 서브쿼리로 변환이 된다면 = 조건과 함께 쓰여도 무방합니다. ✅ 뷰(View)실제 데이터를 저장하고 있는 뷰를 생성하는 기능을 지원하는 DBMS도 존재합니다. ✅ 집합 ..
이번에는 Top-N 쿼리, 셀프 조인, 그리고 계층 쿼리에 대해 알아봅시다. Top-N 쿼리란?Top-N 쿼리는 특정 조건에 맞는 상위 N개의 결과를 추출하는 쿼리 기법입니다. ✅ ROWNUM ROWNUM은 Oracle에서 조회된 결과의 행에 순차적으로 번호를 부여하는 가상 컬럼입니다. ROWNUM은 항상 이나 으로 사용해야 합니다.Top-N 쿼리를 작성할 때 주의해야 할 사항은 ORDER BY 절이 WHERE 절보다 나중에 수행되기 때문에 ROWNUM으로 순서를 지정할 때에는 ORDER BY 절 바깥에서 해야 한다는 점입니다. ✅ 윈도우 함수의 순위 함수윈도우 함수를 사용한 Top-N 쿼리는 더 유연하며, 복잡한 조건에 대해 상위 N개의 결과를 추출할 수 있습니다. 특히 ROW_NUMBER, RANK,..