DB/SQL

    [DB/SQL] UPPER/LOWER 대소문자 구문 없이 LIKE 사용하기

    SQL 문제를 풀다보면 '대소문는 구분하지 않습니다.' 라고 적혀있는 경우가 있습니다. 오늘은 대소문자 구분없이 LIKE를 사용하는 방법을 알아 보겠습니다. UPPER() UPPER()를 사용하면 해당 문자열을 모두 대문자로 변환합니다. UPPER([문자열]) 대소문자 구분 없이 이름에 'se'가 들어가는 데이터를 찾는다고 했을 때, UPPER()를 사용하는 방법은 다음과 같습니다. SELECT * FROM USER_NAMES WHERE UPPER(NAME) like UPPER('%se%') LOWER() LOWER()를 사용하면 해당 문자열을 모두 소문자로 변환합니다. LOWER([문자열]) 대소문자 구분 없이 이름에 'Se'가 들어가는 데이터를 찾는다고 했을 때, LOWER()를 사용하는 방법은 다음..

    [프로그래머스/SQL] 12세 이하인 여자 환자 목록 출력하기

    문제 설명 다음은 종합병원에 등록된 환자정보를 담은 PATIENT 테이블입니다. PATIENT 테이블은 다음과 같으며 PT_NO, PT_NAME, GEND_CD, AGE, TLNO는 각각 환자번호, 환자이름, 성별코드, 나이, 전화번호를 의미합니다. 문제 PATIENT 테이블에서 12세 이하인 여자환자의 환자이름, 환자번호, 성별코드, 나이, 전화번호를 조회하는 SQL문을 작성해주세요. 이때 전화번호가 없는 경우, 'NONE'으로 출력시켜 주시고 결과는 나이를 기준으로 내림차순 정렬하고, 나이 같다면 환자이름을 기준으로 오름차순 정렬해주세요. 내 풀이 WHERE와 AND절로 12세 이하의 여자 환자 데이터를 필터링하고, 전화번호가 NULL인 경우 NONE을 출력하기 위해 CASE문을 사용했다. SELEC..

    [프로그래머스/SQL] 과일로 만든 아이스크림 고르기

    문제 설명 다음은 아이스크림 가게의 상반기 주문 정보를 담은 FIRST_HALF 테이블과 아이스크림 성분에 대한 정보를 담은 ICECREAM_INFO 테이블입니다. FIRST_HALF 테이블 구조는 다음과 같으며, SHIPMENT_ID, FLAVOR, TOTAL_ORDER 는 각각 아이스크림 공장에서 아이스크림 가게까지의 출하 번호, 아이스크림 맛, 상반기 아이스크림 총주문량을 나타냅니다. FIRST_HALF 테이블의 기본 키는 FLAVOR입니다. ICECREAM_INFO 테이블 구조는 다음과 같으며, FLAVOR, INGREDITENT_TYPE 은 각각 아이스크림 맛, 아이스크림의 성분 타입을 나타냅니다. INGREDIENT_TYPE에는 아이스크림의 주 성분이 설탕이면 sugar_based라고 입력되고..

    [프로그래머스/SQL] 서울에 위치한 식당 목록 출력하기

    문제 설명 다음은 식당의 정보를 담은 REST_INFO 테이블과 식당의 리뷰 정보를 담은 REST_REVIEW 테이블입니다. REST_INFO 테이블은 다음과 같으며 REST_ID, REST_NAME, FOOD_TYPE, VIEWS, FAVORITES, PARKING_LOT, ADDRESS, TEL은 식당 ID, 식당 이름, 음식 종류, 조회수, 즐겨찾기수, 주차장 유무, 주소, 전화번호를 의미합니다. REST_REVIEW 테이블은 다음과 같으며 REVIEW_ID, REST_ID, MEMBER_ID, REVIEW_SCORE, REVIEW_TEXT,REVIEW_DATE는 각각 리뷰 ID, 식당 ID, 회원 ID, 점수, 리뷰 텍스트, 리뷰 작성일을 의미합니다. 문제 REST_INFO와 REST_REVIEW..

    [DB/SQL] CASE, WHEN, THEN, ELSE 사용하기

    Case, When, Then, Else 는 다음과 같이 사용할 수 있습니다. case when [조건식] then [반환값] else [일치하는 조건이 없는 경우 반환값] end 예시를 살펴보겠습니다. 유저의 point가 10000점 이상, 5000점 이상 10000미만, 5000점 미만인 경우로 나누어서, 새 필드에 값을 넣어주겠습니다. select pu.user_id, pu.point, (case when pu.point >= 10000 then '1만 이상' when pu.point >= 5000 then '5천 이상' else '5천 미만' end) as lv from point_users pu 위처럼 비교 연산자를 사용하여 조건을 걸어줄 수 도 있고, NULL 연산자나 산술 연산자를 사용해 여..

    [SQL] SUBSTRING_INDEX, SUBSTRING 문자열 데이터 다루기

    SUBSTRING_INDEX SUBSTRING_INDEX의 사용 방법은 다음과 같습니다. STRING_INDEX([문자열],[구분자],[구분자 인덱스]) 예제를 살펴보겠습니다. 예제1 이메일은 id@domain 과 같은 형태로, @을 기준으로 앞은 id, 뒤는 domain이 됩니다. SUBSTRING_INDEX를 사용해서 id와 도메인을 얻어보겠습니다. select SUBSTRING_INDEX('vvegcs@gmail.com', '@', 1) > vvegcs select SUBSTRING_INDEX('vvegcs@gmail.com', '@', -1) > gmail.com 예제2 select SUBSTRING_INDEX('가/나/다/라', '/', 3) >> 가/나/다 select SUBSTRING_IND..

    [DB/SQL] With절을 사용하여 임시 테이블 생성하기

    다음과 같이 쿼리문이 있을 때, SubQuery가 많아 복잡해보입니다. 여기서 계속 SubQuery가 붙으면 알아보기에도 어려울 것입니다. select c.title, b.cnt_checkins, a.cnt_total, (b.cnt_checkins/a.cnt_total) as ratio from ( select course_id, count(*) as cnt_total from orders group by course_id ) a inner join ( select course_id, count(distinct(user_id)) as cnt_checkins from checkins group by course_id ) b on a.course_id = b.course_id inner join course..