SQLD - 3주차 SQL 기본

glory_young·2025년 7월 20일

SQLD

목록 보기
3/3

SQL 기본

관계형 데이터베이스

데이터를 어떤 목적에 따라 가공하여 유용한 정보로 변환
이러한 데이터를 일정한 체계에 따라 통합하여 디스크나 메모리에 저장한 것을 데이터베이스라고 함. 응용 프로그램에 종속적이지 않도록 미들웨어 형태로 만든 것.

데이터베이스를 구축하고 관리할 수 있는 기능을 제공하는 시스템 소프트웨어를 데이터베이스 관리 시스템(DBMS)라고 함

관계형 데이터베이스

2차원 구조의 행과 열로 구성된 테이블 형태

  • 연산을 수학적으로 최적화할 수 있음

  • SQL(Structured Query Language)라는 공통의 질의언어를 정의하여 정보를 다룰 수 있음

  • table

  • 스키마 = 칼럼헤더

  • column = 필드(속성) = attribute

  • row = 레코드 = tuple

SQL(Structured Query Language)

수학적 이론을 바탕으로 원하는 결과 ㅈ데이터를 추출할때 사용하는 명령문
데이터베이스의 구조를 정의하고, 데디터를 조작하고, 데이터를 정의할 수 있는
절차적(How) + 비절차적(What) 언어

  • DDL (데이터 정의언어)
  • 데이터의 구조(스키마)를 정의하는 명령어
  • create, alter, drop, rename, truncate
  • DDL 명령어는 오라클에서는 커밋이 자동으로 수행되어 롤백 불가하고, SQL서버에서는 자동커밋모드를 끄거나 명시적 트랜잭션을 선언하는 경우 롤백 가능
  • DML (데이터 조작 언어)
  • 데이터 조회, 입력, 수정, 삭제
  • 커밋 전에 롤백이 가능
  • selet, insert, update, delete, merge - drop - 스키마까지 삭제. 저장공간 릴리즈. 로그 안남김 - truncate - 스키마 유지 데이터만 삭제. 저장공간 릴리즈. 로그 안남김 - delete - 데이터 삭제. 저장공간 릴리즈 X. 로그남겨 롤백 가능
  • DCL (데이터 제어 언어)
  • 사용자 접근 권한 같은 보안과 제어
  • grant revoke
  • TCL (트랜잭션 제어 언어)
  • 트랜잭션 제어. DCL의 일부로 보기도 함
  • commit, rollback, savepoint

SELECT문

특정 열을 조회할 수 있음

F W G H S O → 해당 순서로 처리됨

  • select [칼럼] from [테이블]
  • 테이블 뒤에 별명은 공백으로, 속성 뒤에 별명은 as로
  • 산술 연산자 : ( ), *, /, %, +, -
  • Null과 산술연산 결과는 Null. 0으로 나누는 경우는 오류
  • 합성 연산자 : ||
  • 문자열을 연결하 때 사용

함수

  • lower(문자열) / upper(문자열) : 소문자로/대문자로

  • chr(ASCII코드값) : 아스키코드에 해당하는 문자로 반환

  • trim(?방향, ?제거할 문자, 문자열): 문자열에서 공백 또는 특정 문자열 제거

  • 방향은 leading, tailing, both가 있음. both가 기본값

  • 제거할 문자는 공백이 기본값

  • ltrim, rtrim : 왼쪽/오른쪽 끝에서 trim

  • substr(문자열, 시작점, ?길이) : 시작점에서 길이만큼 문자열 반환

  • length(문자열) : 문자열 길이 반환

  • replace(문자열, 변경 대상, ?변경 후) : 특정 문자열을 찾아 변경

  • abs(숫자) : 절대값 반환

  • mod(숫자1, 숫자2) : 1을 2로 나눈 나머지

  • round(숫자, ?소수점 정수) : 반올림

  • trunc(숫자, ?소수점 정수) : 버림

  • sign(숫자) : 양수는 1, 음수는 -1, 0은 0

  • ceil(숫자) : 크거나 같은 최소 정수

  • floor(숫자) : 작거나 같은 최소 정수

  • sysdate : 오늘 날짜를 날짜형으로 반환

  • extract(avg from 날짜) : 날짜의 특정 부분 추출

  • avg = year/month/day/hour/minute/second

  • to_number, to_char, to_date : 형변환

  • 암시적 형변환도 있으나 성능 저하나 에러를 가져올 수 있어 명시적 형변환이 좋음

  • nvl(avg1, avg2) : (avg1 != Null) ? avg1 : avg2

  • nullif(avg1, avg2) : (avg1 == avg2) ? Null : avg1

  • coalsce(list…) : 인자를 순서대로 평가하여 Null이 아닌 첫번째 인자 반환

  • case when [칼럼] = 값1 then 값A … (else 값N) end
    case [칼럼] when 값1 then 값A … (else 값N) end
    : 칼럼이 특정 값을 가지면 이를 새 값으로 대체하여 반환

WHERE절

select, update, delete에 사용 가능. insert에는 사용 불가
from 절에서 정의한 별명 사용 가능.

where [조건식]

  • 단일행 비교 연산자 : =, <, <=, >, >=, is null

  • 다중행 비교 연산자

  • in : 리스트 중 동일한 값이 하나라도 있으면 참

  • exists : 서브쿼리의 결과가 한 건이라도 있으면 참

  • all : 모두 참이면 참

  • any : 하나라도 참이면 참

  • 단일행 부정 비교연산자 : !=,^=, <>, is not null

  • 다중행 부정 비교연산자

  • not in : 리스트 중 동일한 값이 하나도 없으면 참

  • not exists : 서브쿼리의 결과가 한 건도 없으면 참

  • between A and B : A보다 크거나 같고 B보다 작거나 같으면 참

  • like : 패턴 문자열 검색. %는 0개 이상의 문자, _는 1개의 문자를 의미함

  • not between A and B : A보다 작거나 B보다 크면 참

  • not like : 패턴과 매칭되는 것이 하나도 없으면 참

  • and, or, not

GROUP BY, HAVING절

group by를 통해 데이터를 그룹핑 할 수 있음

그룹핑한 다음에 해당 그룹에 대해 집계함수를 사용하여 통계값을 구할 수 있음

  • count, sum, avg, min, max
  • 중첩된 집계함수의 경우 결과는 1건이 됨
  • avg(*)는 불가

having으로 필터링할 조건을 명시할 수 있음. 그룹핑 후에 수행됨.
(where절은 집계함수를 사용할 수 없음)

ORDER BY절

칼럼을 조회할 때 정렬을 수행함

order by 칼럼 (ASC/ DESC)

  • 기본은 오름차순으로 정렬

조인

두 테이블을 하나로 병합하는 것

  • 두 테이블 간 PK와 FK의 연관성에 의해 성립하거나

  • 연관성이 없더라도 논리적인 값들의 연관만으로도 조인을 성립할 수 있음

  • 조인은 O(N^2)의 시간복잡도를 가짐

  • equi join

  • 칼럼값이 정확하게 일치할때 성립
    where절 조건이 등식인 경우

  • non equi join

  • where 절 조건이 등식이 아닌 부등식인 경우

  • 3개 이상의 테이블을 조인하는 경우 n개의 테이블에 대해서 n-1개의 조인이 발생

  • outer join

  • 조건에 맞는 행만 병합된 것을 inner join이라고 함

  • 조건에 맞지 않는 행까지 병합한 것을 outer join이라고 함 (left outer join, right outer join, full outer join)

표준 조인

DBSM 별 SQL문을 따로 사용하는 불편을 줄이기 위해 표준 문법(ANSI SQL) 사용.

표준 조인에서는 기준조건은 where절이 아닌 on절을 사용하여 from에 조인 종류를 명시함.

  • from t.name [t.name] on 조건;

  • inner join
    : 교집합 개념. (null이 없도록 조인) 기준이 되는 키에 따른 칼럼값이 존재하는 것만 병합

  • outer join
    : 합집합 개념
    - left outer join
    : 왼쪽 테이블의 모든 행을 포함시키면서 조일
    - right outer join
    : 오른쪽 테이블의 모든 행을 포함시키면서 조인
    - full outer join
    : 왼쪽과 오른쪽의 모든 행을 포함시키면서 조인

  • natural join
    : 같은 이름의 칼럼에 대해서는 동일한 칼럼값을 가진 행만 병합되는 조인
    SQL server는 지원 안함. on 절을 사용할 수 없음.

  • cross join
    : 왼쪽 테이블의 각 행에 대해 오른쪽 테이블 모든 행의 대응을 조합하여 결과 출력
    M*N개의 행이 생성됨 (모든 경우의 수)
    where절 없이 from절에 테이블을 나열하면 cross join이 됨

0개의 댓글