GIGO MIND DEV BLOG

SQL Basic Syntax(2)

SELECT를 공부하기 전.

사고의 확장

한번 생각해봅시다.

실제로 서버에서 데이터를 저장해야 할 때를 말이죠.
기본적인 구조이지만 저번 포스트 떄 배웠던 운영자, 즉 사용자를 일단 만들겠죠.
사용자를 만들고 나서.. SQL의 테이블을 저장할 주소를 또 정해줘야 되니까. 테이블 스페이스를 정해줄 것이고요.
그리고나서, 이제 생각을 해볼 겁니다. 어떠한 정보를 저장해야하나..?

예시로 만약 저희가 회사원의 정보를 저장해본다고 생각하겠습니다.

Employee라는 테이블을 통해서,
employee ID라는 유니크한 아이디를 만들어 줄 수 있겠구요.
employee Name으로 이름을 지정해 줄 수도 있겠죠.
department Name같은 일하는 곳에 대한 정보를 적어 줄 수도 있겠네요.
salary 또한 정해줄 수 있습니다.

이 외에도, department의 대한 정보, 즉 위치라던가 아이디 등등, salary에 따라 들어가는 band 영역까지 정해줄 수 있겠는데요.
이 모든 내용을 하나의 테이블에 저장한다면 어떻게 보일까요..

Employee Table
E_Id | E_Name | D_Name | Salary | D_loc | D_ID | band
1	James	IT	 1000	  MD	  1	 1
2	Jane	IT	 1500	  MD	  1	 1

한눈에 들어올지는 모르겠지만, D_Name, D_loc, D_ID과 Salary, band 들은 이 중 하나만 들어가있어도 무방할 정도로 서로 이어져있습니다.

이럴 경우, 같은 데이터가 반복적으로 들어가는걸 막기위해서는 테이블을 나눠주는 편이 더 효율적입니다.

Employee Table
E_Id | E_Name |  Salary | D_ID 
1	James	 1000	   1	
2	Jane	 1500	   1

Department Table
D_ID	|D_Name	|	D_loc
1	 IT		MD
2	 Sales		WA

Band Table
salary	|band
1000	|1
2000	|2

이런식으로 말이죠.

자 그럼 효율적인 테이블의 분배는 알겠다 이겁니다.
근데 왜 한겁니까?

예를들어서 James의 department location을 알아내지도 못할거면 왜 했냐는 말입니다. Employee 테이블에서 얻을 수 있는 내용은 D_ID밖에 없는데 어떻게 알아내냐구요!!

D_ID에서 D_Loc을 얻어낼 방법이 있습니까?


같은 칼럼을 쓰는 테이블을 합치면 됩니다.
그리고 이 합치는 행위를 “JOIN” (혹은 Inner Join) 이라고 합니다.

필요한 정보가 들어있는 하나의 테이블을 원래의 기준 테이블 옆에 붙이는 형태로서 맨 처음 만들었던 모든 정보가 하나의 테이블에 들어있던 구조를 만들어 주는 것이지요.

JOIN ON

SELECT [<column-name>] FROM <TABLE1> JOIN <TABLE2> ON <TABLE1.column-name> = <TABLE2.column-name>;

SELECT * FROM EMPLOYEE JOIN DEPARTMENT ON EMPLOYEE.D_ID = DEPARTMENT.D_ID;

이렇게 만들어진 테이블에서는 평소 SELECT를 진행하면 됩니다.

그 평소 SELECT는 어떻게 진행하냐고요?

SELECT FROM TABLE

여기서부터는 진짜 SELECT에 대해서 설명합니다.

SELECT의 문법은 다음과 같습니다.

SELECT [<column-name>] FROM <table-name> [WHERE condition] [GROUP BY <column-name>] [ORDER BY <column-name>];

처음 괄호부터 몇가지 팁을 드리자면, column-name에는 aggregate functions라는 녀석들이 쓰여질 수 있다는 것입니다.
그 중에는

  • min() : 최솟값을 값으로한 row만 남습니다
  • max() : 최댓값을 값으로한 row만 남습니다
  • count() : 몇개의 rows들이 있는지를 나타낸 값의 row만 남습니다.
  • sum() : integer 값들의 합을 나타낸 값의 row만 남습니다.
  • avg() : integer 값들의 average 값의 row만 남습니다. 라는 것들이 있으며, 더 찾아보실려면 (functions-aggregate)[https://www.postgresql.org/docs/9.5/functions-aggregate.html]에서 확인하시길 바랍니다.

그리고 추가적으로, aggregate 을 썼을경우, select는 뒤에 GROUP BY 이라는 녀석을 추가시켜줘야 합니다. 이를 추가시켜줌으로서, 어떤 column으로 aggregate을 하는지 알아야하니까요.

자 두번째 괄호는 table-name이라고 되어있는데요. 이것 또한 팁이 존재합니다.

Select의 return 값은 Table입니다. 그 말은 즉슨, 안에 또 다른 SELECT가 들어갈 수 있다는것이죠.

SELECT gender, SUM(qty) FROM (
SELECT gender, qty FROM orders JOIN users ON orders.user_id = users.user_id
)
GROUP BY gender;

이런것이 가능해지는 것이죠.

추가적으로, Inner Join과 다르게 Outer Join (혹은 left, right join), Natural Join, Outer Join이라는 녀석도 있습니다.

WITH라는 녀석도 있는데 그 녀석에 대한 것도 다음 시간에 다뤄보죠.

SQL Basic Syntax(1)

RDBMS의 기능

SQL이든 NOSQL이든 목표는 하나, 기본 기능은 다섯가지로 볼 수 있습니다. 목표는 데이터의 취급이죠.

제일 기본적인 기능은 다음과 같습니다.

  • Create
  • Insert
  • Update
  • Delete
  • Select

Create에는 사용자, 테이블 스페이스, 데이터 베이스, 테이블이 있습니다.

Create User


CREATE USER <user-name> [PASSWORD 'password'];
\du 로 확인

Create Tablespace


CREATE TABLESPACE <tablespace-name> [OWNER <owner-name>] LOCATION 'datafile-name';
\db 로 확인

Create Database


CREATE DATABASE <database-name> [[WITH] [OWNER=<owner-name>] [ENCODING = <characterset-encoding>] [TABLESPACE = <tablespace-name>]];
\dl 로 확인
\c로 connect

Create Table


CREATE TABLE <table-name> ([<column-name> <data-type>]);
\dt 로 확인

Drop Table


DROP <table-name>;

Insert

사실, create에서 올바르게 세팅을 한 이후로부터는 올바르게 이용하기만 하면 된답니다.
Insert로는 테이블에 데이터를 넣는거만 하면 되는거죠.

Insert values


INSERT INTO <table-name> ([<column-name>]) VALUES ([<data-type>]);

Update

Update 또한 데이터셋을 취급하는데 이용합니다.

Update set


UPDATE <table-name> SET [<column-name> = <data-value>] [WHERE condition];

Delete

Delete는 테이블로부터 몇몇 condition에 부합하는 데이터를 제거합니다.

Delete


DELETE FROM <table-name> [WHERE condition];

Truncate


Delete의 where이 없이 테이블을 비우려고 할 때는 Truncate가 훨씬 효율적입니다. 컨디션을 스캔하지 않기 때문이죠.

Truncate <table-name>

SELECT ..


SELECT는 여러가지 테이블의 관계를 설명하는것에 아주 유용하기에 다른 포스트에 정리해보도록 하겠습니다.

끝 마치기 전, 마지막으로 테이블의 구조를 수정할수 있는 방법을 말해보겠습니다.
테이블의 구조를 수정한다는 것은 쉽게 말하면 column을 수정한다는 것이지요?

그 방법에는 column의 이름을 바꿀 수도 있을 것이고, column을 넣거나 뺄수도 있겠죠. 물론 데이터 타입과 테이블의 constraint들을 이해한다면 더 많은 기능도 행할 수 있겠습니다. 이는 다음에 다루도록 하고..

Alter Rename Column

ALTER TABLE <table-name> RENAME COLUMN <current-column-name> TO <new-name>;

Alter Add Column

ALTER TABLE <table-name> ADD COLUMN <column-name> <data-type> [constraint];

Alter Drop Column

ALTER TABLE <table-name> DROP COLUMN <column-name>;

Select는 바로 다음 포스트로 이어집니다.

React Framework(1)

React? Angular.JS? Vue.JS?

Virtual DOM

React

  • 페이스북
  • Virtual DOM
  • JSX = Javascript + XML
  • React Native (앱 개발용)
  • 특수성

Angular

  • 구글
  • Typescript
  • RxJs(Reactive Extensions for JS)
  • All in one for big project
  • High SPA efficiency

Vue.js

  • 구글
  • Virtual DOM
  • TypeScript
  • NativeScript
  • Single File Component : .vue 파일에 HTML 과 CSS 과 Script를 묶어서 컴포넌트 단위로 직관적인 구성이 가능

제 1화.

Github Collaboration

다른 사람의 프로젝트에 내용을 추가할 때


1. Fork

다른 사람의 프로젝트를 복사해오는것을 뜻함.

보통 웹사이트에서 한다.

2. Clone

Fork해서 Repository로 가져온 프로젝트를 로컬 컴퓨터로.

$git clone <origin repository>

3. Upstream

Clone을 했을 경우, fork 한 내 프로젝트는 origin이 되어버린다. 진짜 original은 다음과 같이 upstream이라 칭한다(convention).

$git remote add upstream git://github.com/<UpstreamUser>/<UpstreamRepository.git> 

$ git remote -v

4. Branch

Branch 생성을 통해 고립된 환경 추가.

$git checkout -b <branch-name>

$ git branch

5. Push

add와 commit을 완료 후에, origin에게 으로 push를 한다.

$ git push origin <branch-name>

6. Pull Request

다른 사람의 프로젝트에 바꿔달라고 요청하는걸 뜻함.

보통 웹사이트에서 한다.

다른 사람의 프로젝트에 내용을 받아올 때


1. Fetch

Upstream으로부터 ‘fetch’로 파일들을 받아온다.

$git fetch upstream

2. Checkout

받아온 파일들을 main branch로 checkout 합니다.

$git checkout main

3. Merge

checkout 후, upstream/main 과 합칩니다.

$git merge upstream/main

4. Push

origin repository에게 push 합니다.

$git push

Wheel Chair and Bench

The girl on a bench asked with a smirk,
“So? Were you paying attention?”

I said, “yea..” as I looked at her again with a faint smile on my face.

This moment at night in which everything is the same except that there is the garden girl outside the hospital looking at the stars.

It is certainly heart warming to see the garden girl in a wheelchair after all these years.

The girl seemed like she was happy being outside with the guy who looked after her for years.

However, she couldn’t get the small confusion off of her face. After all, the boy grew up so much that he looks like a different person now.

“Well.. It’s all good now”, I said in a quiet, calm voice.

“What was that?”, A fierce voice has pierced through my eardrums.

“I hope this moment lasts forever”, I said it only to realize how cheesy it sounds.

“W-what are you saying, you shameless fool!”, the girl on a bench turned her head to the otherside of the river.

I could see her blush.

“Not bad at all.”


Wheel-Chair-And-Bench