SQL 첫걸음 12-13강 정리

책을 보면서 공부한 내용 복습 및 정리

12강

기본설정

  1. Mysql 서버 켜기
  2. Mysql 실행하기
  3. sample database 사용 설정하기
$ mysql.server start
$ sudo mysql
mysql> use sample;

SQL에서도 사칙연산이 가능하며 연산자는 아래와 같다.

연산자
+ 1 + 2 → 3
- 2 - 1 → 1
* 1 * 3 → 3
/ 1 / 2 → 0.5
% 2 % 3 → 2

데이터베이스에 따라 % 대신 MOD 함수를 사용하기도 하며 */% 연산자가 +- 연산자보다 우선순위가 높다.

SELECT 구에서 연산하기

SELECT 구에서는 열명을 지정하여 불러왔는데 연산도 가능하다. sample34 테이블에는 가격과 수량이 있는데 SELECT에서 가격과 수량을 곱한 값을 불러올 수 있다.

sample34.png

price * quantity는 너무 길고 한 눈에 알아보기 어렵다. 이럴 때는 AS를 사용하여 alias를 붙일 수 있다. 또한 AS는 생략할 수 있어 ‘SELECT price * quantity amount FROM sample34;’로 사용할 수도 있다.

as_1.png

AS를 사용할 때 주의해야 할 사항이 몇 가지 있다. 먼저 한글을 포함한 ASCII 문자 이외의 것을 사용할 때는 더블 쿼트(“)로 둘러싸서 사용해야 한다. 더블 쿼트는 데이터베이스 객체 이름으로, 싱글 쿼트(‘)는 문자열 상수로 간주하므로 둘을 잘 구분하여 사용하도록 한다. 또한 SELECT 같은 예약어는 alias로 지정할 수 없는데 더블 쿼트로 둘러싸면 사용할 수 있다.일반적으로 숫자로 시작하는 객체명은 허용되지 않는다. 하지만, MySQL에서는 숫자로 시작하는 객체명이 허용되며 숫자로만 이루어진 객체명은 허용되지 않는다.

WHERE 구에서 연산하기

가격과 수량의 곱이 2000 이상인 결과만 얻고 싶을 때는 WHERE 구에 조건을 추가할 수 있다.

where_1

여기서 SELECT에서 사용한 alias인 amount를 WHERE에서 사용하면 더 편할 것 같지만, 실제로 WHERE amount >= 2000 처럼 사용하게 되면 에러가 발생하며 Unknown colum 'amount' in 'where clause'라는 경고를 보게 된다. 그 이유는 데이터베이스 서버 내부 처리 순서가 WHERE 먼저이고 그 다음 SELECT이기 때문이다. WHERE에서 조건에 일치하는지 확인한 후 SELECT에서 지정한 열을 선택해 반환하므로 SELECT에서 사용한 alias는 WHERE에서 지정되지 않은 상태가 된다.

NULL 연산

NULL은 어떤 연산을 해도 결과가 NULL이 나오게 된다.

  • NULL + 1
  • NULL * 4
  • 1 / NULL

위의 연산은 모두 결과가 NULL이다.

ORDER BY 연산

ORDER BY는 서버에서 가장 나중에 처리된다. 그러므로 SELECT에서 사용한 alias를 사용할 수 있다.

orderby_alias_1

함수

round_1

ROUND 함수는 반올림을 하는 함수이다. 기본적으로 소수점 첫째 자리를 기준으로 반올림하며 ROUND 함수의 두번째 인수로 반올림할 자릿수를 정할 수 있다. 두번째 인수를 생략할 때는 0으로 간주하여 소수점 첫번째 자리를 반올림 한다. 또한, 두번째 인수가 음수일 경우에는 정수부의 반올림 자릿수를 정할 수 있다. 아래 예제에서는 -2로 지정하여 10단위를 반올림 했다.

round_2

13장

문자열 결합은 문자열 데이터를 결합하는 연산이다

'ABC' || '1234'  'ABC1234'

문자열을 결합하는 연산자는 데이터베이스 마다 다르다.

연산자/함수 데이터베이스
+ SQL Server
|| Oracle, DB2, PostgreSQL
CONCAT MySQL
CONCAT

문자열 결합은 2개 열 데이터를 1개 열로 처리하고 싶을 때 주로 사용한다. quantity는 정수형, unit은 문자열형의 데이터인데 CONCAT 함수를 이용하여 두 열을 결합하였다. 결합한 결과는 문자열형이 된다.

concat

SUBSTRING

SUBSTRING은 문자열의 일부분을 반환해주는 함수이다. YYYYMMDD와 같은 형식에서 년, 월, 일 등 원하는 데이터만 추출하고 싶을 때 사용할 수 있다.

SUBSTRING('20191213', 1, 4)  '2019'

SUBSTRING('20191224', 5, 2)  '12'
TRIM

TRIM은 문자열 앞뒤의 스페이스를 제거해주는 함수이다. 하지만 문자열 도중에 있는 스페이스는 제거하지 않는다. 인수를 지정하면 스페이스 이외의 문자를 제거할 수 있다.

TRIM('   ABC    ')  'ABC'
CHARACTER_LENGTH(CHAR_LENGTH)

CHARACTER_LENGTH 함수는 문자열의 길이를 반환한다. CHAR_LENGTH로 줄여서 사용할 수 있다. OCTET_LENGTH 함수도 있는데 문자열의 길이를 바이트 단위로 반환한다.