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