데이터베이스
- 데이터를 구조적으로 모아둔 데이터 집합소
- 대표적인 데이터 베이스 종류
- 관계형 데이터베이스
- NoSQL
관계형 데이터베이스 (RDB)
관계형 데이터베이스(Relational Database)는 데이터를 열과 행을 가진 테이블 형태로 표현하며, 구조적으로 데이터 관리를 한다.
* 용어
(A) : 테이블, 릴레이션
(B) : 로우(행), 레코드, 튜플
(C) : 컬럼(열), 속성
관계형 데이터베이스 관리 시스템 (RDBMS)
- 데이터베이스는 단순히 데이터를 저장하는 저장소이며, 이러한 데이터베이스의 데이터에 접근할 수 있도록 해주는 도구를 데이터베이스 관리 시스템(DBMS)이라 한다.
- 관계형 데이터베이스를 관리하는 시스템을 RDBMS라고 부른다.
- 주요 기능은 데이터 추가, 수정, 삭제, 조회, 데이터 무결성 유지, 트랜잭션 관리, 백업 및 복원, 보안 등이 있다.
- RDBMS 종류
- Oracle
- MySQL
- Microsoft SQLServer
- PostgreSQL
SQL
SQL(Structured Query Language)이란 RDBMS의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이다.
- SQL 문법 종류
언어 | 명령어 |
데이터 정의 언어 (DDL:Data Definnition Language) |
CREATE, DROP, ALTER |
데이터 조작 언어 (DML:Data Manipulation Language) |
SELECT, INSERT, UPDATE, DELETE |
데이터 제어 언어 (DCL:Data Control Language) |
GRANT, REVOKE |
🔍 CRUD
- Create(생성), Read(읽기), Update(갱신), Delete(삭제)
- 대부분의 컴퓨터 소프트웨어가 가지는 기본적인 데이터 처리 기능을 묶어서 CRUD라 말한다.
- 사용자 인터페이스가 갖추어야 할 기능(정보의 참조/검색/갱신)을 가리키는 용어로서도 사용된다.
이름 | 조작 | 명령어 |
Create | 생성 | INSERT |
Read | 읽기 | SELECT |
Update | 갱신 | UPDATE |
Delete | 삭제 | DELETE |
CREATE, DROP
-- 데이터베이스 생성
CREATE DATABASE [DATABASE_NAME];
ex) CREATE DATABASE test_db;
-- 테이블 생성
CREATE TABLE [TABEL_NAME] ([COLUMN_NAME][DATA_TYPE]); -- DATE_TYPE: 숫자(int),문자(char), 날짜(date)
ex) CREATE TABLE test_tb (name char(20), age int);
-- 데이터베이스/테이블 삭제
DROP [DATABASE/TABLE] [NAME];
ex) DROP TABLE test_tb;
- 데이터베이스 선택하기
- use [데이터베이스 이름];
- select datablase();
- 데이터베이스/테이블을 확인하기
- show databasese;
- show tables;
- 테이블 구조를 확인하기
- desc [테이블 이름];
INSERT, SELECT, UPDATE, DELETE
-- 데이터 삽입
INSERT INTO [TABLE_NAME] ([COLUMN1]...) VALUES ([DATA1]...);
ex) INSERT INTO test_tb (name,age) VALUES ('lim',30);
- 칼럼명은 생략할 수 있으며, 생략할 경우 values를 칼럼 순서대로 넣어줘야 한다.
-- 데이터 조회
SELECT [COLUMN1] FROM [TABLE_NAME] WHERE [CONDITION];
ex) SELECT * FROM test_tb;
ex) SELECT name,age FROM test_tb;
- 모든 컬럼을 조회하고 싶다면 컬럼명에 *을 사용한다.
- 특정 컬럼만 조회하고 싶다면 where절을 넣어준다.
-- 데이터 수정
UPDATE [TABLE_NAME] SET [COLUMN1]=[DATA1] WHERE [CONDITION];
ex) UPDATE test_tb SET age=35 WHERE name='kim';
- where절을 생략할 경우 예시에서 모든 칼럼의 age가 35로 수정된다.
-- 데이터 삭제
DELETE FROM [TABEL_NAME] WHERE [CONDITION];
ex) DELETE FROM test_tb;
ex) DELETE FROM test_tb WHERE name='kim';
- where절을 생략할 경우 해당 테이블의 모든 데이터가 삭제된다.
연산자
- 연산자 : 연산을 수행하는 기호 혹은 키워드
- 피연산자: 연산에 참여하는 변수나 값
산술 연산자
연산자 | 의미 | 우선순위 | 표현식 | 예시 |
+ | 더하기 | 2 | 피연산자1 + 피연산자2 | 1 + 2 |
- | 빼기 | 2 | 피연산자1 - 피연산자2 | 2 - 1 |
* | 곱하기 | 1 | 피연산자1 * 피연산자2 | 5 * 3 |
/ | 나누기 | 1 | 피연산자1 / 피연산자2 | 8 / 2 |
비교 연산자
연산자 | 의미 | 표현식 |
> | 크다 | 피연산자1 > 피연산자2 |
>= | 크거나 같다 | 피연산자1 >= 피연산자2 |
< | 작다 | 피연산자1 < 피연산자2 |
<= | 작거나 같다 | 피연산자1 <= 피연산자2 |
= | 같다 | 피연산자1 = 피연산자2 |
<> != |
같지 않다 | 피연산자1 <> 피연산자2 피연산자1 != 피연산자2 |
논리 연산자
연산자 | 의미 | 우선순위 | 표현식 |
NOT | 부정 | 1 | NOT 피연산자 |
AND | 그리고(논리곱) | 2 | 피연산자1 AND 피연산자2 |
OR | 또는(논리합) | 3 | 피연산자1 OR 피연산자2 |
비트 논리 연산자
DBMS | AND | OR | XOR |
Oracle | bitand(피연산자1,피연산자2) | - | - |
MSSQL | 피연산자1 & 피연산자2 | 피연산자1 | 피연산자2 | 피연산자1 ^ 피연산자2 |
MYSQL | 피연산자1 & 피연산자2 | 피연산자1 | 피연산자2 | 피연산자 ^ 피연산자2 |
연결 연산자
DBMS | 연산자 | 표현식 | 예시 |
Oracle | || | 피연산자1 || 피연산자2 | 't1' || 't2' |
MSSQL | + | 피연산자1 + 피연산자2 | 't1' + 't2' |
MYSQL | 공백 | 피연산자1 공백 피연산자2 | 't1' 공백 't2' |
공통적으로 concat(문자열1, 문자열2...) 함수 사용을 통해 연결 가능하다.
IN 연산자
📌 IN
[컬럼/값] IN (값1, 값2...)
-- ex) SELECT name, email FROM member WHERE id IN ('anne','wuga')
📌 NOT IN
[컬럼/값] NOT IN (값1, 값2...)
-- ex) SELECT name, email FROM member WHERE id NOT IN ('anne','wuga')
LIKE 연산자
와일드 카드 | 의미 | 예시 |
% | 모든 문자 | id like 'ad%' |
_ | 하나의 문자 | id like 'admi_' |
함수
문자열 함수
DBMS | 함수 | 사용법 |
Oracle | SUBSTR SUBSTRB |
함수(문자열, 시작위치, 길이) |
MSSQL | SUBSTRING | |
MYSQL | SUBSTRING SUBSTR MID |
문자, 아스키 코드 변환 함수
- 아스키 코드는 7비트(128)도 구성되어 있다.
DBMS | CHAR -> ASCII 변환 함수 | ASCII -> CHAR 변환 함수 |
Oracle | ASCII | CHR |
MSSQL | ASCII | CHAR |
MYSQL | ASCII, ORD | CHAR |
COUNT 함수
SELECT COUNT(칼럼명) FROM [테이블명]
- 테이블의 레코드 개수를 알 수 있다.
길이 함수
DBMS | 함수 |
Oracle | LENGTH |
MSSQL | LEN |
MYSQL | LENGTH |
조건문
DBMS | 함수 |
Oracle | DECODE CASE WHEN |
MSSQL | CASE WHEN |
MYSQL | IF CASE WHEN |
❓ CASE WHEN 구문 사용법
CASE WHEN [CONDITION] THEN [TRUE] ELSE [FALSE] END
서브쿼리
- >하나의 SQL문안에 또 다른 SQL문을 말한다.
- 상위 SQL문을 메인쿼리, 하위 SQL문을 서브쿼리라 한다.
- SELECT, FROM, WHERE 절에 따른 서브쿼리 명칭이 다르다.
- SELECT절에서 사용되는 서브쿼리 : 스칼라 서브쿼리
- FROM절에서 사용되는 서브쿼리 : 인라인 뷰
- WHERE절에서 사용되는 서브쿼리 : 서브쿼리
단일행 서브쿼리
SELECT name,email FROM member WHERE id=(SELECT id FROM bbs WHERE idx=192)
- = 키워드를 통해 하나의 레코드(행)만 반환되는 서브쿼리와 비교한다.
다중행 서브쿼리
SELECT name,email FROM member WHERE id in(SELECT id FROM bbs)
- in 키워드를 통해 여러개의 레코드(행)이 반환되는 다중행 서브쿼리와 비교한다.
레코드 정렬 - ORDER BY
-- ASC:오름차순, DESC:내림차순
SELECT "column1", "column2" FROM "table_name" ORDER BY "column1" [ASC/DESC]
👉🏻 하나의 컬럼을 기준으로 정렬 진행
👉🏻 다수의 컬럼을 기준으로 정렬을 진행
SELECT "column1", "column2" FROM "table_name" ORDER BY [1/2/3...];
👉🏻 1이면 첫번재 컬럼(seq)을 기준으로 정렬
👉🏻 2이면 두번째 컬럼(name)을 기준으로 정렬
레코드 출력개수 제한 - LIMIT
DBMS | 함수 |
Oracle | ROWNUM |
MSSQL | TOP |
MYSQL | LIMIT |
❓ LIMIT절 사용 방법
SELECT "column1","column2" FROM "table" LIMIT [레코드개수]
SELECT "column1","column2" FROM "table" LIMIT [시작위치값][레코드개수]
조인
INNER JOIN
SELECT "columns1" FROM "table1" [INNER] JOIN "table2" ON "join condition"
SELECT "columns1" FROM "table1", "table2" WHERE "join condition"
👉🏻 employee table
👉🏻 department table
👉🏻 JOIN 진행
Reference
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=kkson50&logNo=221251167091
https://clear-sky-sun.tistory.com/28
https://extbrain.tistory.com/56
'💻 Computer Science > 데이터베이스' 카테고리의 다른 글
MySQL 잘 사용하기 (1) (0) | 2023.02.10 |
---|---|
[H2] H2 데이터베이스 사용하기 (1) | 2022.06.02 |
[MariaDB] 마리아디비 사용하기 (0) | 2022.03.24 |