수정중에 있습니다. 참고 바랍니다
ORDER BY FLAVOR DESC
위와같이 컬럼명 뒤 DESC를 붙여 내림차순으로 정렬이 가능하다.MCDP_CD IN ('CS','GS')
와 같이 사용한다면 MCDP_CD값이 CS이거나, GS인 데이터만 조회할 수 있다.WHERE 'Python'=SKILL_1 OR 'Python'=SKILL_2 OR 'Python'=SKILL_3
=> WHERE 'Python' IN (SKILL_1, SKILL_2, SKILL_3)
위와같이 여러 칼럼에 동일한 문자인 'Python'이 있는지 확인해야한다면, 번거롭게 같은 패턴의 코드를 반복해 OR로 묶을 필요 없이 in을 사용하면 된다.A NOT IN (b,c,d)
A가 b,c,d 모두와 같지 않은 경우 true를 반환한다.두 날짜의 차이(day)를 구해주는 함수이다. 아래와 같이 사용
DATEDIFF(END_DATE, START_DATE)
-> END_DATE - START_DATE 값(day)을 반환
만약 일수가 아닌 다른 단위로 DIFF를 구하고싶다면 TIMESTAMPDIFF를 사용하면 된다.
TIMESTAMPDIFF('MONTH',START_DATE,END_DATE)
-> END_DATE - START_DATE 값(month)을 반환
?: 여기서 만약 두 날짜의 차이가 1달 반 이라면? -> 1이 반환된다. 즉 FLOOR로 값이 반환됨
DATEDIFF를 사용할 땐 주의해야할 것이 있다.
만약 렌트카 기록 데이터를 조회하는 상활을 가정해보자. DATEDIFF로 대여 일수를 구하고자 할 때, DATEDIFF만 쓰면 하루를 빌렸어도 0이 나온다. 그렇기에 DATEDIFF 값에 1을 더해줘야 원하는 값을 얻을 수 있다.
DATE_FORMAT(HIRE_YMD,'%Y-%m-%d')
날짜 포맷을 바꿔주는 기능이다.
대문자 | 소문자 |
---|---|
%Y = 2024 | %y = 24 |
%M = January | %m = 01 |
%D = 1st | %d = 01 |
DATE_FORMAT(PUBLISHED_DATE,'%Y')=2021
IFNULL(TLNO,'NONE')
NOT ISNULL(C)
와 같이 사용해 C 컬럼의 값이 NULL 값이 아닌 데이터를 조회하기 위해 사용한다. 혹은 C IS NULL
과 같이 작성할 수도 있다.C IS NOT NULL
과 같이 조건식을 작성할 수도 있다.JOIN B ON A.FLAVOR=B.FLAVOR
와 같이 ON을 사용하는데, 이 경우 연결 컬럼이 FLAVOR로 동일하니 USING(FLAVOR)
와 같이 사용해 코드를 줄일 수 있다.SELECT * FROM A
UNION
SELECT * FROM B
ADDRESS LIKE "%강원도%"
NAME LIKE "김%"
과 같이 사용해 김으로 시작하는 이름을 갖는 데이터만 뽑아볼 수 있다.ADDRESS LIKE "[ABC]"
대괄호를 사용하면 첫번째 문자만 확인할 수 있나보다. 이 경우는 첫번째 문자가 A, B, C 중 하나인지 확인하는 코드다.NAME LIKE "[^김]"
과 같이 ^를 사용하면 김씨가 아닌 이름을 가진 데이터를 모두 뽑을 수 있다.SUBSTRING(STR, 4,3)
와 같이 작성하면, STR이라는 문자열의 4 인덱스부터 3개의 글자를 가져오겠다는 이야기. 참고로 mysql에서 인덱스는 1부터 시작함CAST(~ AS SIGNED)
와 같이 사용한다.LIMIT 1
과 같이 쓰면 조회할 데이터의 갯수를 하나로 제한할 수 있다.AGE BETWEEN 20 AND 29
GROUP BY C1, C2
와 같이 사용한다. 하나의 속성만 사용해도 되고, 두 개 이상도 가능하다. WHERE 다음에 사용한다.WHERE EXISTS(SELECT 1 FROM ~ WHERE ~~)
WHERE EXISTS(서브쿼리)
와 같은 식으로 사용하며, 서브쿼리가 반환하는 값이 있는 데이터를 조회 (???)NOT EXISTS(서브쿼리)
사용SELECT *
FROM FOOD_PRODUCT
WHERE PRICE = MAX(PRICE);
이 코드에서 Invalid use of group function
오류가 나는 걸로 보아 WHERE 절의 컬럼명은 그 컬럼의 하나의 데이터로 인식되나보다
COUNT(컬럼)
과 같이 사용한다. (중복 포함)COUNT(DISTINCT 컬럼)
과 같이 사용하면 중복을 제외하고 세어준다.COUNT(컬럼)
시 NULL 값은 포함되지 않는다. 만약 NULL값을 포함해 테이블의 데이터 갯수를 세고싶다면 COUNT(*)
를 사용하면 된다.4 DIV 2
혹은 FLOOR(4/2)
Replace(content, '%', '')
와 같이 특정 문자를 대체할 수 있다.IF(SUM(~~), '대여중', '대여 가능')
SELECT cnt, COUNT(1) as freq, COUNT(1)/SUM(COUNT(1))*100 OVER() as freq_ratio
FROM order_amount
GROUP BY 1
ORDER BY 2 DESC;
SELECT DISTINCT CAR_ID
와 같이 작성하면 중복되지 않은 car_id 값들을 가져올 수 있다.DATE_FORMAT(PUBLISHED_DATE,'%Y')='2021'
도 되고, DATE_FORMAT(PUBLISHED_DATE,'%Y')=2021
도 되는데 이게 뭘까?a & b = b
)으로 특정 값이 포함되어있는지 아닌지 확인할 수 있다. 즉, a에 b가 더해져있는지 아닌지 확인하려면 위의 & 연산(AND 쓰면 안됨!!)을 진행하면 된다. 참고A & B = B
로 확인할 수도 있지만, 조건으로 쓸 때는 그냥 A & B
만 써도 A에 B 비트가 포함되는지(?) 조건을 걸 수 있다. 근데 이건 한 비트의 중복 여부를 확인할 때만 쓸 수 있겠군.