본문 바로가기
Computing Science

[Computer Science] 데이터베이스 - SQL

by code_pie 2024. 1. 10.

 

SQL(Structure Query Language)

 

SQL은 크게 DML, DDL, DCL로 분류 할 수 있다.

  • 데이터 정의어(DDL: Data Definition Language): 데이터 구조를 생성하거나 삭제, 수정하는 등 데이터의 전체 골격을 결정하는 역할을 하는 언어 (트랜젝션이 발생하는 SQL이 DML이다.)
    • ex) SELECT, INSERT, UPDATE, DELETE

  • 데이터 조작 처리어(DML: Data Manipulation Language): 데이터베이스 사용자가 질의 언어(QL)로 저장한 데이터를 실질적으로 처리할 때에 사용하는 언어. 정의된 데이터베이스에 입력된 데이터를 검색, 삽입, 갱신, 삭제하는 데 사용한다.
    • ex) CREATE, DROP, ALTER

  • 데이터 접근 제어어(DCL: data control language): 데이터베이스에 대한 접근 권한을 부여하고 회수하는 작업을 수행하는 언어. 데이터의 보안, 무결성, 회복 등을 정의하는 데 사용한다.
    • ex) GRANT, REVOKE, DENY

[SQL 사용 예시]

  • SQLDB 생성

 

 

-- 학생 테이블
CREATE TABLE STUDENTTBL
(
    name VARCHAR2(10) NOT NULL, 
    studentID NUMBER(5) NOT NULL,
    ...
    class NUMBER(1) NOT NULL
    CONSTRAINT STUDENTTBL_pk PRIMARY KEY (studentID);
);

-- 성적 테이블
CREATE TABLE SCORETBL
(
    studentID NUMBER(5) NOT NULL, -- 학번(FK)
    ...
    CONSTRAINT SCORETBL_fk foreign key(studentID) references STUDENTTBL(studentID)
);  
--CONSTRAINT [FK 명] foreign KEY([FK 컬럼명]) references [PK가 위치하는 테이블] ([PK 컬럼명]);

-- 구매 테이블
...

 

  • SQLDB에 데이터 삽입
INSERT INTO STUDENTTBL VALUES('최두학', '91784', '비전공, 'Python', '국어국문학과', '11111111', '남', 1);
...
INSERT INTO SCORETBL VALUES('33324', '비전공', 'Python', 80, 60);

 

  • DB에서 데이터 조회
SELECT name, studentID
FROM STUDENTTBL;

STUDENTTBL에서 name, studentID 열만 조회한다.


 
SELECT name AS "이름"
FROM STUDENTTBL;

name 칼럼의 칼럼명을 "이름"으로 바꿔서 데이터를 조회한다.


 
SELECT *
FROM STUDENTTBL;
WHERE name = '최두학';

여기서 SELECT 뒤에 *을 사용하면 STUDENTTBL이라는 테이블에서 모든 칼럼에 대한 데이터를 조회한다.

그리고 WHERE name='최두학';은 name 칼럼의 데이터가 '최두학'인 행의 데이터를 조회하라는 의미다.


 
SELECT *
FROM STUDENTTBL;
WHERE language IN ('Python', 'Java');

 

IN을 사용하면 language가 Python 또는 Java인 데이터를 조회한다

SELECT *
FROM SCORETBL;
WHERE monthscore < 60;
-- monthscore BETWEEN 60 AND 100;

SCORETBL에서 monthscore이 60보다 작은 데이터들을 조회한다.

아래와 같이 조건을 적으면 monthscore이 60에서 100사이에 있는 데이터들을 가져온다. 이때 60과 100은 데이터에 포함된다.

 


SELECT *
FROM STUDENTTBL;
WHERE studentID LIKE '%77';
-- studentID LIKE '%77%'
 

STUDENTTBL의 sudentID칼럼에서 뒷자리가 77인 데이터를 조회한다. (%의 자리에 들어오는 데이터는 상관x )

아래와 같이 조건을 적으면 77을 데이터의 일부로 포함한 데이터들을 조회한다.


SQL - JOIN

JOIN에는 INNER JOIN, OUTER JOIN, CROSS JOIN, SELF JOIN등이 있다.

  • 보통 가장 많이 사용하는 JOIN은 INNER조인으로 두 테이블 모두에 지정한 칼럼의 데이터가 있어야 한다.
  • OUTER JOIN은 1개의 테이블에만 데이터가 있어도 결과가 나온다.
  • CROSS JOIN은 조인되는 두 테이블에서 곱집합을 반환한다 즉 M행을 가진 테이블과 N행을 가진 테이블이 조인되면 M*N개의 행을 생성한다.
  • SELF JOIN은 한테이블에서 자기 자신에 조인을 시키는 것이다.

ex) 같은 나라에서 2명의 직원의 모든 쌍을 찾는 경우

* ON과 WHERE의 차이 : SQL문의 순서는 FROM -> ON -> JOIN -> WHERE 순으로 진행되기 때문에 ON절이 순서상으로 더 빠르다. 이와 같은 차이는 데이터를 뽑았을 때, OUTER JOIN을 했을 때 ON을 사용한 경우는 data가 NULL이여도 행이 만들어지지만 WHERE을 사용한 경우는 NULL data가 삭제돼 행이 출력 되지 않는다는 차이가 있다.

 

[참조]

https://bogyum-uncle.tistory.com/16

https://velog.io/@ckstn0777/SQL-%EA%B8%B0%EB%B3%B8-SELECT-%EB%AC%B8

https://hongong.hanbit.co.kr/sql-%EA%B8%B0%EB%B3%B8-%EB%AC%B8%EB%B2%95-joininner-outer-cross-self-join/

https://ko.wikipedia.org/wiki/Join_(SQL)

반응형