programmers SQL : String, Date

SOOYEON·2022년 2월 7일
0

SQL

목록 보기
4/54

루시와 엘라 찾기

동물 보호소에 들어온 동물 중 이름이 Lucy, Ella, Pickle, Rogan, Sabrina, Mitty인 동물의 아이디와 이름, 성별 및 중성화 여부를 조회하는 SQL 문을 작성해주세요.

IN

SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE NAME IN ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty')
ORDER BY 1 ASC;

CONCAT

SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE 'Lucy, Ella, Pickle, Rogan, Sabrina, Mitty' LIKE CONCAT('%', NAME, '%')
ORDER BY ANIMAL_ID;

컬럼에 특정 문자열이 있는지 검색할 때

컬럼명 LIKE CONCAT('%', '검색할 문자열', '%')



이름에 el이 들어가는 동물 찾기

보호소에 돌아가신 할머니가 기르던 개를 찾는 사람이 찾아왔습니다.
이 사람이 말하길 할머니가 기르던 개는 이름에 'el' 이 들어간다고 합니다.
동물 보호소에 들어온 동물 이름 중, 이름에 "EL"이 들어가는 개의 아이디와 이름을 조회하는 SQL문을 작성해주세요.
이때 결과는 이름 순으로 조회해주세요. 단, 이름의 대소문자는 구분하지 않습니다.

LIKE

SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE NAME LIKE '%el%' AND ANIMAL_TYPE = 'Dog'
ORDER BY NAME ;

REGEXP_LIKE

SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE REGEXP_LIKE(NAME, 'el', 'i') AND ANIMAL_TYPE = 'Dog'
ORDER BY NAME ;

UPPER

SELECT ANIMAL_ID, NAME 
FROM ANIMAL_INS
WHERE ANIMAL_TYPE = 'Dog'
AND UPPER(NAME) LIKE UPPER('%el%')
ORDER BY NAME



DATETIME에서 DATE로 형 변환

ANIMAL_INS 테이블에 등록된 모든 레코드에 대해, 각 동물의 아이디와 이름, 들어온 날짜(시각(시-분-초)을 제외한 날짜(년-월-일)만)를 조회하는 SQL문을 작성해주세요. 이때 결과는 아이디 순으로 조회해야 합니다.

DATE_FORMAT

SELECT ANIMAL_ID, NAME, DATE_FORMAT(DATETIME, '%Y-%m-%d')
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

(DATETIME, '%Y-%M-%D') # 대문자

SUBSTRING

SELECT
    ANIMAL_ID,
    NAME,
    SUBSTRING(DATETIME,1,10)
FROM ANIMAL_INS
ORDER BY 1;

LEFT

SELECT ANIMAL_ID, NAME, LEFT(DATETIME, 10)
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;



중성화 여부 파악하기

보호소의 동물이 중성화되었는지 아닌지 파악하려 합니다. 중성화된 동물은 SEX_UPON_INTAKE 컬럼에 'Neutered' 또는 'Spayed'라는 단어가 들어있습니다.
동물의 아이디와 이름, 중성화 여부아이디 순 으로 조회하는 SQL문을 작성해주세요.
이때 중성화가 되어있다면 'O', 아니라면 'X' 라고 표시해주세요.

CASE

SELECT ANIMAL_ID, NAME, 
CASE WHEN SEX_UPON_INTAKE NOT LIKE 'Intact%' THEN 'O'
     ELSE 'X'
END '중성화'
FROM ANIMAL_INS;

IF

SELECT ANIMAL_Id,NAME,IF(SEX_UPON_INTAKE IN('Neutered Male','Spayed Male','Neutered Female','Spayed Female'),'O','X') 중성화 
FROM ANIMAL_INS

INSTR

SELECT
    ANIMAL_ID, NAME, IF(INSTR(SEX_UPON_INTAKE, 'Intact') > 0, 'X', 'O') AS 중성화
FROM ANIMAL_INS
ORDER BY ANIMAL_ID ASC;

REGEXP

SELECT  ANIMAL_ID,
        NAME,
        IF(SEX_UPON_INTAKE REGEXP 'Neutered|Spayed', 'O' , 'X') AS 중성화
FROM    ANIMAL_INS

REGEXP_REPLACE

SELECT 
    ANIMAL_ID,
    NAME,
    REGEXP_REPLACE
        (REGEXP_REPLACE
            (SEX_UPON_INTAKE, 
             'Neutered Male|Spayed Female',
             'O'
            ), 
         'Intact Male|Intact Female',
         'X'
        ) AS 중성화
FROM 
    ANIMAL_INS 
ORDER BY 
    ANIMAL_ID ASC;

오랜 기간 보호한 동물(2)

입양을 간 동물 중, 보호 기간이 가장 길었던 동물 두 마리의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 기간이 긴 순으로 조회해야 합니다.

ORDER BY

SELECT O.ANIMAL_ID, O.NAME
FROM ANIMAL_INS I JOIN ANIMAL_OUTS O 
USING(ANIMAL_ID)
ORDER BY O.DATETIME - I.DATETIME DESC
LIMIT 2; 
  1. ORDER BY O.DATETIME - I.DATETIME DESC
  2. ORDER BY DATEDIFF(O.DATETIME, I.DATETIME) DESC

JOIN

SELECT AO.ANIMAL_ID, AO.NAME
FROM ANIMAL_OUTS AS AO
INNER JOIN ANIMAL_INS AS AI
ON AO.ANIMAL_ID = AI.ANIMAL_ID
ORDER BY AO.DATETIME - AI.DATETIME DESC
LIMIT 2;

SUBQUERY

SELECT C.ANIMAL_ID, C.NAME
FROM (SELECT O.ANIMAL_ID, O.NAME, DATEDIFF(O.DATETIME, I.DATETIME) AS DURATION
      FROM ANIMAL_INS I INNER JOIN ANIMAL_OUTS O USING(ANIMAL_ID)
      ORDER BY DURATION DESC
      LIMIT 2) C

0개의 댓글