* 함수의 종류
1. 제어 흐름 함수
2. 문자열 함수
3. 수학함수
4. 날짜/시간 함수
5. 전체 텍스트 검색함수
6. 형 변환 함수
7. XML함수
8. 비트함수
9. 보안/압축함수
10. 정보함수
11. 공간 분석 함수
12. 기타함수
1. 제어 흐름 함수 : 프로그램의 흐름을 제어한다.
3. if(수식, 참, 거짓)
> 수식이 참 또는 거짓인지 결과에 따라 2중 분기한다.
3. ifnull(수식1, 수식2)
> 수식1이 null이 아니면 수식1이 반환, 수식1이 null이면 수식2가 반환된다.
3. nullif(수식1, 수식2)
> 수식1이 수식2와 같으면 null을 반환, 다르면 수식1을 반환
3~8. Case ~ when ~ else ~ end
> case는 내장함수는 아니며 연산자로 분류된다. 다중 분기에 활용될 수 있으므로 내장함수와 함께 알아두자.
2. 문자열 함수 : 문자열을 조작한다
* ASCII(아스키코드),CHAR(숫자)
> 문자의 아스키 코드값을 돌려주거나 숫자의 아스키 코드값에 해당하는 문자를 돌려준다.
> BLOB은 워크벤치 버그임. 우클릭 Open Value in Viewer 클릭하면 정상적으로 보임.(A)
* bit_length(문자열), char_length(문자열), length(문자열)
> 할당된 Bit 크기 또는 문자 크기를 반환한다.
> bit_length
- 영문 = 할당된 비트크기 3글자 * 8비트(1바이트)
- 한글 = 할당된 비트크기 3글자 * 8비트(1바이트) * 3바이트(한글은 1글자당 3바이트)
> char_length : 문자의 개수 반환
> length : 할당된 바이트수 반환
- UTF8은 영문은 한글자당 1Byte, 한글은 한글자당 3Byte
* concat(문자열1,문자열2,…), concat_ws(문자열1,문자열2,…)
> concat은 012번 문서에서 여러 번해봤다. 걍 문자열을 연결시킴.
> concat_ws : 구분자와 함께 문자열을 이어준다.
1. elt(위치, 문자열1, 문자열2, …) : 위치번째에 해당하는 문자열을 반환.
2. field(찾을 문자열, 문자열1, 문자열2, …) : 찾을 문자열의 위치를 찾아서 반환.
3. find_in_set(찾을 문자열, 문자열 리스트) : 찾을 문자열을 리스트에서 찾아 반환. 리스트는 ,로 구분되어 있어야함.
4. instr(기준 문자열, 부분 문자열) : 기준문자열에서 부분문자열을 찾아서 그 시작 위치를 반환.
5. locate(부분 문자열, 기준 문자열) : instr과 동일하지만 파라미터의 순서 반대(position()과 동일함)
* format(숫자, 소수점 자릿수) : 숫자를 소수점 아래 자릿수까지 표현하며, 1000단위 콤마
* bin(숫자), hex(숫자), oct(숫자) : 2진수, 16진수, 8진수의 값을 반환한다.
* insert(기준 문자열, 위치, 길이, 삽입할 문자열) : 문자열의 위치부터 길이만큼을 지우고 삽입할 문자열을 끼워 넣는다.
* left(문자열, 길이), right(문자열, 길이) : 왼쪽 또는 오른쪽에서 문자열의 길이만큼 반환한다.
* ucase(문자열), lcase(문자열) : 소문자를 대문자로, 대문자를 소문자로 변경한다.
* upper(문자열), lower(문자열) : 소문자를 대문자로, 대문자를 소문자로 변경한다. 위와 동일
* lpad(문자열, 길이, 채울문자열), rpad(문자열, 길이, 채울문자열) : 문자열의 길이만큼 늘린 후에 빈 곳을 채울 문자열로 채운다.
* Ltrim(문자열), rtrim(문자열) : 문자열의 왼쪽/오른쪽 공백을 제거. 중간의 공백은 제거되지 않음
* trim(문자열) : 문자열의 앞뒤 공백을 모두 없앤다.
* trim(방향 자를_문자열 from 문자열)
> 방향 : LEADING(앞), BOTH(양쪽), TRAILING(뒤)
* repeat(문자열, 횟수) : 문자열을 횟수만큼 반복한다.
* replace(문자열, 원래 문자열, 바꿀 문자열) : 문자열에서 원래 문자열을 찾아서 바꿀 문자열로 바꿔준다.
* reverse(문자열) : 문자열의 순서를 거꾸로 만든다.
* space(길이) : 길이만큼의 공백을 반환한다.
* substring(문자열, 시작위치, 길이) 또는 substring(문자열 from 시작위치 for 길이)
- 시작위치부터 길이만큼 문자를 반환한다. 길이가 생략되면 문자열의 끝까지 반환한다.
* substring_index(문자열, 구분자, 횟수)
- 문자열에서 구분자가 왼쪽부터 횟수 번째까지 나오면 그 이후의 오른쪽은 버린다. 횟수가 음수면 오른쪽부터 세고 왼쪽을 버린다.
* 수학함수
* abs(숫자) : 숫자의 절댓값을 계산한다.
* acos(숫자), asin(숫자), atan(숫자), atan2(숫자), sin(숫자), cos(숫자), tan(숫자) : 삼각 함수와 관련된 함수를 제공
* ceiling(숫자), floor(숫자), round(숫자) : 올림, 내림, 반올림을 계산한다.
* conv(숫자, 원래 진수, 변환할 진수) : 숫자를 원래 진수에서 변환할 진수로 계산한다. 16진수 AA를 2진수로 변환. 10진수 100을 8진수로 변환
* degrees(숫자), radians(숫자), pi() : 라디안 값을 각도값으로, 각도값을 라디안 값으로 변환한다. Pi는 파이값인 3.141592를 반환한다.
* exp(x), ln(숫자), log(숫자), log(숫자), log2(숫자), log10(숫자) : 지수와 로그와 관련된 함수를 제공한다.
* mod(숫자1, 숫자2) 또는 숫자1 % 숫자2 또는 숫자1 mod 숫자2 : 숫자1을 숫자2로 나눈 나머지 값을 구한다.
* pow(숫자1, 숫자2), sqrt(숫자) : 거듭제곱값 및 제곱근을 구한다. 2의 3제곱과 루트9의 값을 구한다.
* rand()는 0이상 1미만의 실수를 구한다. 만약 ‘m<=임의의 정수 < n’를 구하고 싶다면 floor(m + rand() * (n-m))을 사용하면 된다. 랜덤
* Sign(숫자) : 숫자가 양수, 0, 음수인지를 구한다. 결과는 1,0,-1 셋 중에 하나를 반환한다.
* truncate(숫자, 정수) : 숫자를 소수점을 기준으로 정수 위치까지 구하고 나머지는 버린다.
* 날짜 및 시간 함수
* adddate(날짜, 차이), subdate(날짜, 차이) : 날짜를 기준으로 차이를 더하거나 뺀 날짜를 구한다.
* adddate()와 date_add()는 동일한 함수이며, subdate()와 date_sub()도 동일한 함수.
* addtime(날짜/시간, 시간), subtime(날짜/시간, 시간) : 날짜/시간을 기준으로 시간을 더하거나 뺀 결과를 구한다.
* curdate() : 현재 오늘 연-월-일
* curtime() : 현재 오늘 시:분:초
* now()와 sysdate() : 현재 오늘 ‘연-월-일 시:분:초’
* curdate(), current_date(), current_date 는 모두 동일
* curtime(), current_time(), current_time 은 모두 동일
* now(), localtime, localtime(), localtimestamp, localtimestamp() 는 모두 동일
날짜 또는 시간에서 연,월,일,시,분,초,밀리초를 구한다.
* date(), time() : datetime 형식에서 연-월-일 및 시:분:초만 추출한다.
* datediff(날짜1, 날짜2) : 날짜1 – 날짜2의 일수를 결과로 추출한다.
* timediff(날짜1 또는 시간1, 날짜1 또는 시간2) : 시간1-시간2의 결과를 구한다.
* dayofweek(날짜), monthname(날짜), dayofyear(날짜) : 현재요일(1:일, 2:월, ~ 7:토), 월 이름, 1년 중 몇 일이 지났는지를 반환한다.
* last_day(날짜) : 주어진 날짜의 마지막 날짜를 구한다.
* makedate(연도, 정수) : 연도에서 정수만큼 지난 날짜를 구한다.
* period_add(연월, 개월수) : 연월에서 개월만큼의 개월이 지난 연월을 구한다. 연월은 YYYY 또는 YYYYMM 형식을 사용한다.
* period_diff(연월1, 연월2) : 연월1-연월2의 개월수를 구한다.
* quarter(날짜) : 날짜가 4분기 중에서 몇 분기인지를 구한다.
* time_to_sec(시간) : 시간을 초단위로 구한다.
* 시스템 정보 함수
* current_user(), database() : 현재 사용자와 현재 선택된 데이터베이스를 구한다.
* user(), session_user(), current_user() 는 모두 동일하다.
* database(), schema() 는 모두 동일하다.
* found_rows() : 바로 앞의 select문에서 조회된 행의 개수를 구한다.
* row_count() : 바로 앞의 insert, update, delete 문에서 입력, 수정, 삭제된 행의 개수를 구한다. Create, drop문은 0을 반환하고 select문은 -1을 반환한다.
* version() : 현재 MySQL의 버전을 구한다.
* sleep(초) : 쿼리의 실행을 초만큼 멈춘다.
* 이 외에도 비트함수, 전체 텍스트 검색 함수, 보안 및 압축 함수, MySQL Enterprise 암호화 함수, 공간 분석 함수, JSON 함수 등이 있다.
회원들 중 구매한 이력이 있는 회원이 중복되게 나와야 하지만, distinct를 걸어주면 중복이 제거되어 구매한 이력이 있는 회원들을 중복없이 볼 수 있다.
5. exists : 존재하는 알아봐야함.
BBK아이디가 구매테이블에 구매한 기록이 있어 foreignkey 제약 조건에 의해 데이터가 변경되지 않을 시 제약조건 비활성화하여 수정 가능.
11. foreign_key_check=0 : 제약조건 비활성화
12. foreign_key_check=1 : 제약조건 활성화
'SQL' 카테고리의 다른 글
[SQL] JOIN 조인 (0) | 2021.03.14 |
---|---|
[mariadb_mysql] 대량의데이터(TEXT,CLOB) (0) | 2021.03.13 |
[MySql MariaDB] 변수_json데이터 (0) | 2021.03.11 |
[MySQL_MariaDB] 데이터타입 정리 (0) | 2021.03.10 |
[SQL] where조건모음_select구조_그룹바이_형변환 (0) | 2021.03.09 |