IT/프로그래밍

[파이썬] 데이터베이스 파트 SQL DML [패스트 캠퍼스 챌린지 40일]

뜻밖의 행복 2022. 3. 4. 16:20
반응형

안녕하세요? 뜻밖의 행운입니다.

패스트 캠퍼스 도전 40일차 

이야~ 40일 하니까 진짜 많이 온것이 느껴집니다.

이제 10일만 하면 도전 완료 !

도전이 끝나더라도 계속 강의 정리하는 것이 이어갈 예정입니다.

이런 프로그래밍 뿐만 아니라 재테크, 엑셀, 회사생활 같은 것들

다시 이렇게 꾸준히 하니 새로운 재미가 생기네요

오늘은 SQL의 꽃 이자 자주쓰는 것주에 하나인 join 을 배웠습니다. 

그리고 Group by도 추가입니다.

 

우선은 어제 배운 내용을 복습하였는데요 

특정 조건에 따라 테이블을 생성하는 문제였습니다.

각각 

User 테이블 생성 

 컬럼은 email, passwd, gender, age를 가지며

이중 email이 PK 그리고 passwd의 경우는 Not null 조건을 가져야 합니다.

CREATE TABLE user(email text primary key, 
passwd text not null,
gender text,
age text)

위 처럼 생성을 하면 됩니다. age의 경우는 text가 아니라 int로 줘도 상관없습니다.

 

생성이 잘 되네요 

 

INSERT INTO "main"."user" ("email", "passwd", "gender", "age") VALUES ('grape@naver.com', 'grape123', 'male', '41');
INSERT INTO "main"."user" ("email", "passwd", "gender", "age") VALUES ('apple@naver.com', 'apple123', 'female', '20');

데이터도 넣어 보겠습니다.

 

데이터도 잘 들어갔네요?

 

추가로 이번에는 post 테이블 실습입니다.

조건

 

id, title, content, author 이고

id는 PK로 author를 제외한 title, content의 경우 Not null 조건

CREATE TABLE "post" (
"id" integer,
"title" text NOT NULL DEFAULT '제목없음',
"content" text NOT NULL DEFAULT '내용없음',
"author" TEXT,
PRIMARY KEY("id")
)

위 처럼 생성하면 됩니다.

 

그리고 오늘 배운 GROUP BY

말그대로 그룹화해서 계산하는 명령입니다.

 

SELECT count(*) FROM 테이블명 GROUP BY 컬럼명;

위와 같은 형식으로 사용하면 됩니다.

SELECT gender, count(*) FROM user GROUP BY gender;

위의 경우는 user 테이블에서 gender를 그룹화 하여 

gender내의 요소가 각 몇개인지 숫자를 세보겠다는 것입니다.

SELECT gender, avg(age) FROM user WHERE age > 20 GROUP BY gender;

이렇게 WHERE 조건도 추가하여 가능합니다. 

해석해보면 

똑같이 user 테이블에서 age가 20 이상인 데이터만 gender로 그룹화 해서 

age의 평균을 보여주겠습니다.

 

SQL도 확실히 여러개를 조합해서 쓰면 원하는 데이터만 딱 추출 할 수 있긴한데 

쉽지 않죠 ㅎ

하지만 이렇게 방법을 찾아가서 결국 그 명령을 찾는다면 그렇게 뿌듯할 수 없습니다.

 

JOIN

SELECT * FROM 테이블명1 INNER JOIN  테이블명2 WHERE 조건;

SQL의 꽃 JOIN인데 오늘 많이 다루지는 않았네요 JOIN도 INNER JOIN, OUTER JOIN이 있는데 오늘은

INNER JOIN만 배웠습니다.

딱 보면 두개의 table에서 겹치는 값을 합쳐서 보여주는 명령어 입니다.

SELECT * FROM post INNER JOIN user WHERE post.author = user.email;

위 명령의 경우 post 테이블과 user 테이블에서 author와 email 값으로 같은 것을 Join 하여 값을 보여 달라는 것이겠네요

 

SQL은 확실히 직관적이라 더 재미가 있었습니다.

 

 

반응형