Cs
4. SQL 개념 및 MYSQL 내장함수
ITSEONG
2022. 3. 17. 23:07
오늘은 데이터베이스에서 사용하는 SQL에 대해 알아보고자 한다.
탄생 배경
SQL은 1970년대 후반 IBM이 SEQUEL(Structured English Query Language)이라는 이름으로 개발한 관계형 데이터베이스 언어이다.
이후 1986년 ANSI에 의해 관계형 데이터베이스 표준 언어로 승인되었다. SQL의 후속버전은 1992년에 SQL2 1999년에 SQL3로 확장되었으며 SQl3는 객체지향의 개념을 일부 포함하고 있다. 현재는 연도에 이름을 붙인 SQL 2011 표준으로 개정되었다.
SQL과 일반 프로그래밍 언어의 차이점
SQL은 자바나 C 같은 완전한 프로그래밍 언어는 아니다. 대신 데이터 부속어(data sublanguage)라고 부르는데, 이유는 데이터베이스의 데이터와 메타 데이터를 생성하고 처리하는 문법만 가지고 있기 때문이다. SQL은 DBMS에 직접 입력해 사용할 수 있고, 자바나 C로 작성된 클라이언트/서버 응용 프로그램에 삽입하여 사용할 수도 있다.
구분 | SQL | 일반 프로그래밍 언어 |
용도 | 데이터베이스에서 데이터를 추출하여 문제 해결 | 모든 문제 해결 |
입출력 | 입력은 테이블, 출력도 테이블 | 모든 형태의 입출력 가능 |
번역 | DBMS | 컴파일러 |
문법 | SELECT * FROM Book; | int main() {....} |
SQL의 기능
- 데이터 정의어(DDL) : 테이블이나 관계의 구조를 생성하는데 사용하며 CREATE, ALTER, DROP 문 등이 있다.
- 데이터 조작어(DML) : 테이블에 데이터를 검색, 삽입, 수정, 삭제하는 데 사용하며 SELECT, INSERT, DELETE, UPDATE 문 등이 있다. 여기서 SELECT 문은 특별히 질의어(query) 라고 부른다.
- 데이터 제어어어(DCL) : 데이터의 사용 권한을 관리하는 데 사용하며 GRANT, REVOKE 문 등이 있다.
SQL 내장함수
SQL 내장 함수는 상수나 속성의 이름을 입력값으로 받아 단일 값을 결과로 반환한다. 모든 내장함수는 최초에 선언될 때 유효한 입력값을 받아야 한다.
1. 숫자 관련함수
ABS(숫자) : 절대값 출력 |
CEILING(숫자) : 값보다 큰 정수 중 가장 작은 수 |
FLOOR(숫자) : 값보다 작은 정수 중 가장 큰 수(실수를 무조건 버럼(음수일 경우는 제외)) |
ROUND(숫자, 자리수) : 숫자를 소수점 이하 자리수에서 반올림.(자리수는 양수,0,음수를 갖을 수 있다.) |
TRUNCATE(숫자, 자리수) : 숫자를 소수점 이하 자리수에서 버림. |
POW(X,Y) or POWER(X,Y) : X 의 Y 승 |
MOD(분자, 분모) : 분자를 분모롤 나눈 나머지를 구한다. (연산자 %와 같음) |
GREATEST(숫자1, 숫자2, 숫자3,....) : 주어진 수 중 제일 큰 수 리턴 |
LEAST(숫자1, 숫자2, 숫자3,...) : 주어진 수 중 제일 작은 수 리턴 |
INTERVAL(a,b,c,d,...) : a(숫자)의 위치 반환 |
2. 문자 관련함수
ASCII(문자) : 대상 문자의 아스키 코드값 리턴 |
CONCAT('문자열1', '문자열2','문자열3',...) : 문자열들을 이어준다. |
INSERT('문자열','시작위치','길이','새로운문자열') : 문자열의 시작위치부터 길이만큼 새로운 문자열로 대치 |
REPLACE('문자열', '찾는 문자열') : 문자열 중 찾는 문자열의 위치값을 출력 |
LEFT('문자열', 개수) : 문자열 중 왼쪽에서 개수만큼을 추출 |
RIGHT('문자열', 개수) : 문자열 중 오른쪽에서 개수만큼을 추출 |
MID('문자열', 시작위치, 개수) : 문자열 중 시작위치부터 개수만큼 추출 |
SUBSTRING('문자열', 시작위치, 개수) : 문자열 중 시작위치부터 개수만큼 출력 |
LTRIM('문자열') : 문자열 중 왼쪽의 공백을 없앤다. |
RTRIM('문자열') : 문자열 중 오른쪽의 공백을 없앤다. |
TRIM('문자열') : 양쪽 모두의 공백을 없앤다. |
LCASE('문자열') or LOWER('문자열') : 소문자로 바꾼다. |
UCASE('문자열') or UPPER('문자열') : 대문자로 바꾼다. |
REVERSE('문자열') : 문자열을 반대로 나열한다. |
3. 논리관련 함수
IF(논리식, 참일때 값, 거짓일때 값) : 논리식이 참이면 참일 때 값을 출력하고, 거짓이면 거짓일 때 값 출력 |
IFNULL(값1, 값2) : 값1 이 NULL이면 값2로 대치하고 그렇지 않으면 값1을 출력 |
4. 집계함수
COUNT(필드명) : NULL이 아닌 레코드 수를 구한다. |
SUM(필드명) : 필드명의 합계를 구한다. |
AVG(필드명) : 각각의 그룹안에서 필드명의 평균값을 구한다. |
MAX(필드명) : 최대값을 구한다. |
MIN(필드명) : 최소값을 구한다. |
5. 날짜관련 함수
NOW() 또는 SYSDATE() 또는 CURRENT_TIMESTAMP() : 현재 날짜와 시간 출력 |
CURDATE() 또는 CURRENT_DATE() : 현재 날짜 출력 |
CURTIME() 또는 CURRENT_TIME() : 현재 시간 출력 |
DATE_ADD(날짜, INTERVAL 기준값) : 날짜에서 기준값 만큼 더한다. * 기준값 : YEAR, MONTH, DAY, HOUR, MINUTE, SECOND |
DATE_SUB(날짜, INTERVAL 기준값) : 날짜에서 기준값 만큼 뺀다. * 기준값 : YEAR, MONTH, DAY, HOUR, MINUTE, SECOND |
YEAR(날짜) : 날짜의 연도 출력 |
MONTH(날짜) : 날짜의 월 출력 |
MONTHNAME(날짜) : 날짜의 월을 영어로 출력 |
DAYNAME(날짜) : 날짜의 요일을 영어로 출력 |
DAYOFMONTH(날짜) : 날짜의 월별 일자 출력 |
WEEKDAY(날짜) 또는 DAYOFWEEK(날짜) : 날짜의 주별 일자 출력( 월요일(0), 화요일(1), ....,일요일(6)) |
DAYOFYEAR(날짜) : 일년을 기준으로 한 날짜까지의 날 수 |
WEEK(날짜) : 일년 중 몇 번째 주. |
FROM_DAYS(날 수) : 00년 00월 00일부터 날 수 만큼 경과한 날의 날짜 출력. |
TO_DAYS(날짜) : 00 년 00 월 00일 부터 날짜까지의 일자 수 출력. |
DATE_FORMAT(날짜,'형식) : 날짜를 형식에 맞게 출력
타입 | 기호 | 설명 | 기호 | 설명 |
년도 | %Y | 4자리 연도 | %y | 2자리 연도 |
월 | %M %b |
긴 월 이름(January, ..) 짤은 월 이름(Jan,...) |
%m %c |
숫자의 월(01,...12) 숫자의 월(1. ...,12) |
요일 | %W | 긴 요일 이름(Monday,..) | %a | 짧은 요일 이름(Mon) |
일 | %D %w |
월 내에서 서수형식의 일(1th,..) 숫자의 요일 (0 = Sunday,..) |
%d %e %j |
월 내의 일자(01,..31) 월 내의 일자(1,...31) 일년 중의 날수(001,...365) |
시 | %I %h %l(대문자 i) |
12시간제의 시(1,..,12) 12시간제의 시(01,..,12) 12시간제의 시(01,..,12) |
%k %H |
12시간제의 시(0,..,23) 12시간제의 시(0,..,23) |
분 | %i | 숫자의 분(00,...,59) | ||
초 | %S | 숫자의 초(00,..,59) | $s | 숫자의 초(00,..,59) |
시간 | %r | 12시간제의 시간(hh:mm:ss AM 또는 PM) | %T | 24시간제의 시간(HH : mm :ss |
주 | %U | 일요일을 기준으로 한 주 (0..52) | %u | 월요일을 기준으로 한 주 (0..52) |
기타 | %% | 문자'%' | %p | AM 또는 PM |
6. 기타 함수
DATABASE() : 현재의 데이터베이스 이름을 출력한다. |
FORMAT(숫자, 소수이하자리수) : 숫자를 #,###,###,###.### 형식으로 출력 |
반응형