0부터 시작하는 Maria DB 공부 - SQL 프로그래밍

Jaehong Lee·2022년 7월 18일
0
post-thumbnail

1. 쿼리의 결과 합

p. 282

  • UNION

    • UNION은 두 쿼리의 결과를 행으로 합치는 것이다
    • 사용 형식
      SELECT 문장 1
      UNION (ALL)
      SELECT 문장 2
      • UNION : 중복된 열은 제거되고, 데이터는 정렬
      • UNION ALL : 중복된 열까지 모두 출력
    • 단, 각 SELECT 문자의 결과 열의 개수와 데이터 형식도 열 단위로 같거나 서로 호환되는 데이터 형식이어야 한다
  • NOT IN

    • NOT IN 은 첫 번째 쿼리의 결과 중에서, 두 번째 쿼리에 해당하는 것을 제외
  • IN

    • 첫 번째 쿼리의 결과 중에서, 두 번째 쿼리에 해당하는 것만 조회하기 위해서 사용

2. SQL 프로그래밍 - 조건문

p. 284

  • IF ELSE

    • 조건에 따라 분기한다. BEGIN ~ END로 묶어준다
    • 먼저, ifProc 라는 프로시저가 존재하면 삭제한다. 프로시저, 인덱스와 같은 요소는 DROP으로 삭제해야 한다
    • DECLARE는 변수 선언에 사용되고, SET은 값을 넣을 때 사용한다
    • IF 조건 THEN ~ ELSE ~ END IF ; 로 조건문을 사용한다
    • 짝수 / 홀수를 구분하는 프로시저를 작성해보자
  • 날짜 및 시간 함수

    p. 242

    • ADDDATE / SUBDATE : 날짜를 기준으로 차이를 더하거나 뺀 날짜를 출력한다
    • CURDATE() / CURTIME() : 현재 연-월-일 / 사:분:초 를 출력해준다
    • SYSDATE() : 현재 연-월-일 시:분:초 를 한 번에 출력해준다
    • DATEDIFF ( 날짜 1 , 날짜 2 ) : 날짜 1 - 날짜 2 의 일 수 결과를 출력해준다

3. QUIZ 1

  • 실습했던 usertbl 에서 각 사용자들의 생년을 확인하여 올해가 짝수라면 생년이 짝수인 사람들의 정보 출력시 마지막 열에 "건강검진 대상자 입니다" 라고 출력하고, 만약 생년이 홀수라면 "내년 건강검진 대상자 입니다" 라고 출력하자

  • ROW_NUMBER() OVER(ORDER BY ~ ) "이름",

    • 합계나 평균등 집계함수의 결과를 GROUP BY 없이 출력하고 싶을때 사용할 수 있다. ( p. 252 참조 )

  • 이렇게 작성하면 된다. CASE 문을 통해 현재 날짜의 YEAR와 USER의 YEAR를 2로 나눈 나머지 값을 비교하여, 같으면 올해, 다르면 내년을 건강 검진 열에 출력하게 작성했다
  • ROW_NUMBER를 통해 태어난 연도를 기준으로 정렬하였다
  • 잘 출력된다

4. SQL 프로그래밍 - CASE

p. 287

  • 다중 분기를 위해 사용한다

    CASE
    WHEN ~ THEN ~
    ELSE ~
    END CASE ;

    • 위 형태로 사용한다

5. 테이블 조작

p. 330

  • 테이블 삭제 : DROP TABLE 테이블 이름 ;

  • 테이블 수정

    • 테이블 수정은 ALTER TABLE을 사용한다
    • 생성된 테이블에 무엇인가 추가/변경/수정/삭제 하는 것은 모두 ALTER TABLE을 사용한다
  • 테이블 열 추가

    • 일반적으로 열을 추가하면 맨 마지막에 추가된다. 이때 뒤에 DEFAULT를 통해 기본 값을 설정하거나, NULL을 통해 NULL 값을 허용할 수 있다
    • AFTER 키워드를 통해 추가할 열의 위치를 설정할 수 있다
  • 테이블 열 삭제

    • delete를 통해 삭제하면, 열은 그대로 있고, 안에 DATA만 삭제된다. 허나, DROP을 통해 삭제하면, 열도 삭제된다
  • 테이블 열 이름 및 DATA 형식 변경

    • 다음과 같이 열 이름과 데이터 형식을 변경할 수 있다

6. QUIZ 2

  • 사용자 테이블에 추가로 point 열을 추가하고, 3~4명에 대하여 점수를 입력하시오. 사용자의 id와 mobile 2를 변수에 담고, 여기에 매치하는 학생의 점수를 출력하되, 아래와 같이 출력되게 하시오

    • 이름 / 점수 / 합격 여부

  • point 열을 추가한다
  • 몇몇 user에게 point를 update 해준다
  • 두 가지를 변수에 담아 EXISTS로 존재하는지 여부를 CHECK하고, 있다면 CASE 문을 통해 해당 DATA에 합격 여부를 담아 함께 출력해준다. USER가 없다면 '사용자 없음' 을 출력한다
  • 사용자가 있을 경우
  • 사용자가 없을 경우
  • 불합격일 경우
  • 잘 작동한다

7. DB 클러스터링

  • 각 DB들이 자원을 공유하여 한 DB 처럼 동작하게 해서 회원가입한 유저가 접속한 WEB 서버가 바뀔 경우 해당 유저가 회원가입 했다는 정보가 유지되게 한다

8. SQL 프로그래밍 - WHILE

p. 292

  • 해당 < 부울 식 > 이 참인 동안에는 계속 반복되는 반복문

    WHILE < 부울 식 > DO
    SQL 명령문들...
    END WHILE ;

    • 해당 형태로 사용한다
  • 인스턴스 생성 스크립트에서

    WHILE TRUE DO
    인스턴스가 만들어져 있는가?
    아닐 경우 - 출력
    있을 경우 - BREAK ;
    sleep 3;
    DONE

    • 할 수도 있다

9. QUIZ 3

  • 1~100 사이의 숫자 중 5배수의 총 합을 구하시오

  • 다음과 같이 작성하면 된다
  • 결과가 잘 나온다

10. DB 총 정리

  • 공부한 것!

    • 데이터 베이스 생성하기
    • 테이블 생성하기
    • INSERT 해서 데이터 입력하기
    • SELECT 에서 조건절 이용하여 원하는 데이터 출력하기
    • PK / FK 지정
    • INNER JOIN
    • 간단한 VIEW 생성
    • 간단한 TRIGGER 생성
  • 해야하는 것!

    • DATA REPLICATION

    • GALERA CLUSTERING : 여러 대의 데이터 베이스를 클러스터로 묶어 마치 한 대의 DB 서버 처럼 동작시키는 기술
    • 프로메테우스&그라파나
      • 프로메테우스 : 대상 시스템으로부터 각종 모니터링 지표를 수집하여 저장하고 검색할 수 있는 시스템
      • 그라파나 : 프로메테우스를 비롯한 여러 데이터들을 시각화해주는 모니터링 툴
profile
멋진 엔지니어가 될 때까지

0개의 댓글