MariaDB

08/26, 08/27

  • proxy server: outbound

  • firewall : inbound

  • oracle 사용시 비예약어는 case-sensitive

  • mariadb x case-sensitive

  • docker ps -a docker ps

  • db server: 물리적으로 컴퓨터 1대 이상

  • db서버에서는 db작업x , 접속프로그램 사용

  • 접속프로그램: api서버 이용해 사용자가 일반적으로 사용

  • 오픈api: 개발자가 api 사용하게 해줌

  • utf8-mb4: 이모지

DDL, DML, DCL

  • ddl: select
  • dml:
  • dcl: grant, revoke (operator, cloud engineer)
  • dcL: commit, rollback, savepoint (개발자)

관리기능 (operator)

  • mysql: root가 db 생성
  • oracle: user가 db 생성

db생성

create database 이름;

db 사용

use 이름;
  • null: 가르키는게 없다
  • undefined: 정의되지 않음

쿼리 실행순서

  • 5 select : 열단위추출 1 from
    2 where : 테이블에 조건 적용해 행단위 추출
    3 group by : where 절 결과 그룹화
    4 having : 그룹화 이후 행단위 추출
    6 order by : 정렬
    7 limit : 추출하고자 하는 데이터의 행 설정

distinct, group by, LIKE, IN

  • and 사용 시 더 적은 행이 앞에
  • or 은 더 많은행이 앞에

LIKE

  • %: 글자수상관X
  • _: 1글자

BETWEEN

  • a between b (a<=x<=b)

IN

  • 집계함수는 그룹화 한 이후에 사용이 가능

  • 집계함수는 NULL 데이터는 제외하고 연산

  • count(AGE): 2

  • count(*): 모든 컬럼이 NULL인 경우 제외

  • 표준 SQL에서는 GROUP BY를 사용하는 경우 SELECT 절에는 GROUP BY에 사용한 컬럼과 집계함수를 이용한 데이터만 기재가능

  • mysql/mariadb는 GROUP BY 이외의 컬럼을 SELECT에 사용가능, 첫번째 데이터가 출력

  • having 은 group by 다음

SUBQUERY

  • 다른 쿼리 안의 쿼리

  • 한번만 실행

  • ( ) 로 감싸야

  • WHERE, FROM(Inline View), INSERT, DELETE, UPDATE절에 사용가능

  • 단일행 서브쿼리(반드시 1개행 리턴)와 다중행 서브쿼리(2개 이상 행 리턴)로 분류

  • 다중행 서브쿼리는 단일행 연산자(=, <>, >, <, >=, <=) 사용불가

  • 다중 행 서브 쿼리는 IN, ANY, ALL, EXIST 같은 다중 행 연산자 사용

  • SELECT 절에서 출력해야 하는 컬럼이나 연산식이 2개 이상의 테이블의 컬럼을 이용하는 경우 서브쿼리 사용 불가

  • 테이블을 합쳐서 조회

  • 수직적으로 합치기 : SET

  • 테이블의 구조는 다르지만 동일한 의미 갖는 컬럼 존재해 이 컬럼 기준으로 수평 합치기 : JOIN

JOIN 종류

  • cartesian product : 조인 조건 없이 from 절에 테이블 이름 두개 이상 기재한 경우

  • equi join : =연산자 사용

  • non equi join : =이외 연산자 사용 컬럼 비교 시

  • inner join : equi join과 동일, 양쪽 테이블 모두에 존재하는 데이터만 결합

  • outer join : 한쪽 테이블에만 존재하는 데이터도 결합(left, right, full)

  • self join : 동일한 테이블 조인, 테이블 이름 수정 필요, 하나의 테이블에 동일한 컬럼이 2개 이상 존재하는 경우 사용

  • natural join : 조인 조건에 해당하는 컬럼의 이름이 같은 경우 생략

  • ansi join: cross join, cartesian product, from 테이블이름 cross join 테이블이름

  • 조인 조건에서 컬럼이름이 동일한 경우는 on 대신 using이라고 쓰고 조인이름만 기술하는 것도 가능

  • 이 경우 조인 조건을 생략하고 inner 대신에 natural을 붙여도 됩니다.. 이경우에는 조인에 참여하는 컬럼이 한번만 출력됩니다.

select ename, dname, loc from emp inner join dept on emp.deptno=dept.deptno;
select ename, dname, loc from emp inner join dept using (deptno);
select ename, dname, loc from emp natural join dept;