[KT AIVLE] 22. SQL(1)

onlyJoon·2023년 5월 8일
0

KT AIVLE

목록 보기
15/31
post-thumbnail

요약

  • MySQL 맛보기

SQL

  • Structured Query Language
  • DB에서 데이터를 조회, 입력, 수정, 삭제 등을 위한 구문
  • 제품마다 사용방법이 다를 수 있음

ANSI SQL

  • 표준 SQL문
  • DBMS의 종류에 제약을 받지 않음

상하위 개념

  • Sever > Database > Schema > Table

유형

DDL

  • Data Definition Language: 데이터 정의어
  • CREATE, ALTER, DROP, TRUNCATE

DML

  • Data Manipulation Language: 데이터 조작어
  • SELECT, INSERT, UPDATE, DELETE

DCL

  • Data Control Language: 데이터 제어어
  • GRANT, REVOKE 등

MySQL

  • 오픈소스 RDBMS
  • Oracle에 인수됨
  • MySQL에서 파생된 것이 MariaDB
  • MySQL은 돌고래, MariaDB는 강치. 모두 바다 포유류

실습

  • MySQL의 관리/개발 도구인 'MySQL Workbench'에서 진행

주석처리

  • 여러 줄 주석
/* 
첫 번째 주석
두 번째 주석
...
*/
  • 한 줄 주석: '--'
-- 한 줄 주석

쿼리문

  • 적절한 들여쓰기 필요
  • 구문의 마지막에 세미콜론(;) 사용
SELECT * FROM table;

Reverse Engineer

  • 물리적 테이블로부터 관계도를 만들어내는 기능
  • Primary Key(기본키), Foreign Key(외래키) 등을 확인 가능

VARCHAR vs. CHAR

  • 모두 문자열 데이터 타입
  • CHAR은 고정 길이 문자열을 저장 -> 고정 용량을 차지
    성능이 빠르지만 공간을 낭비할 수 있음
  • VARCHAR는 가변 길이 문자열을 저장 -> 가변 용량을 차지
    공간을 절약하지만 성능이 느릴 수 있음

변수 선언

SET @변수 =;
  • 변수명 앞에 @

데이터 조회

-- 데이터베이서 연결
USE DB명;

-- 현재 데이터베이스 확인
SELECT DATABASE();

-- 테이블 목록 보기
SHOW TABLES;

-- 테이블 정보 확인 DESC < DESCRIBE
-- 표시 내용: Field명, 데이터 Type, Null유무, Key, Default, Extra
DESC table;

LIKE 연산자

  • ~ LIKE '홍%'``` : '홍'으로 시작하는 단어
  • ~ LIKE '%길%'``` : 중간에 '길'이 들어간 단어
  • ~ LIKE '%동'``` : '동'으로 끝나는 단어
  • ~ LIKE '____@%'``` : @ 앞에 4글자만 존재하는 것 -> _(underscore)는 글자 수를 지정

IN

  • 여러 개의 항목들 중에 포함되어 있는지 확인하는 역할
  • '(괄호)'로 묶어주어야 함
  • NOT 연산자와 함께 쓰일 수 있음
SELECT city
	FROM students
    WHERE name IN ('seoul', 'pusan', 'hwasun');

BETWEEN a AND b

  • a, b 모두 범위에 포함
  • NOT 연산자와 함께 쓰일 수 있음

NULL

  • NULL과 'NULL'은 전혀 다른 의미
  • NULL의 식별은 IS 를 사용
name = 'NULL'; 		(x)
name = NULL; 		(x)
name IS NULL;		(o)
name IS NOT NULL; 	(o)

IFNULL() 함수

  • NULL 값에 대한 처리를 도와주는 함수

  • IFNULL(컬럼명, NULL 대체값) AS 새 컬럼명```
  • AS와 같이 쓰는 것을 권장(없으면 컬럼명이 이상함)

  • 해당 기능을 하는 함수가 제품마다 다름

    • MSSQL: ISNULL()

      • MySQL에서는 전달된 값이 NULL이면 1 아니면 0 인 함수
    • Oracle: NVL()

      • NVL: NULL VALUE의 줄임말
    • MySQL: IFNULL()

COALESCE() 함수

  • 나열된 값 중 처음으로 NULL이 아닌 값을 반환
  • COALESCE(col1, col2, ... ,'') AS 새 컬럼명```
  • col1이 NULL이 아니면 col1, NULL이면 col2
  • col2가 NULL이 아니면 col2, NULL이면 col3
  • 이런 식으로 NULL을 채울 값을 나열할 수 있음

repeat() 함수

  • repeat(반복할 대상, 반복 횟수) AS 새 컬럼명```

자동 형 변환

SELECT '10' + '20'; -- 30
SELECT 10 + '20';	-- 30
SELECT 10 + '20AX'; -- 30
SELECT 10 + 'LX20'; -- 10
  • 자동으로 숫자로 형 변환하여 덧셈을 수행
  • 세 번째의 경우, '20AX'의 처음부터 숫자로 변환할 수 있을 때까지 변환하고 덧셈 수행
  • 네 번째의 경우, 'LX20'은 문자로 시작하므로 형 변환이 되지 않아 10 출력

문자열 데이터 결합: CONCAT()

SELECT CONCAT('10', '20');	-- 1020
SELECT CONCAT(10, '20');	-- 1020
SELECT CONCAT(10, 20);		-- 1020
SELECT CONCAT(10, NULL);	-- NULL
  • 네 번째의 경우, NULL과는 연결할 수 없으므로 NULL 출력

CASE

  • 조건에 없는 위치는 NULL이 들어감 -> ELSE에 대한 처리 필요
  • SEARCHED CASE
CASE WHEN 조건식1 THEN1
	 WHEN 조건식2 THEN2
     ELSEEND AS 칼럼명
  • SIMPLE CASE(비추천)
CASE 칼럼명 
	 WHEN 조건값1 THEN1
	 WHEN 조건값1 THEN2
     ELSEEND AS 칼럼명

IF 함수

IF(조건식, 참일 때의 값, 거짓일 때의 값) AS 새 칼럼명

집계 함수

  • 종류: SUM, AVG, MAX, MIN, COUNT
  • 집계 적용 시 NULL값은 무시(COUNT는 제외)

기타

  • SELECT에서 선택한 칼럼을 1부터 순서대로 번호로써 사용 가능
SELECT id, name, gender
	FROM table
    OREDER BY 1 ASC, 2 DESC;
  • ORDER BY에서 1과 2는 각각 id, name을 가리킴
  • date TYPE은 자동으로 형식에 맞추어서 비교할 수 있음
    • '2023-05-08' = '2023.05.08' = '2023/05/08' = '20230508'

마무리

  • SQL을 책만 보면서 공부할 때는 잘 와닿지 않았으나, 데이터를 가지고 직접 해보면서 배우니 이해가 쉬웠음.
profile
A smooth sea never made a skilled sailor

0개의 댓글