Database SQL

katsukichi·2021년 4월 8일
0

CodeStates_IM

목록 보기
37/48

SQL

처음엔 Search Query Language 인줄 알고 썻는데

나중가니까 structured Query Language 였다.

구조화된 쿼리 언어

쿼리는 질의문 이라는것.

라ㅇ언브ㄹ지 알바때매 살짝 공부했던적이있어서

쿼리가 너무 싫.다.

물론 알바테스트는 통과못햇지만.

그래서 SQL 이 뭘까.

  1. DB에서 쓰는언어다.
  2. 정확히는 DBMS를 다루기위해 쓰는언어다.
  3. 통상 RDBMS 관계데이터베이스 메니지 시스템 에서사용하는 SQL을 SQL이라고한다.
  4. NOSQL은 RDBMS의 반대로 무관계데이터베이스라고할수있다?

3 tier achitecture

이제 3단계로

서버,클라이언트,db 나눌수있다.

SQL 소개

처음엔 In Memory로 데이터를 관리했엇다.

즉 클라이언트 자체에서 그 값을 들고있엇다.

물론 바닐라 JS로 할때얘기이다.

그러다가 중간에 FS 파일시스템으로 txt로 보관해보는기능을 잠깐 썻엇다. (FILE I/O)

그러다 localstorage개념을 잠깐 사용해보고,

react로 넘어와서 state로 페이지가 라우팅(주소가변경되더라도) 데이터를 유지할수있는 상태까지는 만들었다.

하지만 결국 새로고침하면 휘발되는건 마찬가지였다.

이제 DB를 써서 데이터 관리를 더 체계적으로 할수있다.

DB에 저장하기위해선 SQL을 알아야 저장,불러오기,업데이트,삭제등 할수있는데.

제일 많이사용하는 순서대로 가보자.

핵심 잊지말자 sql의 한줄이 종료되는기준은 ';' 이다.

Select

선택이다. 즉 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 * // 이건 안돼더라...

잠깐! 구조가궁금해? DESC

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

가끔 내가만들어둔 테이블들이 뭐뭐있는지 모르겟다,

내가 만들어둔 데이터베이스들이 뭐뭐있는지 모르겠다 할때 쓰면 좋다.


SHOW tables;
SHOW databases;

SHOW tables 의 결과예시

Table_in_현재 선택된 데이터베이스
items
order_items
orders
users

SELECT 에 조건달기 WHERE


SELECT * FROM users WHERE age=27
// 27살인 사람들의 정보들이 쫙 나온다.

And Or Not 등 사용가능하다.

NULL의 경우 IS를 쓰는게 어울린다.

=는 대입연산이아니라 같다 라는 equal 처럼 쓰인다.
!=는 NOT equal 의 의미로 사용되고

<>도NOT equal로 쓴다.

NOT = 를 써도 된다. 표현하는방법은 많다.

&&도 쓰고 AND도 쓰는거같다.

||도 쓰고 OR도 쓰는거같다.

INSERT INTO

잠깐 팁을 주자면 대부분 뒤에오는 전치사가 다르다.

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

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

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들 함수라고하긴좀그렇고 기능들이라고보면되겠다. 갯수를 새준다던가 더해준다던가 평균을내준다던가.

    • count
    • avg
    • sum
    • ...

DB관련

  • CREATE DB 디비생성
  • DROP DB 디비삭제
  • CREATE TABLE 테이블생성
  • DROP TABLE 테이블삭제
  • ALTER TABLE 테이블 수정 : 새로운 속성이추가된다던가 등등..혹은 필요없는 속성column을 지운다던가.
  • USE DB 데이터베이스 사용 : 어떤 DB 사용할것인지( 정의된 db가 꼭 여러개가 아니더라도 서버단에서 한번은 해줘야할것이다. 스키마설계부분에서)
  • KEY들
  • default 한 속성인가?
  • auto increment인가
  • dates 날짜 속성
  • not NULL 속성을 비워두면 안될때 쓴다. (스키마 설계할때 지정안해주면 NULL을 허용한다는것 YES)
profile
front-back / end developer / Let's be an adaptable person

0개의 댓글