드디어 database를 배우기 시작했다.
많은 database중 mysql에 대해서 공부를 했는데... join개념과 스키마 디자인을 하는게 너무 어렵게 느껴진다. 이또한 지나가니라..
데이터베이스라는 개념을 이해하기 위한 그림을 그려보았다. 파일이 많아지면 폴더안에 넣고 그 폴더가 많아지면 또 하나의 폴더로 정리하는것 처럼 데이터베이스도 비슷한 개념이다.
테이블이라는 표가 있고, 관계있는 표의 묶음이 데이터베이스다. 스키마라고도 부른다. 이 모든 데이터베이스를 가지고 있는곳이 데이터베이스 서버이다.
엑셀에서 많이 보았듯이 일반적인 표이다.
결국 이러한 테이블들을 데이터베이스에서 보관하는것이다.
이러한 테이블들을 연결하는게 헬...
데이터베이스에서 데이터들을 CRUD(Create Read Update Delete)하는것을 query라고 한다.
SELECT, FROM
select는 조회하고 싶은 데이터를 선택하는 것이고, 필드를 입력한다. 혹시 필드안의 값들을 중복제거하고 조회하고 싶다면, SELECT DISTINCT 뒤에 필드를 입력한다.
여러테이블의 필드를 가져오려면?
필드만 입력하는게 아니라 객체값을 부르듯이 부른다. 이유는 다른 테이블이지만, 필드명이 겹칠수 있기 때문이다.
예를 들면, 위의 사진과 같은 user라는 테이블과 name이라는 필드가 있다. 또, follow라는 테이블과 그 안에도 name이라는 필드가 있을때 SELECT name을 하면 어떤 필드를 불러와야하는지 컴퓨터는 모른다. 그렇기 때문에 user.name
, follow.name
으로 조회를 해야한다.
SELECT [필드]
FROM [테이블];
WHERE
where에는 조건을 넣어 필터링하여 조회할 수 있다.
예를 들면, where name = 'yongyongkim'
이면 name필드에서 yongyongkim만 필터링하여 보여준다. 반대로 아닌값을 보려면, where NOT name = 'yongyongkim'
으로 입력해주면 된다.
조건들을 AND나 OR로 이어줄수도있다.
WHERE name = 'yongyongkim' AND name = 'crystalkang'
SELECT [필드]
FROM [테이블]
WHERE [조건];
INSERT INTO
insert into는 조회하는게 아니라 데이터를 추가하는 query이다.
VALUES와 같이 사용되며, 밑에와 같이 작성한다.
주의할점은 테이블명 옆에 적는 필드와 벨류옆에 적는 벨류가 순서에 맞게 추가된다.
EXTRA가 auto_increment이 아닌 필드는 모두 적어준다.
INSERT INTO 테이블명(필드,필드 ...)
VALUES (value, value ...);
UPDATE
말그대로 데이터를 update할때 사용한다. SET와 같이 사용되며, 밑에와 같이 작성한다.
WHERE로 업데이트를 할 범위를 지정하고, SET으로 값을 업데이트해준다.
UPDATE [테이블명]
SET [필드] = [value] // 업데이트할 값
WHERE [조건]; // 업데이트 할 부분 지정
ORDER BY
정렬을 해주는 query이다. 종류는 ASC(오름차순),DESC(내림차순)가 있으며, 정렬입력이 없다면 default로 ASC가 적용된다.
SELECT *
FROM [테이블명]
ORDER BY [필드명]; // deafault ASC적용
SELECT *
FROM [테이블명]
ORDER BY [필드명] DESC; // 내림차순
GROUP BY
GROUP BY는 SUM(), COUNT(), MIN(), MAX(), AVG() 등과 같이 쓰인다. 작성법은 밑에와 같다.
GROUP BY에 그룹핑하고 싶은 필드명을 입력하면, 해당 필드안의 같은 값들이 같은것끼리 그룹핑된다. (여기서 중복제거 DISTINCT와 헷갈릴 수 있다. 차이점은 DISTINCT는 단순히 중복을 제거한것이고, GROUP BY는 DISTINCT와 같은 결과값이 나오지만 내부적으로는 그룹핑된 값들이 모두 들어있다.)
이건 글보단 직접 해보는게 좋은거 같다!
https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_groupby
SELECT COUNT(count적용하고 싶은 필드명), [필드명], ...
FROM [테이블명]
GROUP BY [필드명];
JOIN과 schema design도 공부하고 있는데... 너무 개념이 어렵다.. 아마 처음이라 어렵게 느껴지는거겠지??
데이터베이스에 빨리 적응하자!