처음엔 Search Query Language 인줄 알고 썻는데
나중가니까 structured Query Language 였다.
구조화된 쿼리 언어
쿼리는 질의문 이라는것.
라ㅇ언브ㄹ지 알바때매 살짝 공부했던적이있어서
쿼리가 너무 싫.다.
물론 알바테스트는 통과못햇지만.
그래서 SQL 이 뭘까.
이제 3단계로
서버,클라이언트,db 나눌수있다.
처음엔 In Memory로 데이터를 관리했엇다.
즉 클라이언트 자체에서 그 값을 들고있엇다.
물론 바닐라 JS로 할때얘기이다.
그러다가 중간에 FS 파일시스템으로 txt로 보관해보는기능을 잠깐 썻엇다. (FILE I/O)
그러다 localstorage개념을 잠깐 사용해보고,
react로 넘어와서 state로 페이지가 라우팅(주소가변경되더라도) 데이터를 유지할수있는 상태까지는 만들었다.
하지만 결국 새로고침하면 휘발되는건 마찬가지였다.
이제 DB를 써서 데이터 관리를 더 체계적으로 할수있다.
DB에 저장하기위해선 SQL을 알아야 저장,불러오기,업데이트,삭제등 할수있는데.
제일 많이사용하는 순서대로 가보자.
핵심 잊지말자 sql의 한줄이 종료되는기준은 ';' 이다.
선택이다. 즉 DB에서 끄집어 낼때 사용한다.
사용폼은
SELECT 속성(들) FROM 테이블이름 ;
테이블 이름은 users
id | name | age |
---|---|---|
1 | 신코딩 | 27 |
-- 위데이터를 가져오려면
SELECT * FROM users; // 전체를 가져옴
SELECT id FROM users; // id 만 가져옴
SELECT name FROM users; // name만 가져옴
SELECT id,name FROM users; //id , name 만 가져옴
// * : wildcard는 다가져옴 와일드카드!
근데 궁금해서 써본건데
SELECT * FROM * // 이건 안돼더라...
description의 약자이다. 나중에 쓰다보면
정렬에서 ASC 어센딩 오름정렬 DESC 디센딩 내림정렬
이랑 같은 키워드같지만 사용되는위치가 전혀 달라서
쉽게생각하면 정렬에서 DESC는 OPTION값 flag처럼 쓰이고
description에서 DESC는 실행문 자체이다. 즉 명령문 동사 이런느낌이다.
그래서 내가 정의한 테이블이 어떤형태일지 확인할때 좋다.
어떤 속성이 키가뭐고, 안에 데이터형식은 무엇인지 ( 스키마를 본다는 얘기 )
DESC users
DESC users 결과 예시
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
id | int | NO | PRI | NULL | auto_increment |
username | varchar(255) | YES | NULL |
가끔 내가만들어둔 테이블들이 뭐뭐있는지 모르겟다,
내가 만들어둔 데이터베이스들이 뭐뭐있는지 모르겠다 할때 쓰면 좋다.
SHOW tables;
SHOW databases;
SHOW tables 의 결과예시
Table_in_현재 선택된 데이터베이스 |
---|
items |
order_items |
orders |
users |
SELECT * FROM users WHERE age=27
// 27살인 사람들의 정보들이 쫙 나온다.
And Or Not 등 사용가능하다.
NULL의 경우 IS를 쓰는게 어울린다.
=
는 대입연산이아니라 같다 라는 equal 처럼 쓰인다.
!=
는 NOT equal 의 의미로 사용되고
<>
도NOT equal로 쓴다.
NOT =
를 써도 된다. 표현하는방법은 많다.
&&도 쓰고 AND도 쓰는거같다.
||도 쓰고 OR도 쓰는거같다.
잠깐 팁을 주자면 대부분 뒤에오는 전치사가 다르다.
SELECT FROM
INSERT INTO
... 등등
진짜 많이헷갈리므로 잘 기억해주자.
인서트는 기본적으로 데이터를 추가할때 사용한다. 정확히는 테이블에 row를 추가할때 쓴다.
쉽게생각하면 유저가 새로 회원가입을 하면
그 데이터들을 db에 users테이블에 한 열(row)이 된다.
이것을 recods 라고한다.
왜이렇게 부르는말(호칭)이 많아!!
DB에서 부르는 명칭이있고, DBMS에서 다루기위해 붙여놓는 이름이 있다고생각하면된다.
즉 진짜 거시적으로 그게뭔데 하고 물어보는거랑
그거 그래서 용도가뭔데 하고 물어봣을때의 이름이 다른거처럼
어떨때는 그것을 rows라고 그냥 부르고 편하게
어떨때는 records 라고 하는것이다.
쓰다보면 감이온다. 결국 쓰는사람마음이다. 헷갈리지만 않으면 결국 의미하는바는 같아진다.
INSERT INTO 테이블(속성들...) VALUES(데이터들...);
//예시
INSERT INTO users(name,age) VALUES("승해커","28");
//추가된것을 확인해보기위해
SELECT * FROM users;
id | name | age |
---|---|---|
1 | 신코딩 | 27 |
2 | 승해커 | 28 |
그래서 id는 왜안넣어줌??
보통 스키마를 정의할때 AUTO_INCREMENT 옵션을준다.
즉 id는 고유해야하고 unique하다.
중복 절대안됌 그래서 사람이직접 주면 실수하기마련이므로
무조건 db에게 자동증가 옵션을 주면 절때 겹칠일이없다.
주로사용하는 옵션이며, default 가 존재하면 굳이 주지않아도 자동으로 증가한다.
대부분의 id는 primary key이다. key에대한 설명은 나중에 따로 하겠다.
UPDATE SET
기억하자.
SELECT FROM
INSERT INTO
UPDATE SET
내용을 업데이트할때 쓴다.
그럼 기본적으로 값 row가 있고 그내용중 일부를 수정한다는것이다.
UPDATE 테이블 SET 열 = '변경할값' WHERE 조건;
// WHERE은 없어도된다 다만 없으면 모든테이블에 적용되므로 조심하자.
//예시
UPDATE users SET age = 25; //모든 유저테이블에 나이를 25로 바꾼다.
UPDATE users SET age=25 WHERE name="신코딩"
// 이름이 신코딩 인 사람의 나이를 25로 바꾼다.
DELETE FROM이다.
SELECT FROM
INSERT INTO
UPDATE SET
DELETE FROM
(DELETE 에서 FROM은 생략이가능하다.)
마찬가지로 DELETE 도 WHERE 조건이 붙는다.
DELETE FROM users; // 조건 (WHERE)이 없으므로 유저정보 다삭제 무섭다.
DELETE users; // FROM은 생략이 가능하다.
DELETE users WHERE age=27; // 27살인사람들 전부 삭제
더알아야 하는내용
JOIN 약간 핵심 하나의 테이블말고 테이블을 연결해서 생각해야할때 제일 많이쓰는거같다.
INNER JOIN과 OUTER JOIN 두가지로 분류할수있다.
교집합 , 차집합 느낌으로 생각하면된다.
JOIN은 자주쓰므로 설명은 생략하겠다.
LEFT RIGHT는 아웃터에만 줄수있는줄 알앗는데 아니였고 둘다 쓴다, 하지만 결국 동일하다.
Group by 이거도 앵간 짜증나고 어렵다. 진짜 꽤 찾아봐야한다. 내용이 많이 어렵다.
참고 유튜브 링크 : https://www.youtube.com/watch?v=Mk88VyO6Wsk
function들 함수라고하긴좀그렇고 기능들이라고보면되겠다. 갯수를 새준다던가 더해준다던가 평균을내준다던가.
DB관련