10월 8일 (금) SQL
데이터베이스의 필요성
굳이 데이터베이스를 사용할 필요가 있을까 ?
파일에 데이터를 저장하거나, 인메모리 형태로 데이터를 임시저장하는 방법도있고,
엑셀 시트나 CSV파일 등에 데이터를 저장해 사용하면 되지 않나라는 의문이 든다
데이터베이스의 필요성에 대하여 알아보자
1. In-Memory
먼저 JavaScript에서 데이터를 다룰 때에는 프로그램이 실행될 때에만 존재하는 데이터가 있다
JavaScript에서 변수를 만들어 저장한 경우, 프로그램이 종료될 때 해당 프로그램이 사용하던 데이터도 사라진다
이 말은 변수 등에 저장한 데이터가 프로그램의 실행에 의존한다
예기치 못한 상황으로부터 데이터를 보호할 수 없고, 프로그램이 종료된 상태라면 데이터를 원하는 시간에 받아올 수 없으며, 데이터의 수명이 프로그램의 수명에 의존하게 된다
끄면 데이터가 없어진다
2. File I/O
파일을 읽는 방식으로 작동하는 형태를 말한다
엑셀 시트나 CSV 같은 파일의 형태는 In-Memory에 비해 데이터를 저장하는 방식으로 적절해 보인다, 그러나 한계가 분명히 존재한다
데이터가 필요할 때마다 전체 파일을 매번 읽어야 한다
파일의 크기가 커질수록 이 작업은 버겁고, 비효율적이어서 File I/O 방식의 큰 단점이 있다
파일이 손상되거나 여러 개의 파일들을 동시에 다뤄야 하거나 하는 등 복잡하고 데이터량이 많아질수록 데이터를 불러들이는 작업이 점점 힘들어 진다
반면에 관계형 데이터베이스에서는 하나의 CSV 파일이나 엑셀 시트를 한 개의 테이블로 저장할 수 있다
한번에 여러 개의 테이블을 가질 수 있기 때문에 SQL 을 활용해 데이터를 불러오기 수월하다
또한, 엑셀 시트와 CSV 파일 등 처럼 특정 형태의 파일은 대용량의 데이터를 저장하기 위한 목적이 아니다
원하는 데이터만 가져올수 없다
모든 데이터를 가져온뒤 서버에서 필터링이 필요하다(서버에 부하가 걸린다)
SQL
Structured Query Language (SQL) 은 데이터베이스 언어로, 주로 관계형 데이터베이스에서 사용한다
예를 들어 MySQL, Oracle, SQLite, PostgreSQL 등 다양한 데이터베이스에서 SQL 구문을 사용할 수 있다
SQL
이란
데이터베이스 용 프로그래밍 언어다
데이터베이스에 쿼리
를 보내 원하는 데이터를 가져오거나 삽입할 수 있다
SQL은 (relation 이라고도 불리는) 데이터가 구조화된(structured) 테이블을 사용하는 데이터베이스에서 활용할 수 있다
SQL을 사용할 수 있는 데이터베이스와 달리, 데이터의 구조가 고정되어 있지 않은 데이터베이스를 NoSQL
이라고 한다
관계형 데이터베이스와는 달리, 테이블을 사용하지 않고 데이터를 다른 형태로 저장한다
NoSQL의 대표적인 예시는 MongoDB
와 같은 문서 지향 데이터베이스다
데이터베이스 세계에서 SQL은 데이터베이스 종류를 SQL이라는 언어 단위로 분류할 정도로 중요한 자리를 차지하고 있다
그리고 SQL을 사용하기 위해서는 데이터가 구조가 고정되어 있어야 한다
SQL은 구조화된 쿼리 언어다
쿼리(Query)란 ?
쿼리(query)란?
쿼리는 '질의문' 이라는 뜻을 가지고 있다
예를 들면 검색할 때 입력하는 검색어가 일종의 쿼리다, 검색을 할 때, 기존에 존재하는 데이터를 검색어로 필터링한다 따라서, 쿼리는 저장되어 있는 데이터를 필터하기 위한 질의문으로도 볼 수 있다
SQL Basics
SQL을 사용에 필요한 기본 문법
- Where
- And, Or, Not
- Order By
- Insert Into
- Null Values
- Update
- Delete
- Count
- Like
- Wildcards
- Aliases
- Joins
- Inner Join
- Left Join
- Right Join
- Group By
데이터베이스 관련 용어
- SQL Create DB
- SQL Drop DB
- SQL Create Table
- SQL Drop Table
- SQL Alter Table
- SQL Not Null
- SQL Unique
- SQL Primary Key
- SQL Foreign Key
- SQL Default
- SQL Auto Increment
- SQL Dates
데이터베이스 관련 명령어
데이터베이스 생성
데이터베이스 생성
CREATE DATABASE
데이터베이스_이름;
데이터베이스 사용
데이터베이스 사용
USE
데이터베이스_이름;
데이터베이스를 이용해 테이블을 만들거나 수정하거나 삭제하는 등의 작업을 하려면, 먼저 데이터베이스를 사용하겠다는 명령을 전달해야 한다
테이블 생성
테이블은 필드(표의 열)와 함께 만들어야 한다
user 테이블 예시
필드이름 | 필드타입 | 그 외의 속성 |
---|---|---|
id | 숫자 | primary key이면서 자동 증가하도록 설정 |
name | 문자열 (최대 255개의 문자) | |
문자열 (최대 255개의 문자) |
테이블 생성
CREATE TABLE user ( id int PRIMARY KEY AUTO_INCREMENT, name varchar(255), email varchar(255) );
SQL 콘솔에서 Enter 키를 이용해 여러 줄의 코드를 입력할 수 있다 위와 같이 입력하고, 다음에서 설명할 DESCRIBE
명령어를 이용해 테이블 정보를 확인한다
테이블 정보 확인
테이블 정보 확인
DESCRIBE user
;
user 테이블의 정보를 확인
mysql> describe user;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
| email | varchar(255) | YES | | NULL | |
+-------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
SQL 명령어
SELECT
SELECT는 데이터셋에 포함될 특성을 특정한다
일반문자열
SELECT
'hello world'
숫자
SELECT
2
간단한 연산
SELECT
15 + 3
FROM
테이블과 관련한 작업을 할 경우 반드시 입력해야 한다
FROM 뒤에는 결과를 도출해낼 데이터베이스 테이블을 명시한다
특정 특성을 테이블에서 사용
SELECT
특성_1
FROM
테이블_이름
몇 가지의 특성을 테이블에서 사용
SELECT
특성_1, 특성_2
FROM
테이블_이름
테이블의 모든 특성을 선택
SELECT
*
FROM
테이블_이름
*
는 와일드카드 (wildcard) 로 전부 선택할 때에 사용
WHERE
필터 역할을 하는 쿼리문, WHERE은 선택적으로 사용할 수 있다
특정 값과 동일한 데이터 찾기
SELECT
특성_1, 특성_2
FROM
테이블_이름
WHERE
특성_1 = "특정 값"
특정 값을 제외한 값을 찾기
SELECT
특성_1, 특성_2
FROM
테이블_이름
WHERE
특성_2 <> "특정 값"
특정 값보다 크거나 작은 데이터를 필터할 때에는
'<'
,'>'
, 비교하는 값을 포함하는 '이상', '이하' 값은'<='
,'>='
을 사용
SELECT
특성_1, 특성_2
FROM
테이블_이름
WHERE
특성_1 > "특정 값"
...
SELECT
특성_1, 특성_2
FROM
테이블_이름
WHERE
특성_1 <= "특정 값"
문자열에서 특정 값과 비슷한 값들을 필터할 때에는
'LIKE'
와'\%'
혹은'\*'
를 사용
SELECT
특성_1, 특성_2
FROM
테이블_이름
WHERE
특성_2 LIKE "%특정 문자열%"
리스트의 값들과 일치하는 데이터를 필터할 때에는
'IN'
을 사용
SELECT
특성_1, 특성_2
FROM
테이블_이름
WHERE
특성_2 IN ("특정값_1", "특정값_2")
값이 없는 경우
'NULL'
을 찾을 때에는'IS'
와 같이 사용
SELECT
*
FROM
테이블_이름
WHERE
특성_1 IS NULL
값이 없는 경우를 제외할 때에는
'NOT'
을 추가해 이용
SELECT
*
FROM
테이블_이름
WHERE
특성_1 IS NOT NULL
ORDER BY
돌려받는 데이터 결과를 어떤 기준으로 정렬하여 출력할지 결정한다
ORDER BY는 선택적으로 사용할 수 있다
기본 정렬은 오름차순
SELECT
*
FROM
테이블_이름
ORDER BY
특성_1
내림차순으로도 정렬할 수 있다
SELECT
*
FROM
테이블_이름
ORDER BY
특성_1 DESC
LIMIT
결과로 출력할 데이터의 갯수를 정할 수 있다
LIMIT은 선택적으로 사용할 수 있으며 쿼리문에서 사용할 때에는 가장 마지막에 추가한다
데이터 결과를 200개만 출력
SELECT
*
FROM
테이블_이름
LIMIT
200
DISTINCT
유니크한 값을 받고 싶을 때에는 SELECT DISTINCT 를 사용할 수 있다
특성_1을 기준으로 유니크한 값들만 선택
SELECT
DISTINCT
특성_1
FROM
테이블_이름
특성_1, 특성_2, 특성_3의 유니크한 '조합' 값들을 선택
SELECT DISTINCT 특성_1 ,특성_2 ,특성_3 FROM 테이블_이름
INNER JOIN
INNER JOIN 이나 JOIN 으로 실행할 수 있다
둘 이상의 테이블을 서로 공통된 부분을 기준으로 연결
SELECT
*
FROM
테이블_1
JOIN
테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B
OUTER JOIN
Outer JOIN 은 다양한 선택지가 있다
'LEFT OUTER JOIN'으로 LEFT INCLUSIVE을 실행
SELECT
*
FROM
테이블_1
LEFT
OUTER JOIN
테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B
'RIGHT OUTER JOIN'으로 RIGHT INCLUSIVE을 실행
SELECT
*
FROM
테이블_1
RIGHT
OUTER JOIN
테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B
Author And Source
이 문제에 관하여(10월 8일 (금) SQL), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@southbig89/10월-8일-금-SQL저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)