Database

[Database] SQL 이란?, 기본 쿼리문

jungha_k 2022. 10. 5. 14:27

SQL을 배우기 전에, SQL은 데이터베이스를 사용하기 위해 사용되는 '언어'이므로,

데이터베이스가 정확히 무엇인지에 대해 알아야 한다.

 

 

데이터베이스란 ? 

 

데이터베이스(database, DB)? : 여러 사람이 공유하고 사용할 목적으로 통합 관리되는 정보의 집합

일반적으로 데이터베이스 관리 시스템(DBMS)에 의하여 제어되며,

컴퓨터 시스템에 전자적으로 저장된다.

 

 

 

예를 들어 우리가 포털 사이트 같은 곳에 가입할때,

아이디, 비밀번호, 주소 ... 같은 정보들은 모두 서버에 저장되는 것이 아닌

데이터베이스에 저장된다.

 

로그인 같이 '나의 정보'가 필요할때마다, 서버가 데이터베이스에서 

필요한 정보를 요청하여 데이터를 꺼내다가 쓰기 때문이다. 

 

사이트에 회원이 오직 나 한명이 있는 것도 아니고, 데이터의 양이 (매우매우) 방대하기 때문에 

해당 사이트 관리자들이 데이터를 조회하고, 사용할 수 있는 정보의 저장소가 필요한 것이다.


데이터베이스가 필요한 이유

 

이와같이 데이터베이스가 필요한 이유를 조금 더 풀어서 설명하자면,

 

1.  In-Memory 방식도 있잖아요!!?

자바스크립트에서는 프로그램이 실행될 때에만 존재하는 데이터가 있다.

프로그램 종료시 이 데이터도 날라가버림! (데이터 보호, 데이터 제때 받아오기 X)

 

2. File I/O : (파일을 읽는 방식으로 작동) 으로는 안될까요?!

필요한 데이터를 제때 뽑아오는게 아닌

매-번 전체 파일을 읽어야 함. 파일 크기가 클 수록 버겁고, 비효율적

 

 

따라서 대용량의 데이터, 데이터 손실 or 손상 방지를 위해 '데이터베이스'를 사용하는 것!

 

데이터베이스는 크게 

로 나뉘는데, SQL 은 주로 관계형 데이터베이스를 기반으로 사용되는 언어이다. 

 


SQL이란? 

 

이제 본격적으로 SQL 에 대해서 알아보자.

SQL = Structured Query Language 의 줄임말로, "구조화된 Query 언어" 를 뜻한다.

 

Query란 말그대로하면 질의문 인데, 

데이터베이스에서 적절하게 원하는 데이터들을 뽑아내올 수 있는 (=필터링) 하기 위한 질문이다.

우리가 흔히 검색창에 적는 검색어도 Query문이라고 할 수 있다. 

 

따라서 SQL = 데이터베이스 용 프로그래밍 언어 인 것이다!

 

우리는 SQL을 통해 데이터베이스에 쿼리를 보내 원하는 데이터를 

삽입하거나, 가져올 수 있다.

SQL 을 사용하기 위해서는 데이터의 구조가 고정되어야 한다.  

 


 

SQL 기본 쿼리문

 

 

 

 

기본 쿼리문을 설명하기 전에 간단한 ERD를 가져와봤다.

관계형 데이터베이스는 이렇게 각각의 테이블(Entity)별로 관계가 설정되어 있는데,

보통 하나의 프로젝트 개발을 착수하기 전에 테이블의 구조(ERD)를 짜게된다.

 

예를 들어 위의 예시 ERD가 도서 판매 플랫폼의 사이트라고 할 때,

Book에 담긴 테이블을 보면 여러 책들에 대한 데이터가 담겨있다.

Book 테이블 하나의 db를 보면 (아래 사진)

 

 

이렇게 여러 책에 대한 데이터들이 담겨있는데, 

ISBN, Author, Title 등 각각의 요소를 컬럼(Column)이라 한다.

 

저자(Author)별로 데이터를 정렬해서 받아온다던가,

1900년대 이후의 책만 보고 싶다던가 

 

말그대로 '필터링'이 필요할 때 SQL문을 쓰는 것이다. 

 


 

SQL 프로그램을 직접 설치하여 데이터들을 받아다가 한번 쳐보는 것을 권장한다.

억지로 외우려고 했던 때 보다 프로그램에서 직접 쳐서 한번 돌려보는 것이

훨씬 이해가 쉬웠던 것 같다.

 

https://www.w3schools.com/sql/sql_exercises.asp

 

SQL Exercises

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com

여기서 실습해보기 좋았다!

 

 

데이터베이스 생성 및 사용 

CREATE DATABASE 데이터베이스_이름;
USE 데이터베이스_이름;

 

 

테이블 생성

CREATE TABLE user (
  id int PRIMARY KEY AUTO_INCREMENT,
  name varchar(255),
  email varchar(255)
);

= user라는 테이블을 생성하는데,

컬럼은 총 3개이다 (id / name / email)

컬럼명 옆에는 각각의 타입과 크기, 이외의 속성들을 적어준다. 

 

 

테이블 정보 확인

DESCRIBE 데이터베이스_이름;
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)

방금 만든 user 테이블의 정보를 확인할 수 있다.

 


SQL 명령어

 

Select - 데이터셋이 포함될 특성을 특정

From - 데이터베이스 테이블 명시

Where - 필터 역할

 

SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_1 = "특정 값"
---------------------------
ex)

SELECT Author, Title
From Book
WHERE Author = "Dickens"

====================================================
Book 테이블에서 Author가 "Dickens"인 데이터를 가져오는데, 
Author, Title 두 개의 컬럼만 보여준다.

 

 

SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_2 <> "특정 값"

특정 값을 제외한 값을 찾기

 

 

SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_1 > "특정 값"

SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_1 <= "특정 값"

특정 값보다 크거나 작은 데이터를 필터

 

 

SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_2 LIKE "%특정 문자열%"

문자열에서 특정 값과 비슷한 값들을 필터

'LIKE'와 '\%' 혹은 '\*' 을 사용

 

 

SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_2 IN ("특정값_1", "특정값_2")

리스트의 값들과 일치하는 데이터를 필터

 

 

** 데이터값이 Null인 것을 찾을 때
SELECT *
FROM 테이블_이름
WHERE 특성_1 IS NULL

-----------------------------

** Null이 아닌 것을 찾을때
SELECT *
FROM 테이블_이름
WHERE 특성_1 IS NOT NULL

IS NULL / IS NOT NULL

 

 

SELECT *
FROM 테이블_이름
ORDER BY 특성_1
------------------
SELECT *
FROM 테이블_이름
ORDER BY 특성_1 DESC

ORDER BY - 데이터를 정렬하여 출력한다.

기본값은 오름차순, 뒤에 DESC 붙이면 내림차순

 

 

SELECT *
FROM 테이블_이름
LIMIT 200

LIMIT : 출력할 데이터 갯수를 정한다 (예시에서는 200개만 출력)

 

 

SELECT
  DISTINCT
    특성_1
    ,특성_2
    ,특성_3
FROM 테이블_이름

DISTINCT : 유니크한 값을 받아오기 (중복되는 값을 제거하고 출력)

 

 

 

Join은 간단히 설명하자면.. 하나의 테이블에서 필터링한 값을 가져오는 것이 아닌

적어도 두 개의 테이블의 데이터들을 합치거나 빼서 필터링한 값을 가져오는 것!

 

 

SELECT *
FROM 테이블_1
JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B

INNER JOIN

 

 

SELECT *
FROM 테이블_1
LEFT OUTER JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B

OUTER JOIN (종류가 다양하다)

 

 


SELECT c.CustomerId, c.FirstName, count(c.City) as 'City Count'
FROM customers AS c
JOIN employees AS e ON c.SupportRepId = e.EmployeeId
WHERE c.Country = 'Brazil'
GROUP BY c.City
ORDER BY 3 DESC, c.CustomerId ASC
LIMIT 3

여러 쿼리문들을 조합해보면 이렇게 긴 쿼리문도 써질 수도 있는데

 

다음은 Brazil에서 온 고객을 도시별로 묶은 뒤에, 각 도시 수에 따라 내름차순 정렬하고,

그리고 CustomerId에 따라 오름차순으로 정렬한 3개의 결과만 요청하는 예시이다.

 

쿼리문이 너무 길 경우 SQL 실제 실행 순서대로 해석하면 

정확히 어떤 데이터를 요청하는 것인지 도움이 된다. 

 


SQL 실제 실행 순서

 

  • FROM : 각 테이블 확인
  • ON : 조인 조건 확인
  • JOIN : 테이블 조인 (병합)
  • WHERE : 데이터 추출 조건 확인
  • GROUP BY : 특정 칼럼으로 데이터 그룹화
  • HAVING : 그룹화 이후 데이터 추출 조건 확인
  • SELECT : 데이터 추출
  • DISTINCT : 중복 제거
  • ORDER BY : 데이터 정렬