SQL이란 무엇입니까? 데이터베이스란?
본문
관계형 데이터베이스 관리 시스템 (RDBMS)은 일반 영어로 설명됩니다.
데이터베이스는 머리를 감싸기 까다로울 수 있습니다. 그러나 풀 스택 프로그래밍과 데이터를 저장하는 백엔드 서비스 구축에 필수적입니다.
이 게시물에서는 SQL, 데이터베이스 및 관계형 데이터베이스 관리 시스템에 대해 설명하겠습니다. 또한 Harry Potter 자신과 그가 Hogwarts에서 수강 하는 일부 수업을 포함하여 Wizarding World와 유사한 몇 가지 비유를 사용할 것입니다.
주요 용어에 대해 알아보기 전에 데이터베이스 자체가 무엇인지 정의 해 보겠습니다.
데이터베이스는 특히 다양한 방법으로 액세스 할 수 있는 컴퓨터에 보관 된 구조화 된 데이터 집합입니다. 이것은 본질적으로 컴퓨터의 조직화 된 데이터 집합이며 컴퓨터 시스템에서 전자적으로 액세스 할 수 있습니다.
핵심 용어
다음은 시작할 주요 용어입니다.
- RDMS : 관계형 데이터베이스 관리 시스템. 이 데이터베이스 프레임 워크는 MySQL의 기반입니다.
- SQL : 구조적 쿼리 언어.
- Tables : 데이터를 전달하는 데이터베이스 개체. 테이블 이름의 예는 "Students", "Teachers"또는 "Courses"입니다.
- Fields : 테이블의 값을 필드라고 합니다. 학생의 예제 필드는 "이름", "성"및 "GPA"입니다.
- Record/Row : 테이블의 개별 항목입니다.
데이터베이스에 교사 및 코스를 추가 한 후 학생, 교사 및 코스에 대한 테이블을 만들 수 있습니다.
가이드를 진행하면서 여기에서는 학생 예제를 참조로만 사용할 것입니다. 운이 좋게 Hogwarts에서 소프트웨어 엔지니어로 고용 된 경우 데이터베이스에서 다음 명령 중 일부를 잘 활용할 수 있습니다 .D
SQL 문
Syntax
세미콜론은 SQL 문을 다른 SQL 문과 구분하는 표준 방법입니다. 동일한 호출에서 여러 SQL 문을 실행할 수 있습니다. 이 가이드에서는 각 문 끝에 세미콜론이 있습니다.
가장 중요한 SQL 명령
Create : 새 SQL 테이블을 만듭니다.
예를 들어 Hogwarts School에 대한 학생 데이터베이스를 생성하는 경우 CREATE를 사용하여 "Students"라는 테이블을 만듭니다.
- Syntax
CREATE TABLE table_name (
column1 datatype,
column2 datatype,
column3 datatype,
....
);
- Example
CREATE TABLE Students
(first_name VARCHAR(255),
last_name VARCHAR(255),
login VARCHAR(255),
age INTEGER,
gpa REAL,
house VARCHAR(255));
Drop : 테이블을 삭제합니다. 이 명령을 사용하면 테이블의 모든 데이터가 지워지므로 주의하십시오!
전체 Student 데이터베이스를 삭제하려면 DROP을 사용하여 해당 작업을 수행합니다.
- Syntax
DROP TABLE table_name;
- Example
DROP TABLE Students;
Insert : 테이블에 새 데이터 행을 추가합니다.
새로운 학생들이 Hogwarts에 등록 할 때 INSERT를 사용하여 추가합니다.
- Syntax
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
- Example
INSERT
INTO Students(first_name, last_name, login, age, gpa, house)
VALUES
('Harry', 'Potter', 'theboywholived', 15, 4.0, 'Gryffindor'),
('Hermionie', 'Granger','granger2', 15, 4.5, 'Gryffindor'),
('Ron', 'Weasley','weasley7', 15, 3.7, 'Gryffindor'),
('Draco', 'Malfoy', 'malfoy999', 15, 4.0, 'Slytherin'),
('Cedric', 'Diggory','diggory123', 15, 4.0, 'Hufflepuff');
Select : 데이터베이스에서 데이터를 가져와 테이블 형식으로 반환하는 데 사용됩니다.
Gryffindor House에있는 모든 학생 이름을 검색하려면 SELECT 명령을 사용합니다. 아래 예제는 데이터베이스에 있는 모든 학생의 이름과 성을 위해 Students 테이블을 쿼리합니다. 우리에게는 위에서 설명한 5 개 행만 있습니다.
- Syntax
SELECT column1, column2, ...
FROM table_name;
- Example
SELECT first_name, last_name FROM Students;
FIRST_NAME | LAST_NAME |
---|---|
Harry | Potter |
Hermionie | Granger |
Ron | Weasley |
Draco | Malfoy |
Cedric | Diggory |
또는 테이블의 모든 필드를 선택하려는 경우 명령은 모든 필드 선택을 나타내는 "*"구문을 사용합니다.
SELECT * FROM Students;
FIRST_NAME | LAST_NAME | LOGIN | AGE | GPA | HOUSE |
---|---|---|---|---|---|
Harry | Potter | theboywholived | 15 | 4 | Gryffindor |
Hermionie | Granger | granger2 | 15 | 4.5 | Gryffindor |
Ron | Weasley | weasley7 | 15 | 3.7 | Gryffindor |
Draco | Malfoy | malfoy999 | 15 | 4 | Slytherin |
Cedric | Diggory | diggory123 | 15 | 4 | Hufflepuff |
Clauses
절은 SQL 문의 논리적 청크이며 이론적으로는 선택적 필드입니다.
위의 문장에서 우리는 단순히 Student 데이터베이스의 모든 필드를 반환했습니다. 반환 되는 값에 대한 조건을 지정하지 않았습니다.
모든 학생이 아니라 집이 그리핀도르 인 학생에게만 쿼리 하려면 어떻게 해야 합니까? 이름이 "H"로 시작하는 학생 또는 Hufflepuff 및 Slytherin의 학생을 쿼리 하는 것은 어떻습니까? 이러한 더 복잡한 경우는 SQL 절로 해결됩니다.
아래는 가장 일반적인 절에 대한 개요이지만 SQL 언어에는 몇 가지 절이 더 있습니다. 더 많은 정보가 필요한 경우 다음은 좋은 일반 개요입니다.
Examples of Clauses
Where : 데이터베이스에서 데이터를 가져 오는 동안 조건을 설명하는 데 사용됩니다. Select를 사용한 예제로 돌아가서 집을 Gryffindor로 지정하려면 WHERE를 사용해야 합니다.
- Syntax
SELECT column1, column2, ...
FROM table_name
WHERE condition;
- Example
SELECT * FROM Students
WHERE house='Gryffindor';
FIRST_NAME | LAST_NAME | LOGIN | AGE | GPA | HOUSE |
---|---|---|---|---|---|
Harry | Potter | theboywholived | 15 | 4 | Gryffindor |
Hermionie | Granger | granger2 | 15 | 4.5 | Gryffindor |
Ron | Weasley | weasley7 | 15 | 3.7 | Gryffindor |
AND로 구분 된 모든 조건이 참인 SQL 문에서 여러 절을 결합하는 데 사용됩니다. 우리는 3.8 GPA 이상의 Gryffindor 학생을 얻기 위해 AND를 사용합니다.
- Syntax
SELECT column1, column2, ...
FROM table_name
WHERE condition1 AND condition2 AND condition3 ...;
- Example
SELECT * FROM Students
WHERE house='Gryffindor' AND gpa>3.8;
FIRST_NAME | LAST_NAME | LOGIN | AGE | GPA | HOUSE |
---|---|---|---|---|---|
Harry | Potter | theboywholived | 15 | 4 | Gryffindor |
Hermionie | Granger | granger2 | 15 | 4.5 | Gryffindor |
Or : AND와 유사하지만 OR로 구분 된 조건 중 하나만 참인 데이터 만 반환합니다. Hufflepuff와 Slytherin에서 학생을 검색하고 싶지만 둘 다 검색하지 않으려면 OR 명령을 사용합니다.
- Syntax
SELECT column1, column2, ...
FROM table_name
WHERE condition1 OR condition2 OR condition3 ...;
- Example
SELECT * FROM Students
WHERE house='Slytherin' OR house='Hufflepuff';
FIRST_NAME | LAST_NAME | LOGIN | AGE | GPA | HOUSE |
---|---|---|---|---|---|
Draco | Malfoy | malfoy999 | 15 | 4 | Slytherin |
Cedric | Diggory | diggory123 | 15 | 4 | Hufflepuff |
Like : WHERE와 함께 사용하여 특정 패턴을 검색합니다. 이름이 "H"로 시작하는 마법사 / 마녀의 이름과 성을 원하면 Like 명령을 사용할 수 있습니다.
- Syntax
SELECT column1, column2, ...
FROM table_name
WHERE columnN LIKE pattern;
- Example
SELECT first_name, last_name FROM Students
WHERE first_name LIKE 'H%';
FIRST_NAME | LAST_NAME |
---|---|
Harry | Potter |
Hermionie | Granger |
Count : 테이블에서 열 (또는 열)의 개수를 찾는 데 사용됩니다.
- Syntax
SELECT COUNT(column_name)
FROM table_name
WHERE condition;
- Example
SELECT COUNT(first_name) FROM Students;
COUNT(FIRST_NAME) |
---|
5 |
동일한 구문을 사용하는 다른 두 명령은 AVG 및 SUM입니다. AVG는 모든 값의 평균을 계산하고 sum은 모든 값의 합계를 계산합니다.
Select Limit : 지정된 양으로 만 응답을 차단하는 데 사용됩니다. 상위 응답이 선택되는 방식은 먼저 데이터베이스에 시간순으로 삽입되는 순서입니다.
- Syntax
SELECT column_name(s)
FROM table_name
WHERE condition
LIMIT number;
- Example
SELECT * FROM Students LIMIT 3;
FIRST_NAME | LAST_NAME | LOGIN | AGE | GPA | HOUSE |
---|---|---|---|---|---|
Harry | Potter | theboywholived | 15 | 4 | Gryffindor |
Hermionie | Granger | granger2 | 15 | 4.5 | Gryffindor |
Ron | Weasley | weasley7 | 15 | 3.7 | Gryffindor |
기타 유용한 명령
Order By : 결과를 오름차순 또는 내림차순으로 정렬합니다.
- Syntax
SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;
- Example
SELECT * FROM Students ORDER BY first_name;
FIRST_NAME | LAST_NAME | LOGIN | AGE | GPA | HOUSE |
---|---|---|---|---|---|
Cedric | Diggory | diggory123 | 15 | 4 | Hufflepuff |
Draco | Malfoy | malfoy999 | 15 | 4 | Slytherin |
Harry | Potter | theboywholived | 15 | 4 | Gryffindor |
Hermionie | Granger | granger2 | 15 | 4.5 | Gryffindor |
Ron | Weasley | weasley7 | 15 | 3.7 | Gryffindor |
Group By : 동일한 값을 가진 범주를 행으로 그룹화합니다. 각 집의 학생 수 (예 : Gryffindor의 경우 3 명)를 알고 싶다면 Group By 명령을 사용할 수 있습니다.
- Syntax
SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
ORDER BY column_name(s);
- Example
SELECT COUNT(first_name), house FROM Students GROUP BY house;
COUNT(FIRST_NAME) | HOUSE |
---|---|
3 | Gryffindor |
1 | Hufflepuff |
1 | Slytherin |
마지막으로, 위의 모든 명령이 작동하는 것을 보여주는 DB Fiddle이 있습니다!
정규화 된 데이터베이스와 비정규 화 된 데이터베이스
데이터베이스를 디자인 할 때 따를 수 있는 두 가지 주요 디자인 패턴이 있으며 각각 고유 한 장단점이 있습니다.
정규화 : 읽기 시간이 아니라 중복성을 최소화하도록 최적화 합니다.
해당 코스를 가르치는 교사의 교사 ID가있는 코스 테이블이 있다고 가정 해 보겠습니다. 또한 교사 이름이 있는 교사 데이터베이스도 있습니다.
특정 코스를 가르치는 교사의 이름을 얻으려면 코스 테이블에 교사 이름이 없기 때문에 Courses 및 Teachers 테이블을 모두 쿼리해야 합니다 (효율적이지만 중복 됨).
비정규화 : 중복성을 최소화하지 않고 읽기 시간을 최적화 합니다.
교사 ID와 교사 이름이 있는 강좌 테이블이 있다고 가정 해 보겠습니다. 교사 이름도 포함 된 교사 데이터베이스가 있습니다. 과정에서 교사의 이름을 얻으려면 과정 테이블을 사용하면 됩니다 (중복되지만 효율적 임).
데이터 무결성
상호 작용하는 데이터가 안전하고 정확하며 합리적이라는 것은 사용자에게 매우 중요합니다. 예는 나이가 음수가 아니거나 두 명의 학생이 동일한 정보를 가지고 있지 않은지 확인하는 것입니다. 이를 데이터 무결성이라고 합니다.
데이터 무결성은 여러 가지 형태를 취하며 다음 네 가지 범주로 나눌 수 있습니다.
- 엔티티 무결성 : 테이블에 중복 행이 없습니다. 예를 들어 Ron Weasley를 데이터베이스에 두 번 삽입 할 수 없습니다.
- 도메인 무결성 : 올바른 값을 적용하기 위해 삽입 할 수 있는 값 유형을 제한합니다. 예를 들어, House는 Gryffindor, Ravenclaw, Slytherin 또는 Hufflepuff 만 될 수 있습니다.
- 참조 무결성 : 다른 레코드에서 사용하는 레코드는 삭제할 수 없습니다. 현재 강의를 가르치는 교사는 삭제할 수 없습니다.
- 사용자 정의 무결성 : 데이터베이스에 대한 비즈니스 관련 논리 및 규칙으로 구성된 "기타"범주.
일반적인 SQL 데이터베이스
- Oracle : 매우 안정적이고 성숙하지만 비용이 많이 들 수 있음
- MySQL : 가볍고 설정이 빠르지만 Oracle만큼 성숙하지는 않습니다.
- PostgreSQL : 특정 사용 사례에 적합하지만 매우 빠르지는 않습니다.
자원
- SWEPrep - Interview Questions Straight To Your Inbox
- freeCodeCamp's SQL and Databases
- Clean Code
- Effective Java
- Oracle Documentation
- MySql Documentation
- PostgreSQL Documentation
최신 상태 유지
- Reddit 스레드 : 데이터베이스, SQL 및 신기술에 대한 훌륭한 스레드
- Hacker News : 기술 산업의 최신 개발에 대해 계속 알 수 있는 정말 훌륭한 리소스
- CodePen : 좋은 SQL 사례를 발견하기 위한 훌륭한 리소스입니다.
https://www.freecodecamp.org/news/sql-and-databases-explained-in-plain-english/
- 이전글데이터베이스 배우기 21.01.26
- 다음글MongoDB 단기 집중 과정-기본 CRUD 작업 20.10.16