Structured Squery Language 의 줄임말로, 직역하면 '구조화된 쿼리 언어' 이다.
이 쿼리 언어란 DB에서 사용하는 '생성, 삽입, 조회' 등의 명령문으로 DB의 데이터를 관리하거나 조회하는 등의 행위에 사용하는 언어라고 이해할 수 있다.
사실 SQL의 종류라고 해도 실제 프로젝트를 경험해본 바, 이러한 언어들이 있다 로 이해하고 실제 사용하면서 익히는 편이 더 빠르게 학습되었다.
따라서 종류와 사용 방법에 대해서만 빠르게 짚고 넘어가보자.
데이터를 정의할 때 사용하는 종류로 테이블이나 DB를 생성하고 수정, 삭제 등의 행위에 사용한다.
1. Create : Table, View, Index 등을 생성할 때 사용
CREATE DATABASE 데이터베이스명;
CREATE TABLE 테이블명
{
컬럼명 컬럼속성
}
2. DROP : Create 로 만든 속성을 삭제할 때 사용
DROP DATABASE 데이터베이스명;
DROP TABLE 테이블명;
3. ALERT : Create로 만든 속성을 변경할 때 사용
ALTER DATABASE 데이터베이스명 변경조건;
ALTER TABLE 테이블명 ADD 변경조건; -- 테이블에 새로운 컬럼을 추가
ALTER TABLE 테이블명 DROP 변경조건; -- 테이블에서 컬럼을 삭제
ALTER TABLE 테이블명 MODIFY 변경조건; -- 테이블의 컬럼을 수정
ALTER TABLE 테이블명 RENAME 변경조건; -- 테이블의 이름을 변경
DB에 저장된 만든 데이터를 조작할 때 사용한다. 여기서 말하는 조작이란 저장을 포함해 수정, 조회 등의 행위를 말한다.
1. SELECT
가장 많이 쓰이게 될 SQL 키워드로, 테이블에서 원하는 데이터를 조회할 때 사용한다.
SELECT 컬럼목록 FROM 테이블명 [WHERE 조건];
2. INSERT : 테이블에 새로운 데이터를 삽입할 때 사용
INSERT INTO 테이블명 (컬럼목록) VALUES (값목록);
3. DELETE : 특정 조건에 맞는 데이터를 삭제할 때 사용
여기서 말하는 '특정 조건' 이란 WHERE 조건을 말하며 별도의 조건을 붙이지 않는 경우 해당 테이블의 모든 데이터를 삭제한다.
DELETE FROM 테이블명 [WHERE 조건];
4. UPDATE : 특정 조건에 맞는 데이터를 수정할 때 사용
조건에 대한 내용은 3번 DELETE 와 동일하게 동작한다.
UPDATE 테이블명 SET 컬럼 = 값 [WHERE 조건];
DB에 권한과 관련된 문법을 묶어 부른다. 특정 유저가 DB에 접근할 수 있는 권한을 설정할 때 사용하는데, 예를 들자면 유저의 입장에서는 자신의 데이터만을, 관리자는 모든 데이터에 접근이 가능하도록 설정하는 등의 기능을 추가하는 동작을 예시로 들 수 있다.
또한 여기서의 '권한' 은 SELECT, INSERT 등 데이터를 조작하는 행위에 대한 권한을 말한다.
1. GRANT : 특정 유저에게 사용 권한을 부여할 때 사용
GRANT [권한] ON 객체명 TO 사용자;
2. REVOKE : grant 로 준 권한을 취소할 때 사용
REVOKE [권한] ON 객체명 FROM 사용자;
DB의 트랜잭션을 관리하는 문법으로, 트랜잭션의 시작/종료/롤백을 수행할 때 사용한다.
이 트랜잭션은 당장은 간단하게 '여러가지의 작업을 하나처럼 구현' 이라는 키워드로만 설명하고 넘어간다.
1. START TRANSACTION & COMMIT : DB작업의 시작과 끝을 알려줄 때 사용
START TRANSACTION;
...
COMMIT;
START TRANSACTION 을 통해 TCL 문법의 시작을 알리고 중간에 사용할 명령어를 작성한다. 이후 명령이 끝나면 COMMIT 을 통해 다시 TCL 문법이 종료되었음을 나타낸다.
2. ROLLBACK : DB 작업이 비정상적으로 완료되었음을 알릴 때 사용
이렇게 비정상적으로 완료되었을 경우, 해당 SQL 문법을 취소하고 이전 상태로 돌아가는 '롤백' 을 실행한다.
START TRANSACTION;
...
ROLLBACK;
지난 번에 vscode 에 DB를 연결하는 과정까지 진행했었다. 이를 통해 실제 SQL 문법을 활용하는 실습을 진행한다.
사진처럼 사용하려는 DB/테이블에 우클릭 - New Query 를 통해
다음과 같은 파일을 하나 생성한다.
추가로, 여기서 계속 DB, 테이블, 데이터 등을 나눠서 말하고 있는데 혼동이 올 수 있는 정의라 한번 짚고 넘어가보자.
DB 자체를 우리에게 친숙한 '엑셀Excel' 로 비유할 수 있다.
하나의 엑셀 파일을 '데이터 베이스',
하나의 시트를 '테이블',
하나의 행을 '데이터' 라고 말이다.
이를 정리하면 하나의 데이터 베이스 안에 여러개의 테이블이 있고, 그 테이블 안에 여러개의 데이터가 저장되어 있는 것이다.
먼저 데이터베이스를 생성해보자.
CREATE DATABASE NodeJS;
다음과 같이 작성 후 실행시키면
기존 DB 인스턴스 안에 새로운 'NodeJS' 이름의 DB가 하나 생기는 것을 볼 수 있다.
당장은 이 DB를 구성하는 것이 아무것도 없다. 차례대로 테이블과 데이터를 작성해볼 것이다.
CREATE TABLE IF NOT EXISTS courses (
id bigint(5) NOT NULL AUTO_INCREMENT,
title varchar(255) NOT NULL,
tutor varchar(255) NOT NULL,
PRIMARY KEY (id)
);
여기서 보면 'AUTO_INCREMENT' 라는 키워드가 사용됐다.
이는 테이블에서 새 행이 추가될 때(새로운 데이터가 추가될 때) 고유한 숫자값을 자동으로 생성하도록 하는 속성으로, 주로 인덱스의 기능을 하는 '기본 키' 로 사용되는 열에 적용한다.
이후에 데이터 조회를 하는 과정에서 id = 1, 2, 3, ... 으로 나타나는 부분이 있을텐데 이 숫자값을 증가시키는 속성이다.
해당 코드를 실행시키면
우리가 의도했던 대로 courses 라는 테이블 안에 id, title, tutor 이라는 세가지의 컬럼이 적용된 모습을 볼 수 있다.
그럼 조회 기능을 실행하기 전에, 조회할 데이터가 필요할 것이다.
INSERT INTO courses (title, tutor) VALUES
('Spring 기초반', '최원빈'),
('Spring 숙련반', '최원빈'),
('React 기초반', '김예지'),
('React 숙련반', '김예지'),
('Node.js 기초반', '이용우'),
('Node.js 숙련반', '이용우'),
('웹개발 종합반', '이범규'),
('웹개발 종합반 플러스', '이범규');
해당 코드로 데이터를 삽입해주면
터미널에서 다음과 같이 나타나는 것을 볼 수 있는데, 여기서 affectedRows 가 삽입된 데이터의 갯수를 표시한다고 이해하면 된다. 이 코드로 총 8개의 데이터를 추가하였고, 이제 이 데이터들을 SQL로 조회할 것이다.
SELECT * FROM courses;
이번에는 모든 데이터를 조회할 것이기 때문에 별도의 WHERE 구문은 적지 않았다.
코드를 실행시키면
별도의 'Results' 창이 뜨면서 실행 결과가 출력된다.
조건을 추가해보자면
SELECT * FROM courses WHERE tutor='이용우';
다음과 같이 tutor 컬럼이 '이용우' 인 경우만 출력해보도록 할 수 있다.
여기까지 진행하면서 SQL의 간단한 이론과 실습을 통한 기초 사용 방법에 대해 알아보았다.
#6. ORM - Prisma (0) | 2024.12.17 |
---|---|
#5. Raw Query (1) | 2024.12.13 |
#4. SQL 제약 조건 (0) | 2024.12.12 |
#2. 관계형 데이터베이스 RDB, AWS RDS 사용 (3) | 2024.12.04 |
#1. 웹 브라우저, HTTP, 웹 서버/어플리케이션 (1) | 2024.11.20 |