헬린코린이

[DB] 서브쿼리,내장함수 본문

Programming/DataBase

[DB] 서브쿼리,내장함수

HCD 2022. 12. 13. 16:14

서브 쿼리는 

기본적으로 쿼리 문안에 또 쿼리문을 작성하는 것을 말한다.

그렇게 어렵지는 않을 것이다.

코드를 보겠습니다!

CREATE TABLE MEMBER(
	NUM INT PRIMARY KEY,
	NAME VARCHAR(20) NOT NULL,
	AGE INT DEFAULT 20
);

우선 테이블에는 NUM,NAME,AGE의 칼럼을 만들어주었고

NUM은 PK로 설정해주었습니다.

NAME 은 NULL이 들어올 수 없게 하였고

AGE는 기본값을 20으로 주었습니다.

INSERT INTO MEMBER VALUES(101,'임꺾정',30);
INSERT INTO MEMBER VALUES((SELECT NVL(MAX(NUM),0)+1 FROM MEMBER),'임꺾정',30);

첫번째 코드를 보시면 MEMBER테이블에 101, 임꺾정,30의 값을 부여해주는데

저걸 다시 추가하게된다면 에러가 날 것입니다.

이유는 NUM은 PK 제약조건을 가지고 있는데

101이 중복이 되기 떄문에 에러가 나는 것입니다.

그렇다면 우리는 하나하나 추가할떄마다 앞에 숫자를 일일이 바꿔야 하는데 

그걸 쿼리문이 할수 있도록 쿼리 문안에 쿼리문을 작성해주는 것입니다.

 

그렇다면 MAX? NVL? 이런 것들을 내장 함수라고 합니다.

내장 함수란

DB에서 제공하는 미리 정의된 기능입니다.

단일 함수가 있고 그룹 함수가 있습니다.

 

단일 함수는 

- 각행에 대해 수행하고

- SELECT, WHERE, ORDER BY절 등에서 사용합니다.

 - 함수 속에 함수로 중첩해서 사용도 가능합니다.

여러 가지의 함수가 있는데 저는 대표적인 함수 몇 가지만 소개할까 합니다.

 

- 문자열 함수

LENGTH() : 전달받은 문자열의 길이를 반환합니다.

CONCAT() : 전달받은 문자열을 모두 결합하여 하나의 문자열로 반환합니다.

                    전달받은 문자열 중 하나라도 NULL이 존재하면 NULL을 반환합니다.

LOCATE() : 문자열 내에서 찾는 문자열이 처음으로 나타나는 위치를 찾아서 해당 위치를 반환합니다.

                    찾는 문자열이 문자열 내에 존재하지 않으면 0을 반환합니다.

LEFT(), RIGTH() : 문자열의 왼쪽, 오른쪽부터 지정한 개수만큼 문자를 반환합니다.

LOWER(), UPPER() : 문자열의 문자를 소, 대문자로 변경합니다.

TRIM() : 문자열의 앞이나 뒤, 또는 양쪽 모두에 있는 특정 문자를 제거합니다.

                    TRIM() 함수에서 사용할 수 있는 지정자

                     - BOTH : 전달받은 문자열의 양 끝에 존재하는 특정 문자를 제거(기본 설정)

                     - LEADING : 전달받은 문자열 앞에 존재하는 특정 문자를 제거

                     - TRAILING : 전달받은 문자열 뒤에 존재하는 특정 문자를 제거

              만약 지정자로 명시하지 않으면, 자동으로 BOTH로 설정됩니다.

              제거할 문자를 명시하지 않으면, 자동으로 공백을 제거합니다.                  

-수학 함수

FROMAT() : 숫자 타입의 데이터를 세 자리마다 쉼표(,)를 사용하는 '#,###,###.##'형식으로 변환

                    반환되는 데이터의 형식은 문자열 타입이고

                    두 번째 인수는 반올림할 소수 부분의 자릿수입니다.

FLOOR(), CEIL(), ROUND() : 순서대로 내림, 올림, 반올림

SQRT() : 양의 제곱근입니다.

POW() : 첫 번째 인수로는 밑수를 전달하고, 두 번째 인수로는 지수를 전달하여 거듭제곱을 계산합니다.

EXP() : 인수로 지수를 전달받아, e의 거듭제곱을 계산
LOG() : 자연로그 값을 계산
SIN(), COS(), TAN() : 순서대로 사인, 코사인, 탄젠트 값을 반환합니다.

ABS() : 절댓값을 반환하고

RAND() : 0.0보다 크거나 같고 1.0보다 작은 하나의 실수를 무작위로 생성합니다.

 

- 날짜 함수

NOW() : 현재 날짜와 시간을 반환, 반환되는 값은 YYYY-MM-DD HH:MM:SS

CURDATE() : 현재 날짜를 반환, 반환되는 값은 YYYY-MM-DD

CURTIME() : 현재 시각을 반환, 반환되는 값은 HH:MM:SS
DATE(NOW()) : 전달받은 값에 해당하는 날짜 정보를 반환

MONTH() : 월에 해당하는 값을 반환하며, 0부터 12 사이의 값을 가집니다.
DAY() : 일에 해당하는 값을 반환하며, 0부터 31 사이의 값을 가집니다.

HOUR() : 시간에 해당하는 값을 반환하며, 0부터 59 사이의 값을 가집니다.

MINUTED() : 분에 해당하는 값을 반환하며, 0부터 59사이의 값을 가집니다
SECOND() : 초에 해당하는 값을 반환하며, 0부터 50 사이의 값을 가집니다.
MONTHNAME() : 월에 해당하는 이름을 반환
DAYNAME() : 요일에 해당하는 이름을 반환
DAYOFWEEK(NOW()) : 일자가 해당 주에서 몇 번째 날인지를 반환하고 1부터 7 사이의 값을 반환(일요일=1)
DAYOFMONTH() : 일자가 해당 월에서 몇 번째 날인지를 반환, 0부터 31 사이의 값을 반환합니다.
DAYOFYEAR() : 일자가 해당 연도에서 몇 번째 날인지를 반환, 1부터 366 사이의 값을 반환합니다.
DATE_FORMAT(NOW(), % D...) : 전달받은 형식에 맞춰 날짜와 시간 정보를 문자열로 반환합니다.

Comments