MySQL | DDL, DML, DQL 쿼리문 사용하기

19482 단어 DMLDatabaseDDLDQLDDL

SQL이란?
👉 Structured Query Language의 약자, 구조화 질의어
SQL은 관계형 데이터베이스에서 자료를 관리하기 위해 설계된 언어이다.

MySQL이란?
세계에서 가장 많이 쓰이는 오픈 소스의 관계형 데이터베이스 관리 시스템(RDBMS)이다.

데이터베이스를 만들고 관리하는데에 이와 같은 관리 시스템(RDBMS)을 이용한다.

데이터베이스를 조작하기 위한 쿼리문은 DDL, DML, DQL 세 가지 종류가 있다.

DDL

👉 Data Define Language 의 약자

  • schema의 형태를 정의할 수 있는 쿼리문이다.
  • 스키마란 데이터의 논리적인 구조(DB,테이블)이다.
  • 대표적으로 CREATE, ALTER, DROP이 있다.
  • DDL은 데이터의 논리적인 구조(DB 또는 테이블)를 추가하고 수정하고 삭제한다.

실습

1. 데이터베이스 만들기

데이터베이스 접속

$ mysql -u root -p

데이터베이스 만들기

CREATE DATABASE my_favorite_artists;

만든 데이터베이스 확인

SHOW DATABASES; # 현재 MySQL 에 저장된 데이터베이스를 볼 수 있다.

데이터베이스 사용

USE my_favorite_beverages; #생성한 데이터베이스에 접근

SHOW tables; #해당 데이터베이스에 저장된 데이터 보기

2. 테이블 만들기

연습용으로 좋아하는 아티스트 정보가 담긴 테이블노래의 정보가 담긴 테이블을 만들려고 한다. 아티스트와 노래 테이블은 1:N(일대다) 관계이다.
아래와 같은 구조로 만들려고 한다.

테이블 생성

  • 아티스트 정보가 담긴 테이블 만들기
    CREATE TABLE artists 
    (
      id INT NOT NULL AUTO_INCREMENT, # id 칼럼을 생성 : 정수, NULL 허용안함, 값은 1씩 자동증가
      name VARCHAR(100) NOT NULL, # name 칼럼을 생성 : 100의 크기인 문자열, NULL 허용 안함
      PRIMARY KEY (id) # 이 테이블의 Primary Key 를 id 로 설정
    ); # 쿼리문은 ; 로 구분되기 때문에 엔터를 쳐서 쿼리문을 멀티라인으로 작성할 수 있다.

  • 노래 정보가 담긴 테이블 만들기 (외래키 지정하는 방법)
    CREATE TABLE songs
    (
      id INT NOT NULL AUTO_INCREMENT,
      title VARCHAR(100) NOT NULL,
      lyrics VARCHAR(2000),
      artist_id INT,
      PRIMARY KEY (id),
      FOREIGN KEY (artist_id) REFERENCES artists (id) # 외래키를 걸어줄 칼럼과 참조할 테이블과 칼럼을 순서대로 적어줍니다.
    );

테이블 생성 확인

DESC artists; #Description을 축약한 명령어로 테이블 정보를 보여준다
DESC songs; #songs 테이블 정보를 보여준다
  • artist 테이블이 잘 생성되었다.

  • songs 테이블이 잘 생성되었다.
    여기서 key 열에 MUL(multiple)은 외래키라는 의미이다. 이처럼 다른 테이블의 기본 키(PRI)를 참조하면 MUL로 표시한다.

SHOW tables; #방금 만든 테이블들을 확인한다.

DML

👉 Data Manipulation Language 의 약자

  • 데이터를 조작할 수 있는 쿼리문이다.
  • 대표적으로 INSERT, UPDATE, DELETE이 있다.
  • INSERT는 테이블에 데이터를 넣는다.
  • UPDATE는 테이블에 들어간 데이터를 수정한다.
  • DELETE는 테이블에 들어간 데이터를 삭제한다.

실습

1. 데이터 추가하기

INSERT INTO artists (name) VALUES ('Radio Head'); 
#artists 테이블의 name에 'Radio Head'값을 추가하겠다는 의미이다.
INSERT INTO artists (name) VALUES ('Pink Floid');
INSERT INTO artists (name) VALUES ('새소년');
SELECT * FROM artists; #테이블 전체를 조회해서 데이터가 잘 들어갔나 확인

2. 데이터 수정하기

Pink Floid의 철자를 Pink Floyd로 수정하려고 한다.

UPDATE artists SET name='Pink Floyd' WHERE id=2;
#UPDATE [수정할테이블] 
#SET [바꾸려는 값이있는 칼럼] = [업데이트할 값] 
#WHERE [조건] (if문이라고 생각하면 된다. 조건을 주는 쿼리문이다.)

SELECT * FROM artists;으로 Pink Floid ⇒ Pink Floyd 잘 수정되었는지 확인 !

3. 데이터 삭제하기

DELETE FROM artists WHERE name='새소년';
#DELETE 쿼리문은 테이블의 이름과 WHERE 문으로 조건을 준다.
SELECT * FROM artists;

DQL

👉 Data Query Language 의 약자

  • 데이터를 쿼리(query,질의)하는데 사용되는 SQL문이다.

  • 쿼리를 한다(질의를 한다)는 게 무슨 의미일까?
    데이터베이스 서버에게 데이터를 달라고 요청한다는 의미이다.
    -즉, 테이블에 저장된 데이터를 꺼내오는 쿼리문이다.

  • 대표적으로 SELECT, JOIN, DELETE이 있다.

  • SELECT는 테이블에 데이터를 조회한다.

  • JOIN는 테이블을 결합한다.

실습

1. 데이터 조회하기

데이터 조회하기에 앞서 몇가지 데이터를 테이블에 넣어주자.

#artist 테이블에 데이터 추가
INSERT INTO artists (name) VALUES ('Radio Head');
INSERT INTO artists (name) VALUES ('Pink Floyd');
INSERT INTO artists (name) VALUES ('새소년');
#songs 테이블에 데이터 추가
INSERT INTO songs (title, artist_id, lyrics) VALUES ('All I need', 1, 'I\'m the next act\nWaiting in the wings');
INSERT INTO songs (title, artist_id, lyrics) VALUES ('Videotape', 1, 'When I\'m at the pearly gates\nThis will be on my videotape, my videotape');
INSERT INTO songs (title, artist_id, lyrics) VALUES ('Comfortably Numb', 2, 'Hello? (Hello? Hello? Hello?\nIs there anybody in there?\nJust nod if you can hear me\nIs there anyone home?');
INSERT INTO songs (title, artist_id, lyrics) VALUES ('Wish you were here', 2, 'So, so you think you can tell\nHeaven from hell?');
INSERT INTO songs (title, artist_id, lyrics) VALUES ('파도', 3, '파도가 넘실넘실\n흐려진 달 사이로\n사람들 숨 쉬네\n절망이 없다');
INSERT INTO songs (title, artist_id, lyrics) VALUES ('난춘', 3, '그대 나의 작은 심장에 귀 기울일 때에\n입을 꼭 맞추어내 숨을 가져가도 돼요');
#데이터 잘 들어갔는지 확인
SELECT * FROM artists;
SELECT * FROM songs;


깨지긴 하는데 데이터는 잘 들어갔다

원하는 칼럼만 보기

  1. songs 테이블의 title만 보기
    SELECT songs.title FROM songs;
  2. songs 테이블의 title과 가사만 보기
    SELECT songs.title, songs.lyrics FROM songs;

WHERE 조건문으로 원하는 데이터만 보기

  • 'All I need'라는 노래의 가사가 궁금할 때
    SELECT songs.lyrics FROM songs WHERE songs.title = 'All I need';

WHERE + LIKE 조건문으로 원하는 데이터 검색하기

  • 노래 가사 중 'next'만 기억나고, 노래 제목은 기억나지 않는다. 이때 노래 제목과 가사 전체를 검색할수 있을까?
    SELECT songs.title, songs.lyrics FROM songs WHERE songs.lyrics LIKE '%I'm the next%';
    이처럼 WHERE 조건문에 LIKE를 쓰면 해당 단어가 포함된 데이터를 쿼리할 수 있다.

2. 테이블 합치기

Join으로 연관성 있는 테이블 합치기

연관성 있는 두 테이블을 합치고 싶을 때, join 명령어를 이용할 수 있다.

우선 두 테이블의 겹치는 부분(교집합)을 찾아야 한다.

desc artists;
desc songs;

위 명령어로 테이블 정보를 조회하고, 연결되어있는 칼럼을 찾는다. 조회해 보면
artists 테이블의 id와
songs 테이블의 artist_id가 겹쳐있다.

이들은 아래의 명령어로 결합할 수 있다.

SELECT artists.name, songs.title, artists.id, songs.artist_id#, #songs.lyrics # 필요한 칼럼을 나열 합니다.
FROM artists # artists 테이블에
JOIN songs # songs 테이블을 결합시킵니다.
ON artists.id = songs.artist_id; # ON 뒤에는 교집합, 즉 연결성이 있는 부분(칼럼)을 적어줍니다.

좋은 웹페이지 즐겨찾기