truncate()
: 잘라내기, 소수점 이하를 단순히 잘라냄.
-- 333
select truncate(333.727, 0)
from dual;

--- 333.72
select truncate(333.727, 2)
from dual;

 

 

round()
: 반올림, 소수점 이하 n자리를 반올림해서 반환
--- 123
select round(333.727, 0)
from dual;

-- 123
select round(333.727, 2)
from dual;

'Computer Science > DB' 카테고리의 다른 글

SQL Joins 도식  (1) 2025.02.05
[스크랩] MySQL 함수 99개 총정리  (2) 2025.02.04
[스크랩] MySQL 완전 삭제 후 설치 방법  (0) 2025.02.03
[SQL] 쿼리 문법 정리  (1) 2025.01.07

'Computer Science > DB' 카테고리의 다른 글

[MySQL] truncate(), round()  (1) 2025.02.05
[스크랩] MySQL 함수 99개 총정리  (2) 2025.02.04
[스크랩] MySQL 완전 삭제 후 설치 방법  (0) 2025.02.03
[SQL] 쿼리 문법 정리  (1) 2025.01.07

원문출처: https://bommbom.tistory.com/entry/MySQL-%EB%82%B4%EC%9E%A5-%ED%95%A8%EC%88%98-%EC%B4%9D%EC%A0%95%EB%A6%AC#1._%EB%AC%B8%EC%9E%90%EC%97%B4_%ED%95%A8%EC%88%98


1. 문자열 함수

문자열 함수는 텍스트를 처리할 때 주로 사용되는데요. 예를 들어, 이름이나 주소와 같은 데이터를 다룰 때 많이 사용됩니다.

함수명 설명 예시 결과
CONCAT()  여러 문자열을 하나로 합침  CONCAT('Hello','','World!') Hello World!
SUBSTRING()  문자열의 일부를 추출  SUBSTRING('HelloWorld!',7,5) World
LENGTH()  문자열의 길이를 반환  LENGTH('Hello') 5
UPPER() 문자열을 대문자로 변환합니다. UPPER('hello') HELLO
LOWER() 문자열을 소문자로 변환합니다. LOWER('HELLO') hello
TRIM() 문자열의 앞뒤 공백을 제거합니다. TRIM(' Hello ') Hello
LTRIM() 문자열의 앞쪽 공백을 제거합니다. LTRIM(' Hello') Hello
RTRIM() 문자열의 뒤쪽 공백을 제거합니다. RTRIM('Hello ') Hello
REPLACE() 문자열에서 특정 부분을 다른 문자열로 대체합니다. REPLACE('Hello World', 'World' 'MySQL') Hello MySQL
INSTR() 문자열 내에서 특정 문자열의 위치를 반환합니다. INSTR('Hello World' 'World') 7
LEFT() 문자열의 왼쪽에서 지정한 길이만큼의 부분을 반환합니다. LEFT('Hello World', 5) Hello
RIGHT() 문자열의 오른쪽에서 지정한 길이만큼의 부분을 반환합니다. RIGHT('Hello World', 5) World
REPEAT() 문자열을 지정한 횟수만큼 반복합니다. REPEAT('MySQL', 3) MySQLMySQLMySQL
REVERSE() 문자열을 뒤집습니다. REVERSE('MySQL') LQSyM
LPAD() 문자열의 왼쪽에 지정한 문자로 채워서 지정한 길이로 만듭니다. LPAD('123', 5, '0') 00123
RPAD() 문자열의 오른쪽에 지정한 문자로 채워서 지정한 길이로 만듭니다. RPAD('123', 5, '0') 12300
CHAR_LENGTH() 문자열의 길이를 반환합니다. (문자의 개수 바이트 단위가 아님) CHAR_LENGTH('Hello') 5
SUBSTRING_INDEX() 문자열에서 지정한 구분자를 기준으로 부분 문자열을 반환합니다. SUBSTRING_INDEX('a,b,c,d', ',',2) a, b
FIND_IN_SET() 문자열이 리스트 내에서 몇 번째 위치에 있는지 반환합니다. (쉼표로 구분된 리스트) FIND_IN_SET('b', 'a,b,c') 2
FORMAT() 숫자를 문자열로 변환하고 지정한 형식으로 포맷팅합니다. FORMAT(1234567.89, 2) 1234567.89

 

2. 수학 함수

수학 함수는 숫자 계산을 할 때 주로 사용됩니다. 합계를 구하거나 평균을 내는 등 다양한 계산에 유용합니다.

함수명 설명 예시 결과
ROUND()  숫자를 반올림  ROUND(3.14159,2) 3.14
FLOOR()  주어진 숫자보다 작거나 같은 가장 큰 정수를 반환  FLOOR(2.9) 2
ABS()  숫자의 절대값을 반환  ABS(-5) 5
CEIL()  주어진 숫자보다 크거나 같은 가장 작은 정수를 반환합니다.  CEIL(2.3) 3
CEILING()  `CEIL()`의 동의어로, 동일한 기능을 수행합니다.  CEILING(2.3) 3
FLOOR()  주어진 숫자보다 작거나 같은 가장 큰 정수를 반환합니다.  FLOOR(2.9) 2
ROUND()  숫자를 반올림합니다.  ROUND(3.14159, 2) 3.14
TRUNCATE()  숫자를 소수점 아래에서 지정한 자리까지 잘라냅니다.  TRUNCATE(3.14159, 2) 3.14
MOD()  나머지 연산을 수행하여 나머지를 반환합니다.  MOD(10, 3) 1
POW()  주어진 숫자를 거듭제곱합니다. (동의어: `POWER()`)  POW(2, 3) 8
POWER()  주어진 숫자를 거듭제곱합니다.  POWER(2, 3) 8
SQRT()  주어진 숫자의 제곱근을 반환합니다.  SQRT(16) 4
EXP()  주어진 숫자의 지수승(자연로그의 역수)을 계산합니다.  EXP(1) 2.718281828
LOG()  주어진 숫자의 자연 로그를 계산합니다.  LOG(10) 2.302585093
LOG10()  주어진 숫자의 10 로그를 계산합니다.  LOG10(1000) 3
LOG2()  주어진 숫자의 2 로그를 계산합니다.  LOG2(8) 3
PI()  원주율 π (3.141592653589793)을 반환합니다.  PI() 3.141592654
RADIANS()  각도를 라디안으로 변환합니다.  RADIANS(180) 3.141592654
DEGREES()  라디안을 각도로 변환합니다.  DEGREES(PI()) 180
SIN()  주어진 각도의 사인 값을 반환합니다.  SIN(PI()/2) 1
COS()  주어진 각도의 코사인 값을 반환합니다.  COS(PI()) -1
TAN()  주어진 각도의 탄젠트 값을 반환합니다.  TAN(PI()/4) 1
SIGN()  숫자의 부호를 반환합니다. (양수는 1, 음수는 -1, 0은 0)  SIGN(-10) -1
RAND()  0과 1 사이의 랜덤 값을 반환합니다.  RAND() 예:0.673847238402
GREATEST()  주어진 인수들 중에서 가장 큰 값을 반환합니다.  GREATEST(1, 5, 3, 9) 9
LEAST()  주어진 인수들 중에서 가장 작은 값을 반환합니다.  LEAST(1, 5, 3, 9) 1

 

3. 날짜와 시간 함수

날짜와 시간 함수는 시간과 관련된 데이터를 처리할 때 사용됩니다. 예를 들어, 날짜를 다른 형식으로 변환한다거나 할 때 많이 사용됩니다. 

함수명 설명 예시 결과
NOW()  현재 날짜와 시간을 반환  NOW()  현재 날짜와 시간 
DATE_ADD()  날짜에 특정 기간을 더함  DATE_ADD('2023-08-27',INTERVAL10DAY)  `2023-09-06` 
DATEDIFF()  두 날짜 사이의 차이를 계산  DATEDIFF('2023-09-06','2023-08-27')  `10` 
CURDATE()  현재 날짜를 `YYYY-MM-DD` 형식으로 반환합니다.  CURDATE()  예: `2024-08-27` 
CURTIME()  현재 시간을 `HH:MM:SS` 형식으로 반환합니다.  CURTIME()  예: `14:30:00` 
DATE()  날짜 부분만 추출합니다.  DATE('2024-08-27 14:30:00')  `2024-08-27` 
YEAR()  주어진 날짜의 연도를 반환합니다.  YEAR('2024-08-27')  `2024` 
MONTH()  주어진 날짜의 월을 반환합니다.  MONTH('2024-08-27')  `8` 
DAY()  주어진 날짜의 일을 반환합니다.  DAY('2024-08-27')  `27` 
HOUR()  주어진 시간의 시간을 반환합니다.  HOUR('14:30:00')  `14` 
MINUTE()  주어진 시간의 분을 반환합니다.  MINUTE('14:30:00')  `30` 
SECOND()  주어진 시간의 초를 반환합니다.  SECOND('14:30:45')  `45` 
WEEK()  주어진 날짜가 연중 몇 번째 주인지 반환합니다.  WEEK('2024-08-27')  `35` 
DAYOFWEEK()  주어진 날짜가 주의 몇 번째 요일인지 반환합니다. (일요일이 1)  DAYOFWEEK('2024-08-27')  `3` 
DAYOFMONTH()  주어진 날짜가 월의 몇 번째 날인지 반환합니다.  DAYOFMONTH('2024-08-27')  `27` 
DAYOFYEAR()  주어진 날짜가 연중 몇 번째 날인지 반환합니다.  DAYOFYEAR('2024-08-27')  `240` 
LAST_DAY()  주어진 날짜의 해당 월의 마지막 날짜를 반환합니다.  LAST_DAY('2024-08-15')  `2024-08-31` 
ADDDATE()  날짜에 지정된 기간을 더합니다.  ADDDATE('2024-08-27', INTERVAL 10 DAY)  `2024-09-06` 
SUBDATE()  날짜에서 지정된 기간을 뺍니다.  SUBDATE('2024-08-27', INTERVAL 10 DAY)  `2024-08-17` 
TIMESTAMP()  날짜와 시간을 하나의 타임스탬프로 결합합니다.  TIMESTAMP('2024-08-27', '14:30:00')  `2024-08-27 14:30:00` 
TIMEDIFF()  두 타임스탬프 간의 차이를 지정된 단위로 반환합니다.  TIMESTAMPDIFF(DAY, '2024-08-01', '2024-08-27')  `26` 
TO_DAYS()  주어진 날짜를 연속된 일수로 변환합니다.  TO_DAYS('2024-08-27')  예: `750000`
FROM_DAYS()  연속된 일수를 날짜로 변환합니다.  FROM_DAYS(750000)  `2024-08-27` 
STR_TO_DATE()  지정된 형식의 문자열을 날짜로 변환합니다.  STR_TO_DATE('27-08-2024', '%d-%m-%Y')  `2024-08-27` 
DATE_FORMAT()  날짜를 지정된 형식으로 변환하여 반환합니다.  DATE_FORMAT('2024-08-27', '%Y/%m/%d')  `2024/08/27` 
MAKEDATE()  주어진 연도와 연중 몇 번째 날인지로 날짜를 생성합니다.  MAKEDATE(2024, 240)  `2024-08-27` 
MAKETIME()  주어진 시, 분, 초로 시간을 생성합니다.  MAKETIME(14, 30, 0)  `14:30:00` 
SEC_TO_TIME()  초를 시간으로 변환하여 반환합니다.  SEC_TO_TIME(3661)  `01:01:01` 
TIME_TO_SEC()  시간을 초로 변환하여 반환합니다.  TIME_TO_SEC('01:01:01')  `3661` 

 

 

 

4. 논리 함수

논리 함수는 조건을 이용할 때 사용됩니다. 아래 함수들을 이용해서 특정 조건이 참인지 거짓인지에 따라 결과를 다르게 처리할 수 있습니다.

함수명 설명 예시 결과
IF() 조건에 따라 다른 값을 반환합니다.  IF(1<2,'True','False')  `True` 
CASE WHEN  여러 조건을 평가하여 맞는 값을 반환  CASE WHEN age >= 18 THEN '성인' ELSE '미성년자' END  나이에 따라 '성인' 또는 '미성년자' 
IFNULL()  첫 번째 인수가 NULL이면 두 번째 인수를 반환하고, 그렇지 않으면 첫 번째 인수를 반환합니다.  SELECT IFNULL(NULL, 'Default');  `'Default'` 
NULLIF()  두 인수가 같으면 NULL을 반환하고, 그렇지 않으면 첫 번째 인수를 반환합니다.  SELECT NULLIF(1, 1);  `NULL` 
COALESCE()  인수 목록에서 첫 번째 NULL이 아닌 값을 반환합니다.  SELECT COALESCE(NULL, NULL, 'MySQL');  `'MySQL'` 
GREATEST()  주어진 인수들 중에서 가장 큰 값을 반환합니다.  SELECT GREATEST(1, 3, 7, 2);  `7` 
LEAST()  주어진 인수들 중에서 가장 작은 값을 반환합니다.  SELECT LEAST(1, 3, 7, 2);  `1` 
ELT()  주어진 인덱스에 해당하는 문자열을 반환합니다.  SELECT ELT(2, 'red', 'green', 'blue');  `'green'` 
INTERVAL()  주어진 값이 지정된 값 사이에 어디에 위치하는지 반환합니다.  SELECT INTERVAL(5, 1, 4, 6, 8);  `2` 
STRCMP()  두 문자열을 비교하여 같으면 0, 첫 번째가 크면 1, 두 번째가 크면 -1을 반환합니다.  SELECT STRCMP('abc', 'abd');  `-1` 

 

5. 집계 함수

집계 함수는 여러 행의 데이터를 Grouping해서 결과를 산출합니다. 예를 들어, 직원들의 평균 연봉을 계산할 때 집계 함수를 사용합니다.

함수명 설명 예시 결과
SUM()  숫자 열의 합계를 반환합니다.  SELECT SUM(price) FROM products;  전체 `price`의 합계 
AVG()  숫자 열의 평균값을 반환합니다.  SELECT AVG(score) FROM students;  전체 `score`의 평균 
COUNT()  행의 개수를 셉니다.  SELECT COUNT(*) FROM orders;  전체 행의 수 
MAX()  주어진 열에서 최대값을 반환합니다.  SELECT MAX(salary) FROM employees;  최대 `salary` 값 
MIN()  주어진 열에서 최소값을 반환합니다.  SELECT MIN(age) FROM customers;  최소 `age` 값 
GROUP_CONCAT()  그룹화된 결과를 문자열로 연결하여 반환합니다.  SELECT GROUP_CONCAT(name) FROM students;  `name`들을 쉼표로 연결 
COUNT(DISTINCT)  고유한 값의 개수를 셉니다.  SELECT COUNT(DISTINCT department)  FROM employees;  고유한 `department`의 수 
STDDEV()  집합의 표준편차를 반환합니다.  SELECT STDDEV(salary) FROM employees;  `salary`의 표준편차 
VARIANCE()  집합의 분산을 반환합니다.  SELECT VARIANCE(salary) FROM employees;  `salary`의 분산 
BIT_AND()  모든 행의 비트 AND 연산 결과를 반환합니다.  SELECT BIT_AND(flags) FROM settings;  모든 `flags`의 비트 AND 
BIT_OR()  모든 행의 비트 OR 연산 결과를 반환합니다.  SELECT BIT_OR(flags) FROM settings;  모든 `flags`의 비트 OR 
BIT_XOR()  모든 행의 비트 XOR 연산 결과를 반환합니다.  SELECT BIT_XOR(flags) FROM settings;  모든 `flags`의 비트 XOR 
JSON_ARRAYAGG()  JSON 배열 형식으로 그룹화된 결과를 반환합니다.  SELECT JSON_ARRAYAGG(name) FROM students;  이름들의 JSON 배열 
JSON_OBJECTAGG()  JSON 객체 형식으로 키-값 쌍을 그룹화하여 반환합니다.  SELECT JSON_OBJECTAGG(id, name) FROM students;  ID와 이름의 JSON 객체 

 

'Computer Science > DB' 카테고리의 다른 글

[MySQL] truncate(), round()  (1) 2025.02.05
SQL Joins 도식  (1) 2025.02.05
[스크랩] MySQL 완전 삭제 후 설치 방법  (0) 2025.02.03
[SQL] 쿼리 문법 정리  (1) 2025.01.07

MySQL 설치 시에 예전에 사용했던 것들이 남아있으면 새로 설치하는 버전에 문제가 될 수 있다. 그래서 미리 다 삭제하고 설치하여야 한다. 다음과 같은 순서로 진행하면 된다.

1. MySQL Installer에서 삭제

(Installer가 없다면 스킵)


(1) Remove 버튼을 누른다.


(2) 항목 전체 선택 후 next 클릭.


(3) finish 나올 때까지 진행

2. 제어판에서 mysql 관련 프로그램 삭제

전부 삭제하면 된다.

3. C드라이브에 남아있는 mysql관련 폴더 삭제

(1) 아래와 같은 폴더들을 전부 삭제한다.

  • C:\Program Files -> mysql
  • C:\Program Files (x86) -> mysql
  • C:\ProgramData -> mysql

(1-참고) ProgramData폴더는 숨김 폴더이므로 폴더 보기에서 숨김 항목 표시를 체크한다.

4. MySQL Community 설치

(1) https://dev.mysql.com/downloads/ 링크로 들어가서 아래에서 두번째 항목을 선택한다.


(2) 크기가 더 큰 두번째 항목 다운로드


(3) 다운로드 완료 후 Installer를 실행하기
(4) Developer Default 선택 후 next 클릭


(5) 계속 execute/next 눌러서 진행(Accounts and Roles 전까지)

 

 

 

 


(6) root 비밀번호 설정하고 유저 추가하기

비밀번호 절대 잊지 말기!


(7) 비밀번호 체크하는 페이지 나오기 전까지 쭉 execute/next 눌러서 진행
(8) 비밀번호 체크하고 이후로도 쭉 execute/next 눌러서 진행

 

 

[원문출처] https://velog.io/@hyeddo/MySQL-완전-삭제-후-재설치하기

'Computer Science > DB' 카테고리의 다른 글

[MySQL] truncate(), round()  (1) 2025.02.05
SQL Joins 도식  (1) 2025.02.05
[스크랩] MySQL 함수 99개 총정리  (2) 2025.02.04
[SQL] 쿼리 문법 정리  (1) 2025.01.07

 

버블정렬

개요

인접한 배열의 두 수를 선택해, 그 두 수가 정렬되어 있지 않다면 두 수를 정렬하는 방식

 

개념

루틴: 인덱스 0부터 n-1까지 순차적으로 n번 비교하고, 만약 정렬이 필요하다면 Swapping함

루틴 1번이 돌 때 1개의 숫자가 정렬됨 (가장 큰 수가 n(가장 마지막)에 고정되고, 그 다음으로 큰 수가 n-2 자리에...)

 

시간 복잡도

O(n^2)

-> 배열의 크기가 n일 때 n번 비교(&스와핑)

 


BubbleSort.java
|-- main(String[] args)
|-- void bubbleSort()
public class BubbleSort {
    public static void main(String[] args) {
        bubbleSort();
    }

    static void bubbleSort() {
        int[] arr = createIntArray(10000);

        long startTime = System.currentTimeMillis();
        // 현재 시간 기준의 Milli seconds

        for (int i=0; i<arr.length; i++) {
            for (int j=0; j<arr.length-1; j++) {
                if (arr[j] > arr[j+1]) {    // 부등호 뒤집으면? 내림차순
                    swap(arr, j, j+1);
                }
            }
        }

        long endTime = System.currentTimeMillis();

        System.out.println(Arrays.toString(arr));
        System.out.printf("소요시간: %s 밀리초\n", endTime - startTime);
    }
}

 

유틸

TestUtil.java
|-- int[] createIntArray(int size)
|-- void swap(int[] arr, int i, int j)
import java.util.Random;

public class TestUtil {
    
    public static int[] createIntArray(int size) {
        int[] arr = new int[size];
        Random random = new Random();

        for (int i = 0; i < arr.length; i++) {
            arr[i] = random.nextInt(size);
        }
        return arr;
    }

    public static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}

 

이진 탐색 (Binary Search)

개요

  • 정렬된 데이터를 대상으로만 사용할 수 있다 ★
  • 반복적 접근: 배열의 중간 위치(값 기준X)를 기준으로 탐색을 진행하고, 목표값(검색 타겟)이 중간 값보다 작거나 큰지에 따라 탐색 범위를 줄임.

개념

투 포인터 방식을 사용함 ★

  1. 초기 설정: 시작 인덱스(left)와 끝 인덱스(right)를 설정합니다. 
    처음에는 left는 배열의 첫 번째 인덱스, right는 마지막 인덱스입니다.
  2. 중간 값 계산: 중간 인덱스(mid)를 계산합니다. 이는 mid = (left + right) / 2로 구할 수 있습니다.
  3. 비교:
    - 만약 arr[mid]가 찾고자 하는 값(target)과 같다면, 해당 인덱스를 반환합니다.
    - 만약 arr[mid]가 target보다 크다면, 탐색 범위를 왼쪽 절반으로 줄입니다 (right = mid - 1).
    - 만약 arr[mid]가 target보다 작다면, 탐색 범위를 오른쪽 절반으로 줄입니다 (left = mid + 1).
  4. 반복: 위 과정을 left가 right보다 작거나 같은 동안 반복합니다.
  5. 결과: target을 찾지 못한 경우 -1을 반환합니다.

시간복잡도

  • 최악의 경우 : O(log n) - 배열의 크기가 n일 때, 탐색 범위가 매번 반으로 줄어들기 때문에 로그 시간 복잡도를 가짐.
  • 최선의 경우 : O(1) - 중간 값이 바로 찾고자 하는 값인 경우
  • 평균의 경우 : O(log n)

코드 구현
static int binarySearch(int[] arr, int target) {
    // 투 포인터
    int left = 0;
    int right = arr.length - 1;

    // 종료 조건: 포인터끼리 만날 때까지 (모두 탐색함)
    while (left <= right) {
        int mid = (left + right) / 2;       // 중간 위치 설정
        if (arr[mid] == target) return mid; // 반환 조건: mid가 target이 될 때 반환함

        // mid의 위치를 기준으로 포인터를 옮김
        if (target < arr[mid]) {
            right = mid -1;
        } else if (target > arr[mid]) {
            left = mid + 1;
        }
    }

    // 디폴트 반환: 모든 데이터를 탐색했음에도 배열 내에 target이 존재하지 않음
    return -1;
}

 

테스트 코드
// Test Run
public static void main(String[] args) {
    int[] arr = {1,3,5,9,10,11,14,29};
    System.out.println(binarySearch(arr, 3));
}

 

+ Recent posts