자격증/SQLD

[SQL 첫걸음] 12강. 수치 연산

동호다찌 2022. 4. 4. 09:23
반응형

SELECT구로 연산하기

SELECT 식1, 식2... FROM 테이블명;

열의 별명

  • 별명이 중복되지 않게 지정한다.
  • 별명은 예약어 AS를 사용해서 지정한다.
  • SELECT구에서는 콤마(,)로 구분해서 복수의 식을 지정할 수 있고, 각각의 식에 별명을 붙일 수 있다.
  • MySQL에서는 별명을 중복해서 지정해도 에러는 발생하지 않는다.
  • But, 프로그래밍 언어에서 결과값의 처리 방식에 따라 문제가 발생할 수 있다. 기본적으로 별명이 중복되지 않게 지정하자.
  • 키워드 AS는 생략 가능하다. 단, 별명을 한글로 지정하는 경우에는 여러 가지로 오작동하는 경우가 많다.
  • 더블쿼트("")로 감싸서 지정한다. (MySQL에서는 백쿼트(``)로 감싸준다!)
  • 더블쿼트("")로 감싸주면, 데이터베이스 객체의 이름이라고 간주한다.
  • 싱글쿼트('')로 감싸는 것은 문자열 상수이다.
  • 이름에 ASCII 문자 이외의 것이 포함된다면,
  • 더블쿼트(“”)(MySQL에서는 백쿼트(``))로 감싸서 지정한다!

데이터베이스 객체명

MySQL 이외의 데이터베이스

더블쿼트("")로 둘러싼다.

"sample1" "sample26"

MySQL

백쿼트(``)로 둘러싼다.

`sample1` `sample26`

문자열 상수

싱글쿼트('')로 둘러싼다.

'APPLE' '홍길동'

예약어와 같은 이름은 지정할 수 없지만, 더블쿼트("") (MySQL에서는 백쿼트 (``) )로 감싸주면 문제없이 지정할 수 있다.

SELECT price * quantity AS SELECT FROM sample34;

#예약어 그대로 별명으로 사용 불가
ex) SELECT 는 예약어이므로 그대로 별명을 지정해서 사용할 수 없다.
아래와 같이 예약어인 SELECT를 더블쿼트("") (MySQL에서는 백쿼트(``))로 감싸주면 사용 가능하다.

MySQL 이외의 데이터베이스

예약어인 SELECT를 더블쿼트("")로 둘러준다.

SELECT price * quantity AS "SELECT" FROM sample34;

MySQL

예약어인 SELECT를 백쿼트(``)로 둘러준다.

SELECT price * qunatity AS `SELECT` FROM sample34;

숫자로 시작하는 이름

  • 이름을 붙일 때는 숫자로 시작할 수 없다.
    • 이유: 이름이 숫자로 시작할 경우, 그것이 수치형 상수를 의미하는 것인지 데이터베이스 객체명을 의미하는 것인지 구별할 수 없기 때문이다.
  • 이름이 예약어와 겹칠 때와 마찬가지로, 더블쿼트로 묶으면 에러를 피할 수 있다.

데이터베이스 제품별 허용 여부

  • MYSQL에서는 숫자로 시작하는 객체명이 허용된다.
  • Oracle에서는 숫자로 시작하는 이름이 허용되지 않는다.
  • 더블쿼트로 감싸면 객체명으로 간주하는 룰은 표준 SQL에 규정되어 있다.

WHERE 구에서 연산하기

  • WHERE구에서 SELECT구에서와 같이 별명을 사용하면, 존재하지 않는다는 에러가 발생한다.

WHERE구에서 SELECT구의 내부처리 순서

  • WHERE구에서의 행 선택
  • SELECT구에서의 열 선택

데이터베이스 서버 내부에서 WHERE구 -> SELECT구의 순서로 처리된다.

  • 이는 서버 내부의 처리순서와 관련이 있다.
  • WHERE구로 행이 조건에 일치하는지 아닌지를 먼저 조사한다.(행 추출)
  • SELECT구에 지정된 열을 선택해, 결과로 반환하는 식으로 처리한다.(열을 선택해 별명을 붙인다.)
  • SELECT구에서 지정한 별명은 WHERE구 안에서 사용할 수 없다!

NULL값의 연산

  • NULL + 1의 결과값은 1이 아닌 NULL이다.
  • 1 / NULL을 계산하면 NULL이 0으로 처리되지 않기 때문에
    에러가 발생하지 않고, 결과는 NULL이 된다.

ORDER BY 구에서 연산하기

  • ORDER BY 구에서도 연산할 수 있고, 결과값들 정렬이 가능하다.

ORDER BY 구의 내부처리 순서

  • ORDER BY 구는 서버에서 내부적으로 가장 나중에 처리된다. 따라서 WHERE구와는 달리, ORDER BY 구에서는 SELECT구에서 지정한 별명을 사용할 수 있다!

SELECT구, WHERE구, ORDER BY구의 서버 내부 처리 순서

WHERE구 -> SELECT구(여기에서 별명을 지정)-> ORDER BY구


함수

  • 연산자 외에 함수를 사용해 연산할 수 있다.
함수명 (인수1, 인수2...)
  • 함수의 계산 대상은 인수로 지정한다.
  • 인수는 함수명 뒤에 괄호로 묶어 표기한다.

연산자와 함수는 서로 비슷하다.

  • % 연산자(MySQL 등에서 사용 가능): 나머지값을 반환하는 연산자
10 % 4 -> 2
  • MOD 함수(MySQL, Oracle 등에서 사용 가능)
    • 함수명은 MOD이고, 인수로는 나뉘어질 수, 나눌 수 순으로 2개를 지정한다. 나머지 값을 반환한다.
MOD(10, 4) -> 2

함수도 연산자도 표기 방법이 다를 뿐, 같은 것이다!


ROUND 함수

  • DEMICAL형: INTEGER형(정수만 지정 가능)과는 달리 정수부와 소수부의 자릿수를 지정할 수 있는 자료형

반올림 자릿수 지정

  • ROUND 함수는 기본적으로 소수점 첫쨰 자리를 기준으로 반올림한 값을 반환한다.
  • 두 번째 인수로 반올림할 자릿수를 지정할 수 있다.
  • 두 번째 인수를 생략할 경우, 0으로 간주되어 소수점 첫째 자리를 반올림한다.
ex)
1
2
mysql> SELECT 컬럼명, ROUND(컬럼명, 1) FROM 테이블명;
#두 번째 인수로 1을 지정할 경우 소수점 둘째 자리를 기준을 반올림한다.
  • 두 번째 인수를 음수로 지정해서 정수부의 반올림할 자릿수를 지정할 수 있다.
  • ex) -1 지정할 경우 1단위를 반올림하며, -2를 지정하면 10단위를 반올림한다.
반응형