MySQL (DDL, DML, DQL)

gyoeun.log💚·2022년 8월 15일
0

📖데이터베이스

목록 보기
2/2
post-thumbnail

MySQL이란?

  • 오픈 소스 데이터베이스로, MySQL AB사가 개발하여 배포/판매하고 있는 관계형 데이터베이스 관리 시스템이다.(단, 상업적 이용시 상업라이센스를 필히 구매해야한다.)
  • SQL중에서 DDL을 사용하여 테이블 객체를 생성하고, 수정하고, 삭제하는 작업이 가능하며, DML로 테이블 객체에 데이터를 추가, 수정, 삭제하는 작업이 가능하다. (즉, 데이터를 조작하는 쿼리문) 또한 DQL로는 데이터를 조회하는 작업이 가능하다.

DDL (Data Definition Language)

  • DDL이란?

    • 스키마 내의 객체를 정의하고 관리할 때 사용되는 쿼리문을 의미한다.
    • 대표적인 DDL은 CREATE, ALTER, DROP, TRUNCATE, RENAME 등이 있다.
    • DDL로 데이터를 구성하는 논리적인 구조(데이터베이스 또는 테이블)를 추가하고 수정하고 삭제할 수 있다.
    • 추가로 메타데이터(데이터에 대한 데이터)를 다루는 것이 가능하다.

    CREATE (테이블 생성)

    CREATE TABLE <테이블명> 으로 테이블을 생성할 수 있다.

    ALTER (테이블 수정)

    • ADD: 열 추가
      ALTER TABLE <변경하고자하는 테이블명> ADD <열이름> <자료형> <제약조건>
      ex. users라는 테이블에 ‘age’라는 열을 추가하는 경우
      ALTER TABLE users ADD age INT NOT NULL;
    • DROP: 열 삭제
      ÀLTER TABLE <변경하고자하는 테이블명> DROP <삭제할 열의 이름>;
      ❌주의사항
      • 테이블 객체 안에 모든 데이터도 삭제되기 때문에 백업을 해둬야한다.
      • 참고로, 테이블은 그대로 두고 데이터만 삭제하는 경우 DML(DELETE 혹은 TRUNCATE)를 사용할 수 있다.
    • MODIFY: 자료형 변경
      ALTER TABLE <변경하고자하는 테이블명> MODIFY <열 이름> <변경자료형> <제약조건>;

    DROP (테이블 삭제)

    • 테이블을 삭제하면 데이터도 함께 삭제된다.
      DROP TABLE <테이블명>

    TRUNCATE (테이블 구조는 남기고, 로우만 삭제)

    TRUNCATE TABLE <테이블명>

    RENAME (테이블 이름 변경)

    RENAME TABLE <기존 테이블명> TO <변경 테이블명>

    👉 이 후 desc 테이블이름; 라는 쿼리문 실행 시 변경된 테이블 구조 출력 및 확인이 가능하다.


DML (Data Manipulation Language)

  • DML이란?

    • 데이터를 조작하는 쿼리문이다.
    • 대표적인 DML은 INSERT, UPDATE, DELETE 등이 있다.

    INSERT (데이터 추가)

    • 일반적으로 INSERT INTO로 많이 작성된다.
      INSERT INTO <테이블명> (컬럼1,컬럼2...) VALUES (data1-1, data1-2, ... ), (data2-1, data2-2, ... );
     ex.
      mysql> INSERT INTO users (name, email, password, age) VALUES ("김코드", "abc123@email.com", "password", 20);
     ex.
     //pk를 참조하고 있는 fk가 있을 경우 반드시 가져와서 데이터를 추가할 수 있다. 아래 예시에선 user_id
          
      mysql> INSERT INTO posts (title, content, user_id) VALUES ("안녕하세요", "반갑습니다", 1);

    UPDATE (데이터 수정)

    • WHERE문은 프로그래밍 언어의 if 문이라고 생각하면 된다.
      UPDATE <테이블명> SET <컬럼이름>=<새로운데이터> WHERE <조건>;
      ex.
       mysql> UPDATE posts SET content='날씨가 좋네요!' WHERE user_id=1 AND id=1; 
           
       //-> 이러면 user_id 1이 작성한 posts.id 1이 수정 된다.

    DELETE (데이터 삭제)

    DELETE FROM <테이블명> WHERE <조건>;

    mysql> DELETE FROM posts WHERE user_id = 1;
         
    -> userid 1 이 작성한 post가 모두 삭제된다.

DQL (Data Query Langusge)

  • DQL 이란?

    • 테이블에 저장된 데이터를 조회하는데 사용되는 쿼리문이다.
    • 대표적인 DQL은 SELECT가 있다.
    • INSERT나 UPDAtE같은 작업과 비교해 봤을 때, 애플리케이션에서 사용되는 쿼리중에서도 가장 비율이 높고, 성능 이슈 가능성이 많다고 볼 수 있다.
    • 테이블에 저장된 데이터를 가져오는 핵심 쿼리문

    내부결합

    • 기준이 되는 테이블과 join이 걸리는 테이블 양쪽 모두에 결합조건이 매칭되는 로우만 검색하는 방법

      SELECT <컬럼1, 컬럼2...> FROM <기준테이블> INNER JOIN <결합테이블> ON <조건>

      ex.
      //아래 컬럼들을 가지고 오고,
      mysql> SELECT u.id, u.name, p.id, p.title, p.user_id FROM 
      //users테이블을 기준으로 잡는다.(alias 설정과 함께)
      //그 다음 INNER JOIN키워드를 사용해서 내부결합에 사용될 테이블을 적어준다 -> users테이블을 기준으로 posts테이블을 내부결합하겠다는 의미
      //그리고 ON키워드를 사용해서 아래 조건에 해당하는 레코드들만 출력하도록 SELECT문을 완성할 수 있다.
      users u INNER JOIN posts ON u.id = p.user_id;
      
      //완성 코드
      mysql> SELECT u.id, u.name, p.id, p.title, p.user_id FROM users u INNER JOIN posts p ON u.id = p.user_id;

    외부 결합

    • 내부 결합과 함께 자주 사용되는 결합으로 join하는 여러 테이블에서 한쪽에는 데이터가 있고, 한쪽에는 데이터가 없는 경우 데이터가 있는 쪽 테이블을 기준으로 모두 출력하는 결합 방법

      mysql> SELECT <컬럼1,컬럼2...> FROM <기준테이블> LEFT OUTER JOIN <결합테이블> ON <조건>;

      ex.
      //users테이블이 LEFT JOIN에서 기준이 되는 left테이블이라고 보면된다.
      mysql> SELECT u.id, u.name, u.job_id, j.id, j.job FROM users u
      //(OUTER는 생략해도됨) 그 후 조인하고자 하는 테이블의 이름을 적는다.(alias 설정과 함께)
      //그 후 ON키워드로 users테이블에 있는 job_id와 jobs테이블에 있는 id를 기준으로 LEFT OUTER JOIN한다.
      LEFT OUTER JOIN jobs j ON u.job_id = j.id;
      
      //완성코드
      mysql> SELECT u.id, u.name, u.job_id, j.id, j.job FROM users u LEFT OUTER JOIN jobs j ON u.job_id = j.id;
      
      //이렇게 하면 users테이블에 대한 모든 정보를 포함하여 jobs테이블과 결합하게 된다.
      ex. FULL OUTER JOIN
      //두개의 테이블에 모든 데이터 결합방법
      //LEFT OUTER JOIN과 RIGHT OUTER JOIN에 UNION키워드를 사용하여 mysql에서 구현할 수 있다.
      mysql> SELECT u.id, u.name, u.job_id, j.id, j.job FROM users LEFT OUTER JOIN jobs j ON u.job_id = j.id
      //여기서 UNION키워드를 사용하고, 앞에 SELECT~FROM까지를 가져와서 users테이블에 있는 job_id와 jobs테이블에 있는 id를 기준으로 RIGHT OUTER JOIN까지 해주면 완성!
      UNION SELECT u.id, u.name, u.job_id, j.id, j.job FROM users RIGHT OUTER JOIN jobs j ON u.job_id = j.id
      
      //완성코드
      mysql> SELECT u.id, u.name, u.job_id, j.id, j.job FROM users LEFT OUTER JOIN jobs j ON u.job_id = j.id     UNION SELECT u.id, u.name, u.job_id, j.id, j.job FROM     users RIGHT OUTER JOIN jobs j ON u.job_id = j.id

0개의 댓글