MySQL이란?
- 오픈 소스 데이터베이스로, MySQL AB사가 개발하여 배포/판매하고 있는 관계형 데이터베이스 관리 시스템이다.(단, 상업적 이용시 상업라이센스를 필히 구매해야한다.)
- SQL중에서 DDL을 사용하여 테이블 객체를 생성하고, 수정하고, 삭제하는 작업이 가능하며, DML로 테이블 객체에 데이터를 추가, 수정, 삭제하는 작업이 가능하다. (즉, 데이터를 조작하는 쿼리문) 또한 DQL로는 데이터를 조회하는 작업이 가능하다.
DDL이란?
CREATE TABLE <테이블명>
으로 테이블을 생성할 수 있다.
ALTER TABLE <변경하고자하는 테이블명> ADD <열이름> <자료형> <제약조건>
ALTER TABLE users ADD age INT NOT NULL;
ÀLTER TABLE <변경하고자하는 테이블명> DROP <삭제할 열의 이름>;
ALTER TABLE <변경하고자하는 테이블명> MODIFY <열 이름> <변경자료형> <제약조건>;
DROP TABLE <테이블명>
TRUNCATE TABLE <테이블명>
RENAME TABLE <기존 테이블명> TO <변경 테이블명>
👉 이 후 desc 테이블이름;
라는 쿼리문 실행 시 변경된 테이블 구조 출력 및 확인이 가능하다.
DML이란?
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 <테이블명> SET <컬럼이름>=<새로운데이터> WHERE <조건>;
ex.
mysql> UPDATE posts SET content='날씨가 좋네요!' WHERE user_id=1 AND id=1;
//-> 이러면 user_id 1이 작성한 posts.id 1이 수정 된다.
DELETE FROM <테이블명> WHERE <조건>;
mysql> DELETE FROM posts WHERE user_id = 1;
-> userid 1 이 작성한 post가 모두 삭제된다.
DQL 이란?
기준이 되는 테이블과 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