SQL 모음

박세건·2023년 4월 7일
0
post-thumbnail

SELECT 결과를 하나만 원할때

SELECT NAME
FROM ANMIAL_INS
ORDER BY  DATE ASC LIMIT 1;

LIMIT 사용

중복되는 결과를 COUNT 할때

COUNT(DISTINCT NAME)

DISTINCT 를 ()안에다가 사용

WHERE 절에 조건 추가는 AND, OR

WHERE NAME LIKE '%EL%' AND  ANIMAL_TYPE='DOG'

NULL인 값의 개수를 알기위해

NULL을 갖고있는 컬럼에서 NULL의 개수를 세기위해서 그 컬럼 값을 넣어주면 COUNT는 인식하지 못한다 따라서 NULL 이 들어갈 수 없는 컬럼을 COUNT 해주고 WHERE 절에서 구하고자 하는 컬럼이 NULL 인지를 확인

COALESCE함수 (NULL 처리)

COALESCE함수는 인자로 주어진 컬럼들 중에서 NULL이 아닌 첫 번째 값을 반환하는 함수입니다. 만약 A, B라는 컬럼을 인자로 COALSESC 함수로 주게 되면 A 컬럼 값이 NULL 값이 아닌 경우 A 값을 리턴하고 A가 NULL이고 B가 NULL이 아닌 경우 B 값을 리턴합니다. 모든 인수가 NULL이면 NULL을 반환합니다.

IFNULL함수 (NULL 처리)

SELECT IFNULL(Column명, "Null일 경우 대체 값") FROM 테이블명; 

DATE_FORMAT 날짜 형식 설정 함수

TYPE이 DATETIME 으로 설정된 컬럼 값의 정보를 변경한다

SELECT DATE_FORMAT(NOW(),'%Y-%m-%d') AS DATE FROM DUAL
 2016-09-22

IF 함수

IF(컬럼명 'GOOD',O,X)
-> 값이 GOOD 이라면 O 아니면 X 가 나오게 한다

SELECT IF(NAME IN NULL, "No name", NAME)

이렇게 응용해서 NULL 값을 변환해줄 수 있다.
ex) IF(SEX_UPON_INTAKE LIKE '%Neutered%' OR SEX_UPON_INTAKE LIKE '%Spayed%','O','X') AS 중성화

BETWEEN AND

기본 틀

BETWEEN 컬럼명 값1 AND 값 2;

정규표현식 regular expression REGEXP

정규표현식이란? 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식 언어
REGEXP 활용

select productid, productname, unit from products
where unit regexp 'boxes|pieces';

LIKE 활용

select productid, productname, unit from products
where unit like '%boxes%' or unit like '%pieces%';

같은 결과를 출력하지만 더 간편하게 사용할 수 있다.

순위함수들(RANK, DENSE_RANK, ROW_NUMBER, NTILE)

RANK()

RANK 함수는 중복 값들에 대해서 동일 순위로 표시하고, 중복 순위 다음 값에 대해서는 중복 개수만큼 떨어진 순위로 출력하도록 하는 함수 입니다.

SELECT empNo, empName, salary,
RANK() OVER (ORDER BY salary DESC) RANK등수
FROM employee;

DENSE_RANK

DENSE_RANK 함수는 중복 값들에 대해서 동일 순위로 표시하고, 중복 순위 다음 값에 대해서는 중복 값 개수와 상관없이 순차적인 순위 값을 출력하도록 하는 함수 입니다.

SELECT empNo, empName, salary,
DENSE_RANK() OVER (ORDER BY salary DESC) DENSE_RANK등수
FROM employee;

ROW_NUMBER

ROW_NUMBER 함수는 중복 값들에 대해서도 순차적인 순위를 표시하도록 출력하는 함수 입니다.

SELECT empNo, empName, salary,
ROW_NUMBER() OVER (ORDER BY salary DESC) ROW_NUMBER등수
FROM employee;

PARTITION BY

단순히 모든 사람의 salary를 순위 매기고 싶은 것이 아니라, 직급별 순위를 매기고 싶을때
직급 별로 구분을 해서 순위를 매기면 됩니다. 이렇게 특정 속성 별로 구분을 하고자 할 때 PARTITION BY절을 사용하면 됩니다.

SELECT empName, job, salary,
RANK() OVER (PARTITION BY job ORDER BY salary DESC) RANK등수
FROM employee;

DIV 함수

이 함수는 주어진 숫자를 정수로 나눈 값을 반환하며 FLOOR() 함수와 비슷합니다. 그러나 bigINT 값으로 안전합니다.

 SELECT 5 DIVE 2;
 -> 2
 SELECT 8 DIVE 2;
 -> 4
profile
멋있는 사람 - 일단 하자

0개의 댓글