SQL 첫걸음 3~4장

Tamszero·2025년 3월 26일

ECC

목록 보기
3/17

3장


정렬 - ORDER BY

ORDER BY

  • select * from sample ORDER BY age;
    : age 열의 값을 오름차순으로 정렬

ORDER BY DESC

  • select * from sample ORDER BY age DESC;
    : 내림차순으로 정렬
  • select * from sample ORDER BY age ASC;
    : 오름차순으로 정렬

순서 주의
수치형과 문자열형은 대소관계 계산 방법이 서로 다르다.
따라서 문자열형 열에 숫자를 저장하면 대소관계의 계산 방법이 달라지므로 주의

복수 열 지정 정렬

ORDER BY 구에 복수 열 지정

  • select * from sample ORDER BY a, b;
    :먼저 a열로 정렬 -> 값이 같은 부분은 b열로 정렬

정렬 방법 지정

  • select * from sample ORDER BY a ASC, b DESC;
    : a열은 오름차순으로, b열은 내림차순으로 정렬

NULL 값의 정렬순서

  • ORDER BY로 지정한 열에서 널값은 가장 먼저 혹은 나중에 표시된다

행 제한 LIMIT

행수 제한

  • select * from LIMIT 3;
    : 상위 3 건만 취득
  • select * from sample ORDER BY no DESC LIMIT 3;
    : 정렬 후 리밋을 통해 3건만 취득

LIMIT를 사용할 수 없는 DB에서의 행 제한

  • select * from sample where ROWNUM <= 3;
    : ROWNUM은 클라이언트에게 결과가 반환될 때 각 행에 할당되는 행 번호이다.
    ROWNUM으로 제한시 where구로 지정하므로 정렬 전에 처리되므로 limit과 결과가 다를 수 있음

오프셋 지정

  • select * from sample LIMIT 3 OFFSET 0;
    : 첫번째 페이지에 1-3행까지 표시
  • select * from LIMIT 3 OFFSET 3;
    : 두번째 페이지에 4행부터 3건의 데이터 표시

수치 연산

select 구로 연산

  • select from price quantity from sample;
    : price * quatity인 열이 생성되고 계산한 값이 표시된다
  • select *, price * quatity AS amount from sample;
    : select구에서는 콤마로 구분하여 복수 식 지정,
    AS를 사용하여 별명 지정 (AS는 생략 가능)
    별명은 예약어 사용 불가, but 더블쿼트로 감싸면 사용 가능
    별명은 숫자로 시작 불가

객체명과 문자열 상수

  • "어쩌구" -> 더블쿼트는 데이터베이스 객체로 간주
  • '어쩌구' -> 문자열 상수로 간주

where 구에서 연산

  • select *, price quantity AS amount from sample where price quantity >= 2000; -> error 발생
    : where구에서 계산을 한 후 2000이상인 행을 검색
    where구 -> select구 순서로 처리 된다. 따라서 select구에서 선언된 별명은 where구에서 인식이 불가

ORDER BY구에서 연산

  • select *,price quatity AS amount from sample ORDER BY price quantity DESC; -> 가능
    : select -> ORDER BY 순서이므로. (ORDER BY는 가장 나중에 처리된다)

NULL값 연산

  • NULL + 1 = NULL
    : NULL로 연산하면 결과는 모두 NULL

함수

ROUND 함수

  • select amount, ROUND(amount) from sample;
    :DECIMAL형은 정수부와 소수부의 자릿수를 지정할 수 있는 자료형이다.
    ROUND 함수는 기본적으로 소수점 첫째 자리를 기준으로 반올림한 값을 반환하다.

  • select amount, ROUND(amount, 1) from sample;
    :함수의 두뻔째 인수를 지정해, 소수점 둘째 자리에서 반올림 한다.
    0 -> 소수점 첫째자리
    1 -> 소수점 둘째자리
    -1 -> 1단위
    -2 -> 10단위
    -3 -> 100단위

  • select amount, ROUND(amount, -2) from sample;
    :10단위를 반올림 ex) 5961.60 ->6000
    ex) 2138.40 ->2100

    문자열 연산

    문자열 결합

  • select CONTACT(quantity,unit) from sample;
    :문자열 결합으로 단위를 결합하여 결과를 얻는다
    ex) quantity -> 수치 INTEGER형 +
    unit -> 문자열형 단위명 = 10개, 24개...

    SUBSTRING 함수

  • 문자열의 일부분을 계산해 반환해주는 함수

  • SUBSTRING('20140125001', 1, 4) -> '2014'
    :앞 4자리(년) 추출

  • SUBSTRING('20140123001', 5, 2) -> ''01'

    TRIM 함수

  • 문자열의 앞뒤로 여분의 스페이스가 있을 경우 제거해주는 함수

  • 문자열 도중에 존재하는 스페이스는 제거X

  • TRIM('ABC ') -> 'ABC'

    CHARACTER_LENGTH 함수

  • 문자열의 길이를 계산해 돌려주는 함수

  • OCTET_LENGTH함수는 문자열의 길이를 바이트 단위로 계산해 돌려준다

    날짜 연산

    시스템 날짜

    :하드웨어 상의 시계로부터 실시간으로 얻을 수 있는 데이터.
  • select CURRENT_TIMESTAMP;
    : 결과 = 2014-01-25 10:10:30
    from구 생략 가능

    날짜 서식

    : 임의의 날짜를 저장하고 싶을 경우에 데이터 직접 지정
  • TO_DATE('2014/01/25', 'YYYY/MM/DD')
    : 두번째 인자 부분이 서식부분이다

    날짜의 덧셈과 뺄셈

  • select CURRENT_DATE + INTERVAL 1 DAY;
    : 날짜를 연산해 시스템 날짜의 1일 후를 검색
    INTERVAL 1 DAY -> 1일 후라는 의미의 기간형 상수이다

CASE 문으로 데이터 변환

CASE문

  • select a, CASE WHEN a IS NULL THEN 0 ELSE a END "a(null=0)" from sample;
    : case로 null값을 0으로 변환하기
    a열의 값이 null일 때 WHEN a IS NULL은 참이 되므로 CASE문은 THEN 절의 '0'을 반환한다. null이 아닌 경우에는 else절의 'a' 즉 a값을 반환

COALESCE 함수

  • select a, COALESCE(a,0) from sample;
    :a가 null이 아니면 그대로 출력, a가 null이면 0 출력

CASE 문

  • select a AS "코드",
    CASE
    WHEN a = 1 then '남자'
    WHEN a = 2 then '여자'
    ELSE '미지정'
    END AS "성별" FROM sample;
    : 검색 CASE로 성별코드를 남자, 여자로 변환하기
    ELSE생략시에는 ELSE NULL이 되는 것에 주의

DECODE NVL

  • 디코드를 수행하는 함수

4장


INSERT

행 추가하기

  • 테이블에 행 추가하기
  • 열을 지정해 행 추가하기
  • 행 추가시 NULL상태로 두고 싶을 경우 -> values구에서 NULL로 값 지정
    NOT NULL제약이 걸려있는 열은 허용X

DEFAULT

  • 행 추가지 지정하지 않은 열은 디폴트값->0
  • 명시적으로 디폴트값 지정
  • 암묵적으로 디폴트값 지정
    : 열을 지정하지 않으면 디폴트값으로 행이 추가된다

DELETE

행 삭제하기

  • no 열이 3인 행 삭제

UPDATE

update로 데이터 갱신

  • no=2의 b셀값 갱신하기

    where조건에 일치하는 모든 행이 갱신됨을 주의
  • 증가 연산하기

복수열 갱신

  • a,b열을 갱신
  • mysql의 갱신처리

NULL로 갱신

  • null초기화

물리삭제와 논리삭제

  1. 물리삭제 : delete 명령을 사용해 직접 데이터를 삭제하는 방식
  2. 논리삭제 : 테이블에서 삭제플래그와같은 열을 미리 준비해둬 해당 플래그가 설정된
    행을 제외하는 select명령을 실행하여 삭제된 것 처럼 보이게 하는 방식

    논리삭제의 경우 삭제해도 저장공간이 늘어나지X, 하지만 데이터를 실제로 삭제하는 것이 아니므로 삭제 전의 상태로 되돌릴 수 있다
profile
공부로그

0개의 댓글