[DB/SQL] SQL 기본 및 활용 - Basic DML

Joo·2024년 2월 21일

RDB & SQL

목록 보기
5/24

강의 링크 : https://www.youtube.com/watch?v=70KY1_DblZQ&list=PLg_wJlcMiuKtGdlIaAZ0rOPPQuTDENnEQ&index=6


SQL 개요

SQL(← SEQUEL) (← Structured Query Language)

  • 관계형 DB에서 데이터 정의(DDL), 조작(DML), 제어(DCL)를 위해 사용하는 언어 + TCL(트랜잭션)
  • 표준 SQL : ISO의 표준 규격을 따르는 SQL
  • SQL 기본 작성 규칙
    • 문장 마지막은 세미콜론(;)으로 끝남

    • 명령어, 객체명(테이블), 변수명(속성 이름)은 대/소문자 구분이 없음

      • 데이터 값(속성값)은 대/소문자를 구분함
    • 날짜와 문자열에는 작은 따옴표를 사용

    • 단어와 단어 사이는 공백 또는 줄바꿈으로 구분

    • 주석문

      • -- 이것은 주석입니다.

      • /* 여기부터

        여기까지 주석입니다. */

SQL 구문 유형

※ 스키마 = 데이터 구조
인스턴스 = 데이터
※ DML 중 조회 쿼리 : SELECT
DML 중 갱신 쿼리 : INSERT, UPDATE, DELETE

  • 갱신 쿼리는 데이터 구조에는 영향을 주지는 않지만 인스턴스에는 영향을 줌
  • DDL : 테이블 구조에 영향



SQL 예제

  • 테이블도 생성 순서가 중요함
    • PLAYER 테이블에는 TEAM_ID라는 FK가 필요한데, PLAYER 테이블이 TEAM 테이블보다 먼저 만들어지면 이상함
    • STADIUM → TEAM → PLAYER 순으로 생성되어야 함

데이터 업로드



DML 설명

SELECT

SELECT

  • SELECT 문은 FROM 없이는 실행할 수 없음
  • DUAL(테이블) : DUMMY라는 컬럼에 X라는 속성값 하나만 들어있는 요상한 테이블(사용자가 정의하지 않고 시스템이 자동으로 제공하는 테이블, 1행 N열)

⌨️ 입력

SELECT 'ABC', 5+4
FROM DUAL

⌨️ 출력

  'ABC'  5+4
1  ABC   9

  • 테이블 구조 확인 : DESCRIBE 테이블이름; DESC 테이블이름;

ORDER BY

  • SELECT에 없는 필드도 ORDER BY에서 쓸 수 있음

WHERE

SELECT, FROM은 필수지만 WHERE는 옵션임

- SELECT에 없는 필드도 WHERE에서 쓸 수 있음

연산자

산술, 비교, 논리 연산자

산술 연산자

NULL에는 어떤 산술 연산을 해도 결과가 NULL이 됨

비교 연산자

논리 연산자(A : 3)

  • NOT을 만나면 AND와 OR이 서로 반대가 됨(AND → OR, OR → AND)



SQL 연산자

※ 와일드카드(%, _)
_A : 두 글자 중 A로 끝나는 모든 것
_A_ : 세 글자 중 가운데가 A인 것
%A : A로 끝나는 모든 것
%A% : A가 포함된 모든 것
_A% : 앞에 한 글자가 있고 두번째 글짜가 A인 모든 것

합성(연결) 연산자

  • CONCAT() 함수는 두 개의 요소까지만 적용 가능함 (세 개 이상부터는 불가능)
    • 연산자`||'는 두 개 이상도 다 가능함 (엄밀히 말하자면 다중 이항 연산임)
      A:

⌨️ 입력

SELECT PLAYER_NAME || ' 선수: ' || Height || 'Cm' AS '선수 신장'
FROM   PLAYER;

Between 연산자

A1 : Height가 NULL인 행이 출력되지 않음
A2 :

SELECT PLAYER_NAME 선수이름, POSITION 포지션, HEIGHT 키
FROM   PLAYER
WHERE HEIGHT >= 170 AND HEIGHT <= 180;
WHERE HEIGHT < 170 OR HEIGHT > 180;

IN 연산자

  • 그냥 연산과 NOT 연산 결과 개수를 합했을 때 전체가 나오지 않으면 NULL 값이 존재할 수 있음 (이건 IS NULL 연산을 통해 확인할 수 있음)

LIKE 연산자

  • 와일드 카드를 사용했음에도 LIKE가 없으면 equal이랑 동일하게 사용됨


WHERE - 출력 개수 지정

  • ROWNUM (TOP N개의 레코드 반환)

  • pseudo column : 존재는 하지만 사용은 할 수 없는 컬럼 (번호 딸 때랑 출력 개수 지정 등에만 사용됨) → 이 중 하나가 ROWNUM

  • DESC로는 보이지 않지만 SELECT를 사용하면 보임

    1을 제외하고 나머지는 모두 등호와 함께 써야 함

  • 테이블 내의 UNIQUE한 값 설정에도 사용 가능

    • ROWNUM을 이용하여 ID 필드 생성
    • UPDATE 테이블명 SET 칼럼명 = ROWNUM;
      • UPDATE 문은 추후 설명
 ALTER TABLE PLAYER ADD (ROW_ID NUMBER);
 UPDATE PLAYER SET ROW_ID = ROWNUM;

 SELECT PLYAER_NAME FROM PLAYER WHERE ROW_ID = 3;



INSERT

  • 테이블에 한 건의 레코드를 추가함
    • 여러 건 입력 시 INSERT ALL ~ 구문 활용
  • 문자 또는 날짜 값의 경우 작은 따옴표로 묶음
    • 숫자 데이터는 작은 따옴표 없이 사용
  • 두 가지 유형으로 입력 가능
    • INSERT INTO 테이블명 (COLUMN_LIST) VALUES (VALUE_LIST);
      • 일부 칼럼에 대응되는 값만 입력
    • INSERT INTO 테이블명 VALUES (전체 COLUMN의 VALUE_LIST);
      • 전체 칼럼에 대응되는 값을 모두 입력


DELETE


UPDATE

profile
적당히 공부한 거 정리하는 곳

0개의 댓글