NULL
IS NULL
SELECT *
FROM 테이블이름
WHERE TITLE IS NULL;
IS NOT NULL
SELECT *
FROM 테이블이름
WHERE TITLE IS NOT NULL;
집계함수
- COUNT : 테이블에 존재하는 데이터 개수( 전체행의 갯수 가져올때는 NULL값도 포함, 특정컬럼의 갯수가져올때는 NULL 값 제외)
- 전체 행 갯수 가져오기 : SELECT COUNT(*) FROM 테이블;
- 컬럼 데이터 갯수 가져오기 : SELECT COUNT(컬럼) FROM 테이블;
- SUM : 테이블에 존재하는 컬럼의 합을 구하고 싶을 때 사용하는 함수.(컬럼의 타입이 숫자인경우에만 사용)
- 컬럼의 합 구하기 : SELECT SUM(컬럼) FROM 테이블;
- AVG : 컬럼의 평균을 구하고 싶을때 사용하는 함수 ( 컬럼의 타입이 숫자형인 경우에만사용, NULL값을 제외하여 계산)
- 컬럼의 평균 구하기 : SELECT AVG(컬럼) FROM 테이블;
- NULL인 경우도 포함하여 평균 구하기 : SELECT SUM(컬럼)/COUNT(*) FROM 테이블;
- MAX/MIN : 컬럼의 최댓값 최소값 구하기(숫자형인 경우에만 사용)
- 컬럼의 최댓값 : SELECT MAX(컬럼) FROM 테이블;
- 컬럼의 최솟값 : SELECT MIN(컬럼) FROM 테이블;
정렬(ORDER BY)
정렬
SELECT *
FROM 테이블
ORDER BY 컬럼1 ASC;
//ORDER BY 컬럼1 DESC; 내림차순
IF
IF(조건, 참일경우 리턴값, 거짓일경우 리턴값)
- SELECT IF(10>5, '크다', '작다') AS result;
어떤 칼럼의 값이 NULL일때 NULL을 N로 출력
SELECT WAREHOUSE_ID, WAREHOUSE_NAME, ADDRESS, IF(FREEZER_YN IS NULL,'N',FREEZER_YN) AS FREEZER_YN
FROM FOOD_WAREHOUSE
WHERE ADDRESS LIKE '경기도%'
order by WAREHOUSE_ID;
널값 처리
- 1. 위의 IF문을 이용해 처리 하는 방법
- 2. COALESCE 함수이용
COALESCE(칼럼1, 칼럼1값이 NULL일때 반환값)
SELECT COALESCE(칼럼1, '공백') FROM member;
결괏값: 칼럼1에 있는 NULL값 대신 '공백'으로 출력
DATE FORMAT
날짜와 시간 데이터 형식변경
- DATE_FORMAT(date, format) -> 주어진 date를 format에 맞춰 문자열로변환
현재 아래처럼 '년도-달-일 00:00:00' 형식이다. 이거를 '년도-달-일'로 바꿔보면
SELECT DATE_FORMAT(hiredate, '%Y-%m-%d') FROM emp;
-- YYYY-mm-dd
SELECT DATE_FORMAT(hiredate, '%Y-%m-%d %T') FROM emp;
SELECT DATE_FORMAT(hiredate, '%Y-%m-%d %H:%i:%s') FROM emp;
-- YYYY-mm-dd 00:00:00
GROUP BY, HAVING
Group by -> 동일한 칼럼의 값으로 데이터를 그룹화 하고 싶을때 사용
- 특정 컬럼을 그룹화 하는 -> Group by
- 특정 컬럼을 그룹화한 결과에 조건을 거는 -> HAVING
WHERE는 그룹화 하기전, HAVING은 그룹화 한 후
ex) 결과테이블에서 해당컬럼이 2번이상 나온 값만 조회
-- 코드를 입력하세요
SELECT USER_ID, PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(*)>1
ORDER BY USER_ID ASC, PRODUCT_ID DESC;
소수점 반올림, 올림
반올림 , ROUND('수치값', '반올림 자릿수')
- SELECT ROUND(123.567, 0) -> 소수점 모두 반올림
- SELECT ROUND(123.567, 1) -> 소수점 첫번째 자리까지 반올림
올림(소수점이하 무조건 올리기) , CEILING('수치값')
- SELECT CELING(123.001) -> 124
소수점이하 무조건 버리기, FLOOR(숫자)
- SELECT FLOOR(21.35) -> 21, SELECT FLOOR(21.9) ->21
숫자버리기. TURNCATE(숫자, 버릴 자릿수)
Limit
- limit을 사용해서 일정 개수만 출력하기
상위 개수 1개만 출력하기.
SELECT DATETIME
FROM ANIMAL_INS
ORDER BY DATETIME ASC
limit 1;
MAX, MIN
- 데이터 최대, 최소값 가져오기
SELECT MAX(컬럼) FROM 테이블;
SELECT MIN(컬럼) FROM 테이블;
날짜차이구하기(DATEDIFF)
- DATEDIFF(날짜1, 날짜2) : 날짜1-날짜2 차이를 일수로 반환
SELECT HISTORY_ID, CAR_ID, DATE_FORMAT(START_DATE, '%Y-%m-%d') AS START_DATE,
DATE_FORMAT(END_DATE, '%Y-%m-%d') AS END_DATE,
IF(DATEDIFF(END_DATE,START_DATE)>28,'장기 대여','단기 대여') AS RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE LIKE "%2022-09-%"
ORDER BY HISTORY_ID DESC;
조인
- 데이터베이스 내의 여러 테이블에서 가져온 레코드를 조합하여 하나의 테이블이나 결과 집합으로 표현해 주는 것
(INNER) JOIN
- 조인하는 테이블의 ON절의 조건이 일치하는 결과만 출력
- 표준 SQL과 달리 MYSQL에서는 JOIN, INNER JOIN, CROOS JOIN이 모두 같은 의미로 사용
select u.userid, name
from usertbl as u inner join buytbl as b
on u.userid=b.userid
where u.userid="111" -- join을 완료하고 그다음 조건을 따진다.
LEFT/ RIGHT OUTER JOIN
- 두 테이블에 합쳐질때 왼쪽/오른쪽을 기준으로 했느냐에 따라 기준 테이블의 것은 모두 출력되어야 한다고 이해하면된다.
- OUTER JOIN은 조인하는 ON절의 조건 중 한쪽의 데이터를 모두 가져온다.
LEFT JOIN
두 테이블이 있는 경우, 첫번째 테이블을 기준으로 두번째 테이블을 조합하는 JOIN이다.
-- 예) 1학년 학생의 이름과 지도교수명을 출력하라. 단, 지도교수가 지정되지 않은 학생도 출력되게 하라.
SELECT STUDENT.NAME, PROFESSOR.NAME
FROM STUDENT LEFT OUTER JOIN PROFESSOR -- STUDENT를 기준으로 왼쪽 조인
ON STUDENT.PID = PROFESSOR.ID
WHERE GRADE = 1
RIGHT JOIN
두 테이블이 있는 경우, 두 번째 테이블을 기준으로 첫번째 테이블을 조합하는 JOIN이다.
-- 예) 1학년 학생의 이름과 지도교수명을 출력하라. 단, 지도교수가 지정되지 않은 학생도 출력되게 하라.
SELECT STUDENT.NAME, PROFESSOR.NAME
FROM STUDENT RIGHT OUTER JOIN PROFESSOR -- PROFESSOR를 기준으로 오른쪽 조인
ON STUDENT.PID = PROFESSOR.ID
WHERE GRADE = 1
Distinct(JOIN에서 중복된 레코드제거)
-- DISTINCT를 추가
SELECT DISTINCT person.id, person.name, job.job_name
FROM person INNER JOIN job
ON person.name = job.person_name;
-> 레코드 수가 많은 경우 성능이 느려지는 단점 존재.
JOIN 전에 중복을 제거
select A.name, A.countryCode
from city A
left join ( select distinct name, Code from country ) as B
-- 조인할 테이블에 먼저 distinct로 중복을 제거한 select문을 서브쿼리로 불러와 임시테이블로 만든뒤 조인한다
on A.countrycode = B.Code
COUNT
- 테이블에 존재하는 데이터갯수를 가져오고 싶을때 사용
//전체 행 갯수 가져오기 NULL 값 포함해서 가져옴
SELECT COUNT(*) FROM 테이블;
// 컬럼 데이터 갯수 가져오기 NULL값 제외하고 가져옴
SELECT COUNT(컬럼) FROM 테이블;
DISTINCT
- 컬럼의 unique한 레코드 값의 개수를 구하고 싶다면 distinct이용.
-- 레코드의 개수
select count(*) from Blackpink;
-- 나이 종류 개수(중복되지 않음)
select count(distinct age) from Blackpink;
-- (+)나이 종류
select distinct age from Blackpink;
문자열 부분가져오기(LEFT,MID,RIGHT)
- LEFT : 문자에 왼쪽을 기준으로 일정 갯수를 가져오는 함수
- MID : 문자에 지정한 시작 위치를 기준으로 일정 갯수를 가져오는 함수
- RIGHT : 문자에 오른쪽을 기준으로 일정 갯수를 가져오는 함수
특정문자갯수로 group by해야할때 substring이 더 직관적인듯.
LEFT(문자, 가져올 갯수);
SELECT LEFT('abcdefg', 3); // abc
MID(문자, 시작 위치, 가져올 갯수);
-- 또는 SUBSTR(문자, 시작 위치, 가져올 갯수);
-- 또는 SUBSTRING(문자, 시작 위치, 가져올 갯수);
SELECT MID('abcdefg', 2, 4); // bcde
RIGHT(문자, 가져올 갯수);
SELECT RIGHT('abcdefg', 3); // efg
CASE
MySQL에서 CASE문은 프로그래밍 언어에서 스위치(switch)문과 비슷하다.
CASE
WHEN 조건
THEN '반환 값'
WHEN 조건
THEN '반환 값'
ELSE 'WHEN 조건에 해당 안되는 경우 반환 값'
END
- WHEN과 THEN은 한쌍이어야 한다.
'공부' 카테고리의 다른 글
Docker란? (탄생배경, 정의) (0) | 2023.11.24 |
---|---|
클라우딩 컴퓨팅 2 (0) | 2023.10.25 |
클라우딩 컴퓨팅 소개 (1) | 2023.10.24 |
웹프로그래밍기초 기말 (1) | 2023.06.11 |
소프트웨어공학 - 기말 (0) | 2023.06.06 |