분류 sql

SQL이란 무엇입니까? 데이터베이스란?

컨텐츠 정보

  • 조회 445 (작성일 )

본문

관계형 데이터베이스 관리 시스템 (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_NAMELAST_NAME
HarryPotter
HermionieGranger
RonWeasley
DracoMalfoy
CedricDiggory

또는 테이블의 모든 필드를 선택하려는 경우 명령은 모든 필드 선택을 나타내는 "*"구문을 사용합니다.


SELECT * FROM Students;


FIRST_NAMELAST_NAMELOGINAGEGPAHOUSE
HarryPottertheboywholived154Gryffindor
HermionieGrangergranger2154.5Gryffindor
RonWeasleyweasley7153.7Gryffindor
DracoMalfoymalfoy999154Slytherin
CedricDiggorydiggory123154Hufflepuff


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_NAMELAST_NAMELOGINAGEGPAHOUSE
HarryPottertheboywholived154Gryffindor
HermionieGrangergranger2154.5Gryffindor
RonWeasleyweasley7153.7Gryffindor

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_NAMELAST_NAMELOGINAGEGPAHOUSE
HarryPottertheboywholived154Gryffindor
HermionieGrangergranger2154.5Gryffindor



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_NAMELAST_NAMELOGINAGEGPAHOUSE
DracoMalfoymalfoy999154Slytherin
CedricDiggorydiggory123154Hufflepuff


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_NAMELAST_NAME
HarryPotter
HermionieGranger


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_NAMELAST_NAMELOGINAGEGPAHOUSE
HarryPottertheboywholived154Gryffindor
HermionieGrangergranger2154.5Gryffindor
RonWeasleyweasley7153.7Gryffindor


기타 유용한 명령 


Order By : 결과를 오름차순 또는 내림차순으로 정렬합니다.


  • Syntax
SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;
  • Example
SELECT * FROM Students ORDER BY first_name;


FIRST_NAMELAST_NAMELOGINAGEGPAHOUSE
CedricDiggorydiggory123154Hufflepuff
DracoMalfoymalfoy999154Slytherin
HarryPottertheboywholived154Gryffindor
HermionieGrangergranger2154.5Gryffindor
RonWeasleyweasley7153.7Gryffindor

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
3Gryffindor
1Hufflepuff
1Slytherin


마지막으로, 위의 모든 명령이 작동하는 것을 보여주는 DB Fiddle이 있습니다!


정규화 된 데이터베이스와 비정규 화 된 데이터베이스 


데이터베이스를 디자인 할 때 따를 수 있는 두 가지 주요 디자인 패턴이 있으며 각각 고유 한 장단점이 있습니다.


정규화 : 읽기 시간이 아니라 중복성을 최소화하도록 최적화 합니다.


해당 코스를 가르치는 교사의 교사 ID가있는 코스 테이블이 있다고 가정 해 보겠습니다. 또한 교사 이름이 있는 교사 데이터베이스도 있습니다.


특정 코스를 가르치는 교사의 이름을 얻으려면 코스 테이블에 교사 이름이 없기 때문에 Courses 및 Teachers 테이블을 모두 쿼리해야 합니다 (효율적이지만 중복 됨).


비정규화 : 중복성을 최소화하지 않고 읽기 시간을 최적화 합니다.


교사 ID와 교사 이름이 있는 강좌 테이블이 있다고 가정 해 보겠습니다. 교사 이름도 포함 된 교사 데이터베이스가 있습니다. 과정에서 교사의 이름을 얻으려면 과정 테이블을 사용하면 됩니다 (중복되지만 효율적 임).


데이터 무결성 


상호 작용하는 데이터가 안전하고 정확하며 합리적이라는 것은 사용자에게 매우 중요합니다. 예는 나이가 음수가 아니거나 두 명의 학생이 동일한 정보를 가지고 있지 않은지 확인하는 것입니다. 이를 데이터 무결성이라고 합니다.


데이터 무결성은 여러 가지 형태를 취하며 다음 네 가지 범주로 나눌 수 있습니다.


  • 엔티티 무결성 : 테이블에 중복 행이 없습니다. 예를 들어 Ron Weasley를 데이터베이스에 두 번 삽입 할 수 없습니다.
  • 도메인 무결성 : 올바른 값을 적용하기 위해 삽입 할 수 있는 값 유형을 제한합니다. 예를 들어, House는 Gryffindor, Ravenclaw, Slytherin 또는 Hufflepuff 만 될 수 있습니다.
  • 참조 무결성 : 다른 레코드에서 사용하는 레코드는 삭제할 수 없습니다. 현재 강의를 가르치는 교사는 삭제할 수 없습니다.
  • 사용자 정의 무결성 : 데이터베이스에 대한 비즈니스 관련 논리 및 규칙으로 구성된 "기타"범주.


일반적인 SQL 데이터베이스 


  • Oracle : 매우 안정적이고 성숙하지만 비용이 많이 들 수 있음
  • MySQL : 가볍고 설정이 빠르지만 Oracle만큼 성숙하지는 않습니다.
  • PostgreSQL : 특정 사용 사례에 적합하지만 매우 빠르지는 않습니다.

자원 

최신 상태 유지 


  • Reddit 스레드 : 데이터베이스, SQL 및 신기술에 대한 훌륭한 스레드
  • Hacker News : 기술 산업의 최신 개발에 대해 계속 알 수 있는 정말 훌륭한 리소스
  • CodePen : 좋은 SQL 사례를 발견하기 위한 훌륭한 리소스입니다.


https://www.freecodecamp.org/news/sql-and-databases-explained-in-plain-english/