Toby's Study Blog
Published 2023. 8. 10. 15:30
SQL 이란 database

DB

데이터베이스(영어: database, DB)는 여러 사람이 공유하여 사용할 목적으로 체계화해 통합, 관리하는 데이터의 집합이다. 작성된 목록으로써 여러 응용 시스템들의 통합된 정보들을 저장하여 운영할 수 있는 공용 데이터들의 묶음이다.

DB, RDB, DBMS, RDBMS

  • DB → DBMS
  • RDB → RDBMS

RDBMS(stands for Relational Database Management System)는 DB를 관리하는 시스템. TOP3 오픈소스 RDBMS는 MySQL, PostgreSQL, SQLite입니다. 오픈소스가 아닌 것에서는 Oracle이 독보적

관계형 데이터베이스의 구성 요소

  • TABLE(행, 열), VIEW(데이터를 선택하여 만든 가상의 부분 집합), INDEX(주소), SEQUENCE(시퀀스, 고유번호 자동생성), SYNONYM(시노임, 객체의 별칭) 등의 객체로 구성
  • ENTITY, RELATIONE들의 집합
  • 튜플(Tuple)은 테이블의 행
  • 속성(Attribute)은 HTML로 따지자면 Table Heading 입니다. 여기서는 학번, 이름, 주소, 전화번호가 속성
  • 도메인(Domain)은 하나의 속성에서 취할 수 있는 값의 범위를 말한다. 예를 들어 위에서는 신청 과목에서 전체 과목의 범위를 얘기
  • 차수(Degree)는 속성의 개수 학생 릴레이션에서는 학번, 이름, 주소, 전화번호이니 총 4개가
  • 기수(Cardinality)는 튜플의 개수 위에서는 어트리뷰트를 제외하고 총 5개의 튜플이 존재

키의 개념 및 종류

  • 기본키는 메인으로 사용할 키를 말합니다. 고유한(유일한) 주민등록번호나, 계좌번호, 전화번호 등을 기본키로 사용할 수 있습니다. 기본키는 NULL을 사용할 수 없다.
  • 후보키는 기본키를 제외하고 고유한 키들을 말한다.
  • 외래키는 관계되어 있는 테이블에서 참고하고 있는 키를 얘기한다. 여기서 학생 릴레이션과 수강신청 과목 릴레이션은 서로 학번으로 연결되어 있다.

데이터베이스의 종류

  • 계층형 데이터베이스(1:N)
  • 망형 데이터베이스(N:M
  • 관계형 데이터베이스(단순한 표 형태의 상호 관계, 1:1, 1:N, N:M관계 표현)
  • 객체 지향형 데이터베이스

SQL(Structured Query Language)

SQL은 스토리지 언어의 표준, MySQL, MsSQL, Oracle, Postgres 등의 DB를 사용하여 어떤 프로젝트를 한다면 SQL을 다루실 수 있어야 한다.

SQL 명령어의 분류

  • 데이터 조작어(DML)
    • SELECT
    • INSERT
    • UPDATE
    • DELETE
  • 데이터 정의어(DDL)
    • CREATE DATABASE
    • CREATE TABLE
    • CREATE INDEX
    • ALTER DATABASE
    • ALTER TABLE
    • DROP TABLE
    • DROP INDEX
    • RENAME
    • TRUNCATE
  • 데이터 제어어(DCL)
    • GRANT : 권한 부여
    • REVOKE : 권한 제거
  • 트랜젝션 제어어(TCL)
    • COMMIT
    • ROLLBACK
    • SAVEPOINT

Data 분석 과정

  • 사전에 데이터를 분석해야 하는 이유와 기획
  • 1번에서 3번까지의 단계가 전체 과정에 70% ~ 80%를 차지

정형 데이터와 비정형 데이터

  • 정형데이터는 RDBMS에서 사용하는 테이블 안에 들어가 있는 형식이 잡혀 있는 데이터를 말한다.
  • 비정형 데이터(unstructured data, unstructured information, 비정형 정보), 비구조화 데이터, 비구조적 데이터는 미리 정의된 데이터 모델이 없거나 미리 정의된 방식으로 정리되지 않은 정보를 말한다.(출처 : WIKI)

SELECT Statement

select는 데이터를 조회하거나 산술식, 함수 등을 실행할 때 사용

*(에스터리스크, 별표)는 모든 항목을 다 출력할 때 사용

SELECT * FROM Customers;

여기서 원하는 컬럼만 출력하고 싶을 때에는 아래와 같이 사용

SELECT CustomerName, City FROM Customers;

아래와 같이 대괄호로 묶어줄 수도 있지만, 여기서는 묶어주지 않고 사용

SELECT [Address], [City] FROM Customers;

아래 보이시는 것처럼 일반 수식을 출력할 때에도 Select 구문을 사용

SELECT 1+1;

SELECT DISTINCT Statement

DISTINCT는 중복값을 제거

SELECT DISTINCT Country FROM Customers;

ORDER BY

출력 결과 정렬

  • 오름차순 : ASC(기본, 작은 수에서 큰 수로, Ascending)
  • 내림차순 : DESC(큰 수에서 작은 수로, Descending)
SELECT * FROM Customers ORDER BY CustomerID DESC;
SELECT * FROM Customers ORDER BY CustomerName ASC;
SELECT * 
FROM Customers 
ORDER BY CustomerID DESC;
SELECT * 
FROM Customers 
ORDER BY CustomerID ASC;

AS

별칭을 정한다. 기존 Table의 값은 변하지 않는다.

SELECT CustomerID AS 회원이름
FROM Customers;
SELECT CustomerID AS 회원이름, Country AS 나라
FROM Customers;
SELECT CustomerID 회원이름, CustomerName 이름 FROM Customers;

산술연산

더하고 빼고 나누고 곱하는 것이 가능

SELECT (CustomerID / 3) + 5 FROM Customers;
SELECT (CustomerID / 3) % 2 FROM Customers;

각각 컬럼끼리 연산도 가능

SELECT CustomerID + CustomerID FROM Customers;

해당 값은 0, 나누기를 하면 null로 반환 이어붙이려면 아래 있는 연결 연산자를 사용해야 한다.

SELECT CustomerName + CustomerName FROM Customers;
SELECT ProductName AS 제품이름, Price AS 기존가, Price*0.2 AS 할인된가격, Price*0.8 AS 최종가 
FROM Products

연결 연산자

Oracle에서는 ||, MsSQL은 +, MySQL은 공백으로 연결 가능. CONCAT함수는 공통으로 사용 가능

SELECT Country || ' ' || City || ' ' || Address AS 주소 FROM Customers
SELECT ProductName AS 제품이름, Price || '가 ' || (Price*0.2) || '할인되어 ' || (Price*0.8) || '에 판매합니다!' AS 홍보문구
FROM Products;

논리 연산

우선순위는 NOT, AND, OR입니다. True는 1로, False는 0으로, and는 곱으로, or는 덧셈으로 이해하시면 계산이 쉽습니다. 뒤에서 나올 비교 연산자, WHERE 조건 절을 미리 사용. 비교 연산자는 같다(=), 다르다(!=), 크다(>), 작다(<)를 표현하는 연산자

  • 기본실습
    SELECT 1 OR 0;
    
    SELECT NOT 0;
    
  • SELECT 1 AND 0;
  • AND
  • SELECT * FROM Customers WHERE CustomerID LIKE '1%' AND City = 'London';
  • OR
    SELECT *
    FROM Customers 
    WHERE CustomerID LIKE '1%'
    AND (City = 'London' OR City = 'Berlin');
    
  • SELECT * FROM Customers WHERE CustomerID LIKE '1%' AND City = 'London' OR City = 'Berlin';
  • NOT
    SELECT *
    FROM Customers 
    WHERE CustomerID LIKE '1%'
    AND (City != 'London' AND City != 'Berlin');
    
  • SELECT * FROM Customers WHERE CustomerID LIKE '1%' AND NOT(City = 'London' OR City = 'Berlin');
  • <>같지 않다.(IOS 표준)
  • SELECT * FROM Customers WHERE CustomerID LIKE '1%' AND (City <> 'London' AND City <> 'Berlin');

BETWEEN 연산

A AND B : A와 B를 포함한 사이의 값

SELECT CustomerID, CustomerName
FROM Customers 
WHERE CustomerID BETWEEN 30 AND 50;
SELECT CustomerID, CustomerName
FROM Customers 
WHERE CustomerID >= 30 AND CustomerID <= 50;

IN 연산

IN A : A안에 값과 일치하는 값을 조회

SELECT CustomerID, CustomerName
FROM Customers 
WHERE CustomerID IN (10, 20, 30);

LIKE 연산

  • LIKE '비교문자'
    1. 비교 문자와 형태가 일치(%(모든 문자), _(한 글자) 사용)
    2. 대소문자를 안가림
    3. %는 와일드카드
    SELECT CustomerID, CustomerName
    FROM Customers 
    WHERE CustomerName LIKE 'Paul%';
    
    만약 데이터가 Paullab, Paultest, Paulcode가 있다면 모두 검색만약 언더바가 3개라면 위 데이터 중 Paullab 만 출력 이런 문자열들은 와일드카드라고 부른다.
  • SELECT CustomerID, CustomerName FROM Customers WHERE CustomerName LIKE 'Paul___';
  • 자주쓰는 예제
    SELECT CustomerID, CustomerName
    FROM Customers 
    WHERE CustomerName LIKE '%Paul%';
    
    SELECT CustomerID, CustomerName
    FROM Customers 
    WHERE CustomerID LIKE '1%';
    
  • Paul이 들어가는 모든 값

IS NULL

  • NULL 값을 갖는 값(0은 값이 있는 것이다.)
SELECT CustomerID, CustomerName
FROM Customers 
WHERE CustomerID IS NULL;

bit 단위 논리연산자

차례대로 AND, OR, XOR

SELECT 1 & 0;
SELECT 1 | 0;
SELECT 1 ^ 0;

WHERE

  • 조회하려는 데이터에 조건 부여
  • 여러 연산자를 결합하여 사용 가능
  • 결합 가능한 연산자의 종류 : 비교연산자(=, <, >, !=, >=, <=), SQL연산자(BETWEEN), 논리 연산자(AND, OR) 등
SELECT CustomerID
FROM Customers 
WHERE CustomerID > 80;
SELECT *
FROM Customers 
WHERE CustomerID > 80 AND Country='France';
SELECT CustomerID, CustomerName
FROM Customers
WHERE CustomerID=30;
SELECT CustomerID, CustomerName
FROM Customers
WHERE CustomerName='Godos Cocina Típica';

INSERT

INSERT INTO Customers (CustomerName, City, Country)
VALUES ('leehojun', 'jejusi', 'korea');
SELECT * FROM Customers;
  • 문제 1번
    SELECT * FROM Customers WHERE Country='korea' AND City='jejusi';
    
  • 국적이 한국이면서, 제주시에 살고 있는 사람을
  • 문제 2번
    /* SELECT * FROM Customers WHERE PostalCode=''; */
    SELECT * FROM Customers WHERE PostalCode IS NULL;
    
    비어있는 문자열과 NULL값은 서로 다른 값
  • PostalCode값이 null 값인 사람

Null Values 찾아내기

SELECT * 
FROM Customers
WHERE ContactName IS NULL;

is not 구문도 가능

SELECT * 
FROM Customers
WHERE ContactName IS NOT NULL;

UPDATE

값을 바꾼다. 이 행위는 되돌릴 수 없으며 where로 여러개를 select하여 바꿀 수 있다.

UPDATE Customers
SET CustomerName='하르방', City='한라산', Country='선계'
WHERE CustomerID = 1;
SELECT * FROM Customers;

DELETE

WHERE 안적으면 다 삭제 된다.. 조심

DELETE FROM Customers WHERE CustomerName='hojun';
SELECT * FROM Customers;

TOP과 LIMIT

최 상단 3개의 행(row)을 보는 방법

SELECT TOP 3 * FROM Customers;
SELECT TOP 10 PERCENT * FROM Customers;
SELECT * FROM Customers
LIMIT 3;

CREATE, DROP

CREATE DATABASE sampledata_db;
CREATE TABLE sampledata_table;
DROP DATABASE sampledata_db;
DROP TABLE sampledata_table;

SHOW, DESC

mysql> SHOW databases; mysql> SHOW tables; mysql> DESC table_name;

'database' 카테고리의 다른 글

SQL 활용  (0) 2023.08.10
SQL 함수  (0) 2023.08.10
profile

Toby's Study Blog

@Toby12

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그