성장일기

내가 보려고 정리하는 공부기록

데이터베이스/MariaDB

마리아DB (1) _ DB설치, 기본명령어

와나나나 2024. 5. 21. 00:10
728x90

학교에서 데이터베이스를 배울 때에는 Mysql을 사용했었다. 그러면서 마리아DB의 존재에 대해서는 알고 있었는데, 이렇게 운이 좋게 배울 수 있게 되었다.

 

마리아DB와 MySQL 모두 표로 데이터를 관리하는 관계형 DB라서 비슷하게 느껴졌는데 문득 차이점이 궁금해져 찾아보았다.

 

마리아DB와 MySQL은 완전 별개의 db가 아니었다. MySQL이 Oracle Corporation에 인수되고 라이선스 및 배포 문제가 생기자, MySQL을 수정해 MariaDB를 만든 것이다. 둘이 비슷하게 느낀 것도 MySQL 유저가 번거로움 없이 MariaDB로 전환할 수 있도록 하기 위해 동일한 클라이언트 프로토콜, 클라이언트 API 등을 사용하기 때문이었다.

 

그래도  MariaDB가 MySQL에 비해 쿼리 속도가 빠르고, PL/SQL을 지원하는 등의 차이점이 존재한다고 한다. 자세한 것은 aws 페이지에 정리되어있으니 참고하면 좋을 거 같다.

https://aws.amazon.com/ko/compare/the-difference-between-mariadb-vs-mysql/

 

MariaDB와 MySQL 비교 - 오픈 소스 관계형 데이터베이스 간의 차이점 - AWS

MySQL과 MariaDB는 모두 오픈 소스 데이터베이스 기술입니다. 이들 데이터베이스를 사용하여 행과 열이 있는 표 형식으로 데이터를 저장할 수 있습니다. MySQL은 가장 널리 채택된 오픈 소스 데이터

aws.amazon.com

 

그럼 본격적으로 배운 내용을 정리해보자.

 


1. Maria DB 설치와 버전확인

설치는 MariaDB 페이지에 가서 하면 된다. 설치한 후에 mariadb의 버전을 확인하려고 하면 뜨지 않는데, 버전을 확인하기 위해서는 시스템 환경변수 편집에 들어가서 설치한 마리아DB를 설정해주어야 한다.

 

참고로 설치시 포트번호와 비밀번호는 잘 기억해두어야 한다. 실제 필드에선 비밀번호는 복잡하게, root로 바로 접근은 허용하지 않도록 해야한다고 한다.

 

시스템 환경변수 편집

 

환경변수에다가 마리아DB의 위치를 넣어주기만 하면 된다. 그래서 설치할 때 어디에 설치되었는지 잘 확인해두어야 한다.

 

터미널에 위 명령어를 치면, 버전을 확인할 수 있다. 

 

수업에서는 따로 테스트코드를 제공해주어서 깃허브로 받아오고 루트계정으로 접속하여 employees.sql 파일을 만들었다.

  • 루트 계정으로 접속 : mariadb -u root -p
  • 만들기 : source employees.sql;

여기까지 하고 나면, 마리아DB를 설치하면서 설치된 HeidiSQL에 접속해준다.

 

신규를 눌러 이름을 설정하고, 아까 마리아DB에서 받은 포트번호도 넣어주고, 암호도 작성해준 후 저장 → 열기를 해준다.

 

 

그럼 이런 창이 열린다. 쿼리라고 써있는 곳에서 코드를 작성할 수 있고, 실행하려면 F9를 누르면 된다.

root 사용자는 MariaDB의 모든 작업을 할 수 있기 때문에 실습에 필요한 일반 사용자를 생성하고 생성한 일반 사용자에 적합한 권한을 부여한다.

 

 

2. 기본 명령어

 

데이터베이스의 기본인 CRUD 등은 나중에 DB 정리할 때 꼼꼼히 해보기로 하고, 여기에서는 가물가물했던 명령어나 까먹을 거 같은 명령어 위주로 정리하려고 한다.

 

DISTINCT

  • distinct 명령어는 select 문에서 한 번만 쓸 수 있음
  • 모든 열의 데이터가 동시에 같아야 생략이 가능함

 

✅ IFNULL

만약 데이터의 값이 null일 때, 이 값을 무엇으로 대체할지 정하는 함수

ex | ifnull(salary, 0) → salary값이 null이라면, 그 값을 0으로 대체

 

 

✅ BETWEEN

범위를 지정하는 함수로 A ≤ B AND B ≤ CB BETWEEN A AND C 는 같은 의미이다. 등호를 포함한다!

 

 

✅ LIKE

  • % : 0글자 이상을 의미
    • ex | SELECT * FROM employees WHERE address LIKE '서울%';
  • _ : 한 글자를 의미
    • ex | SELECT * FROM employees WHERE name LIKE '김_현';
  • _를 문자로서의 ‘_’로 인식하고 싶을 때 → \ 이용
SELECT emp_id, emp_name, email FROM employee 
WHERE email LIKE '__*\\*%'

 

_ 가 한 글자를 의미하는 게 아닌 문자로서의 ‘_’를 의미하게 해줌!

 

추가로 $를 사용할 수 있음

select * from employee 
where email like '___$_%' escape '$';

 

$ 뒤의 문자가 그대로 인식 됨

 

✅ DESC

내림차순 정렬할 때 쓰는 desc도 있지만, 테이블의 구조를 볼 때 사용하는 desc도 있다. (둘이 다름)

 

 

✅ GROUP BY와 HAVING

여러 개의 값들을 하나의 그룹으로 묶어서 처리하는 명령어이다. SUM, MAX, AVG같은 집계함수를 GROUP BY와 함께 사용한다. 이런 집계함수에 대해 조건을 걸어놓기 위한 명령어가 GROUP BY의 짝궁인 HAVING이다.

SELECT gender, COUNT(*)
FROM employees
GROUP BY gender
HAVING COUNT(*) >= 5;

 

 

✅ 별칭으로 ORDER BY 하기

 

별칭으로 쓰고 싶다면 작은 따옴표가 아닌 베틱( ` )을 사용해준다. ( 작은 따옴표를 사용하면 문자 자체를 인식해서 정렬이 되지 않는다 )

 

그럼 WHERE 절에서도 별칭을 이용할 수 있을까 ?

→ 안된다. 이는 실행 순서에 이유가 있는데, WHERE절이 SELECT절보다 빨리 실행되기 때문에 별칭을 알 수 없다.

→ ORDER BY에서 되는 이유는 ORDER BY가 마지막으로 실행되기 때문에 별칭을 사용할 수 있는 것!

 

 

✅ 문자열 붙이기 _ CONCAT(), CONCAT_WS()

  • CONCAT : 이어 붙이고 싶은 문자열을 인수로 넣어준다.
  • CONCAT_WS : 첫번째 인수에 이어붙일 때 쓰고싶은 문자열을 넣어

 

✅ 문자열 위치 반환하기 _ ELT(), FIELD, FIND_IN_SET, INSTR

  • ELT(위치, 문자열 1, 문자열 2,..) : 원하는 위치에 놓인 문자열 반환
  • FIELD(찾고싶은 문자열, 문자열 1, 문자열 2..) : 찾고싶은 문자열이 있는 위치 반환, 없으면 0반환
  • FIND_IN_SET(찾을 문자열, 문자열 리스트) : 문자열 위치 반환, 콤마로 구분되어야 하고 공백은 없어야 함
  • INSTR(기준 문자열, 부분 문자열) : 기준 문자열에서 부분 문자열을 찾아 그 시작 위치를 반환한다.

 

✅ 문자열 잘라내고 끼워넣기 _ INSERT()

  • INSERT(기준 문자열, 위치, 길이, 삽입할 문자열) : 기준 문자열의 위치부터 길이만큼을 지우고, 삽입할 문자열을 끼워넣는다.

 

 

✅ 공백 만들기 _ LPAD, RPAD

이 둘은 공백 만드는 방향차이이다.

  • LPAD(문자열, 총 문자열 길이) : 문자열을 넣고 남은 길이만큼을 왼쪽에 채운다.
    • 세번째 인자에는 무엇으로 채울지 정한다. 디폴트값은 공백
  • RPAD(문자열, 총 문자열 길이) : 문자열을 넣고 남은 길이만큼을 오른쪽에 채운다.

 

 

✅ 여백 지우기 _ TRIM, LTRIM, RTRIM

  • LTRIM(문자열) _ 왼쪽의 여백을 제거한다.
  • RTRIM(문자열) _ 오른쪽의 여백을 제거한다.
  • TRIM(문자열) _ 양쪽 모두의 여백을 제거한다.

→ BOTH FROM 을 이용하면 여백 대신 원하는 문자열을 지울 수 있고, 왼쪽 끝과 오른쪽 끝에서부터 검사하기 때문에 중간에 있는 알파벳은 지울 수 없다.

 

✅ 올림, 내림, 반올림 _ CEIL(), FLOOR(), ROUND()

  • ROUND : 반올림함, 두번째 인자에는 소수점 몇번째까지 반올림할지 넣을 수 있음
  • CEIL : 올림
  • FLOOR : 내림

→ CEIL, FLOOR는 두번째 인자가 없다

 


다음 게시글에서는 윈도우함수와 조인에 대해 다루어볼 예정이다!