MySQL 정리

이준수·2022년 1월 3일
1

--추가예정--

조건문


If Else 조건문

형식: IF ( Condition, Statements for True, Statements for False )

SELECT ANIMAL_TYPE, IF (NAME IS NULL, "No name", NAME) AS NAME, SEX_UPON_INTAKE 
FROM ANIMAL_INS 
ORDER BY ANIMAL_ID ASC;
  • ANIMAL_INS라는 Table에 존재하는 ANIMAL_NAME Colum이 만약 NULL 값을 경우에는
    “No name”으로 출력을 하고 아닐 경우에는 ANIMAL_NAME 값을 출력하도록 하는 코드
  • 기본적으로 조건문은 SELECT 절에서만 사용가능하다.

Case When 조건문

형식: CASE WHEN 조건1 THEN 값1 WHEN 조건2 THEN 값2 ELSE 값3 END

SELECT ANIMAL_TYPE, 
	CASE 
		WHEN NAME IS NULL THEN "No name" 
		WHEN NAME IS NOT NULL THEN NAME 
		ELSE "ERROR" 
	END AS NAME,
SEX_UPON_INTAKE
FROM ANIMAL_INS
ORDER BY ANIMAL_ID ASC;

IFNULL 조건문

형식: IFNULL(값1, 값2)

SELECT ANIMAL_TYPE, IFNULL(NAME,'No name') AS NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
ORDER BY ANIMAL_ID ASC;
  • 값1에 해당하는 Column이 NULL 값일 경우에는 값2가 출력되고 NULL이 아닐 경우에는 해당 Column의 값인 값1이 출력된다.

⭐JOIN


Overview

Left Join (Same with Right Join)

SELECT * FROM TABLE1 LEFT JOIN TABLE2 ON TABLE1.KEY = TABLE2.KEY;
  • 두 테이블 Table1과 Table2를 같은 KEY값을 가진 원소끼리 LEFT JOIN을 할 경우,
    A값의 전체와, A의 KEY 값과 B KEY 값이 같은 결과를 리턴하게 된다.
  • 만약 두 KEY값이 일치하는 Row의 경우에는 합쳐지며 새로운 Row를 생성하게되고, 같지 않은 Row의 경우에는 해당 Column은 NULL인 상태로 합쳐지게 된다.
SELECT * FROM TABLE1 LEFT JOIN TABLE2 ON TABLE1.KEY = TABLE2.KEY;
WHERE TABLE2.KEY IS NULL;
  • Left Join의 결과값에서 B의 Key가 NULL인 부분을 반환하게 된다.
  • 즉, A Table의 Row의 KEY가 B Table에는 없는 경우의 값들을 반환.

Inner Join

  • MySQL의 기본적인 Join으로 두 테이블의 Key가 같은 부분만을 반환한다.
SELECT * FROM TABLE1 JOIN TABLE2 ON TABLE1.KEY = TABLE2.KEY;
OR
SELECT * FROM TABLE1 INNER JOIN TABLE2 ON TABLE1.KEY = TABLE2.KEY;

Full Outer Join

  • MySQL에는 Full Outer Join 문법이 없기 때문에 직접 집합으로 구해야한다.
    Left Join과 Right Join을 사용해서 쉽게 구현가능하다.
SELECT * FROM Table1 LEFT JOIN Table2 ON Table1.KEY = Table2.KEY
UNION
SELECT * FROM Table1 RIGHT JOIN Table2 on Table1.KEY = Table2.KEY
ORDER BY id asc;

Natural Join

  • NATURAL JOIN은 두 테이블에 칼럼명이 같은 것을 기준으로 INNER JOIN을 한다.
    그렇기 때문에 JOIN 뒤에 ON을 생략할 수 있다.
SELECT * FROM TABLE1 NATURAL JOIN TABLE2

N개만 출력


LIMIT

  • 마지막에 LIMIT N(Numeric number)을 사용하면 앞에서부터 N개만 뽑아올 수 있다.
  • ORDER BY ASC/DESC와 함께 사용하면 정렬된 순서에서 상위 N개. 하위 N개만 추출 가능
SELECT A.NAME, A.DATETIME
FROM ANIMAL_INS AS A LEFT JOIN ANIMAL_OUTS AS B ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE B.ANIMAL_ID IS NULL
ORDER BY A.DATETIME
LIMIT 3

String


특정 이름 찾기

  • DB에 특정 이름을 가진 동물을 찾고 싶은 경우에는 OR를 사용하여 단순히 이름을 나열하는 방법도 있지만, IN을 사용하면 조금 더 간결하고 쉽게 찾을 수 있다.
SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE NAME IN ("Lucy","Ella","Pickle","Rogan","Sabrina","Mitty");
  • NAME에 괄호 안의 String들이 포함되어 있을 경우에만 값을 반환하게 된다.

특정 문자 찾기

  • 앞의 경우에는 특정 이름을 선언하여 정확하게 일치하는 경우에만 반환을 했다면, 이번에는 LIKE%를 사용하여 이름 중에도 특정 String이나 문자가 포함되어 있는 경우를 검색할 수 있다.
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE ANIMAL_TYPE = "Dog" AND NAME LIKE "%EL%"
ORDER BY NAME;
  • 위 Query는 ANIMAL_INS Table에서 타입이 강아지이면서 이름에 “EL”이라는 특정 문자열이 들어가는 경우에만 값을 반환하게 된다.
  • %는 앞뒤로 다른 문자가 존재한다는 것을 의미한다. 해당 기호를 사용하여 접두사나 접미어등을 쉽게 찾을 수도 있다.

Datetime


  • Datetime Type은 날짜와 시간을 저장하는 Type의 Column으로 YEAR(), MONTH(), DAY(), HOUR(), MINUTE(), SECOND() 함수를 사용하여 원하는 값만 뽑아올 수도 있다.

DATE_FORMAT()

  • 위의 함수들은 각각의 값만 뽑아올 수 있었다면 원하는 FORMAT을 지정하여 새로운 DATE TYPE형식 또는 TIME TYPE 형식으로 반환해올 수도 있다.
SELECT ANIMAL_ID, NAME, DATE_FORMAT(DATETIME, "%Y-%m-%d") AS 날짜
FROM ANIMAL_INS
  • YY-MM-DD형식으로 날짜를 반환해오는 Query로 Specifier에 따라서 다양한 값을 반환해올 수 있다. 자세한 Specifier는 링크를 통해 확인할 수 있다.
profile
Beginner_of_AI_Engineer

0개의 댓글