오늘도 복습과제로 지정된 주제인 MySQL 쿼리문에 대해 공부를 해보았다!
MySQL 상에서 테이블을 만들고 조합하는 과정은 꽤 재미가 있었다!
오늘 배운 내용들을 잘 기록해두고, 나중에 필요할 때 꺼내보자!
✅ DDL (Data Define Language)
: 데이터베이스의 스키마(형태)를 정의할 수 있는 쿼리문!
Create, Alter, Drop
등이 대표적이다! 데이터를 구성하는 논리적인 구조(데이터베이스 or 테이블)을 추가, 수정, 삭제가 가능하다. 또한 메타데이터를 다루는 쿼리문이다.
🌱 mycli -u root
명령어를 활용해 mysql에서도 자동완성을 활용하자!
🌱 데이터베이스 생성, 확인, 사용
# 데이터베이스 생성하기
CREATE DATABASES my_favorite_artists;
# 데이터베이스 보기
SHOW DATABASES;
# 데이터베이스 사용하기
USE my_favorite_artists;
# 테이블 보기
SHOW tables;
🌱 테이블 만들기
좋아하는 아티스트 (가수) 정보가 담긴 테이블과 노래의 정보가 담긴 테이블 총 두개로 구성되어 있으며, 이 테이블은 일대다 관계이다!
🌱 artist table 만들기
CREATE TABLE artists
(
id INT NOT NULL AUTO_INCREMENT,
# id 칼럼을 정수, NULL 을 허락하지 않으며 값을 자동증가하게 설정합니다.
name VARCHAR(100) NOT NULL,
# name 칼럼을 100의 크기를 가지는 문자열, NULL 을 허락하지 않습니다.
PRIMARY KEY (id)
# 이 테이블의 Primary Key 를 id 로 설정합니다.
);
# 쿼리문은 ; 로 구분되기 때문에 엔터를 쳐서 쿼리문을 멀티라인으로 작성할 수 있습니다.
: 해당 내용 입력시 mysql 상에서 들여쓰기를 잘 해주어야 오류가 나지 않는다!
desc artists;
: 🌱 song table 만들기
: song 테이블의 artist_id가 artist 테이블의 id를 참조하기 때문이다! 외래키를 사용할 때 FOREIGN KEY,REFERENCE
이 두가지 옵션을 활용해 원하는 카럼을 외래키로 만들고 참조하는 칼럼을 정의할 수 있다.
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)
# 외래키를 걸어줄 칼럼과 참조할 테이블과 칼럼을 순서대로 적어줍니다.
);
✔️ 잘 생성됐는지 확인해보면?
: 무사히 생성됐다!
artist_id
를 보면 key에 MUL
이 들어가있는데, 이는 Multiple을 의미하며, 여러행이 동일한 값을 가질 수 있음을 의미한다!
✅ DML (Data Manipulation Language)
: 데이터를 조작하는 쿼리문을 의미한다!
Insert, Update, Delete
가 대표적인 쿼리문이다!
INSERT INTO artists (name) VALUE ('가수이름')
: 넣을 테이블 값을 소괄호로 감싸며 value 뒤엔 실제로 넣을 값을 넣어준다!
넣고 나서 잘 만들어졌는지 조회하면?
: 요즘 핫한 이무진!과 방탄소년단, 짱테이시를 차례로 넣어주었다!
✔️ 입력한 값을 바꾸고 싶다면? update
: UPDATE artist SET name='장범준' WHERE id=1;
첫번째 입력한 '이무진'을 '장범준'으로 바꾸어주었다!
WHERE
을 활용해 method도 지정!
✔️ 입력한 값을 삭제하고 싶다면? delete
: DELETE FROM artists WHERE name = '장범준';
장범준을 삭제해주었다. 마찬가지로 WHERE
을 활용해 삭제할method도 지정!
✅ DQL (Data Query Language)
: 데이터를 쿼리하는데 사용되는 SQL문을 의미한다. 데이터베이스 서버에게 데이터를 달라고 요청하는 것이다! 실제로 프/백간 소통을 위한 api를 구현 할 때 데이터베이스에 저장된 데이터를 쿼리해서 가져온 데이터를 응답으로 보내주는 경우가 많다!
SELECT
가 대표적인 쿼리문이다!
🌱 artists ,songs에 각각 데이터 넣기
# artists에 들어갈 데이터
INSERT INTO artists (name) VALUES ('방탄소년단')
# songs 테이블에 들어갈 데이터, artists 테이블과 1:N 관계!
INSERT INTO songs (title, artist_id, lyrics) VALUES ('ASAP',3,'ASAP 내 반쪽 아니 완전 카피')
: 일대다 관계인 songs 테이블에 들어갈 데이터들을 먼저 정의해주고, 순서대로 넣어준다!
✔️ 입력을 완료하면?
✔️ 노래 가사만 출력해서 보고 싶다면?
SELECT songs.lyrics FROM songs;
✔️ 노래 제목과 가사를 함께 보고싶다면?
SELECT songs.title, songs.lyrics FROM songs;
✔️ 원하는 가사가 담겨져 있는지 확인해보려면?
SELECT songs.lyrics FROM songs WHERE songs.title = 'asap';
: where 이후 조건을 걸어준다!
✔️ 가사의 일부를 활용해 노래의 제목을 찾는다면?
SELECT songs.title, songs.lyrics FROM songs WHERE songs.lyrics LIKE '%고민보다%';
: where 문은 = 연산자를 사용해 정확한 값으로 비교를 했지만, LIKE문을 사용하면 이처럼 원하는 가사가 있는 부분을 찾을 수 있다!
🌱 JOIN 활용하기
: 연관된 두개의 테이블을 결합시킬 때 활용한다!
SELECT artists.name, songs.title, songs.lyrics
FROM artists
JOIN songs
ON artists.id = songs.artist_id;
: select
를 활용해 필요한 칼럼을 나열하고,
from artist
테이블에 join
을 활용해 songs
를 결합시키고,
on
에 교집합, 연결성이 있는 부분을 적어준다!
✔️ 결과물은?
🔥 SQL 각종 쿼리문 추가 정리
WHERE
: 필터를 기록하기 위해 사용. 지정된 레코드를 추출하는데 이용됨
BETWEEN
은 WHERE과 함께 이용하며, AND를 통해 범위를 지정해 원하는 값을 얻어낼 수 있다.
SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20;
: Products에서 값이 10에서 20 사이인 제품을 출력하라;
NOT BETWEEN
: 범위를 벗어난 부분 출력할 때 이용
WHERE로 지정하는 범위에 따라 TEXT도 비교가 가능하다. 날짜도 비교 가능!
숫자로 된 값을 조회할 때 유용하게 사용할 메소드
COUNT
: 지정된 기준과 일치하는 행의 수를 반환한다.
AVG
: 숫자열의 평균값 반환한다.
SUM
: 숫자들의 합을 반환한다.
ex) 구문 예시
SELECT COUNT(AVG,SUM)(column_name)
FROM table_name
WHERE condition;