an2z 2022. 2. 10. 11:30

데이터베이스

  • 데이터를 구조적으로 모아둔 데이터 집합소
  • 대표적인 데이터 베이스 종류
    • 관계형 데이터베이스
    • 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://gent.tistory.com/439

https://clear-sky-sun.tistory.com/28

https://titis.tistory.com/105

https://extbrain.tistory.com/56