사용자의 정보를 조회
아래 그림은 데이터베이스에 저장된 테이블의 납입 내역 레코드이다. 우리가 데이터를 다룰 때, 테이블에 있는 모든 컬럼을 그대로 가져오는 일은 거의 없다. 일반적으로 필요한 정보만 추출하여 사용하는데 데이터를 효율적으로 다루기 위해 특정 컬럼만 선택적으로 가져오는 방법을 배워보자.
또한 아래 그림처럼 모든 데이터를 가져오는 대신 필요한 레코드만 추출하는 방법도 알아야한다.
더불어 원하는 컬럼에 원하는 레코드만 가져올 수 있어야 한다.
그리고 `학번`데이터와 `이름` 데이터를 합쳐서 새로운 데이터 형태를 만들어서 반환할 수도 있어야한다.
산술 연산자(+, ||)
SQL에서 사용하는 연산자들은 프로그래밍 언어에서 많이 봐왔던 것들과 동일하다. 기본적으로 +, -, *, / 같은 산술 연산자들은 숫자 계산에 사용된다. 대신 몇 가지 주의할 사항을 살펴보도록 하자.
+, -, *, /
만약 "공지사항의 조회수를 조회하시오. 단 기존 값에 1을 더해서 조회하시오."라고 하면 HIT 칼럼에 +1을 하는 방식으로 조회를 할 수도 있다. 하지만 `SELECT HIT+1 FROM NOTICE;` 이렇게 조회하면 문제가 있다. 먼저 `SELECT HIT FROM NOTICE;`를 실행해서 HIT를 조회해보자. HIT 컬럼의 값들을 1을 더하려면 어떻게 해야할까?
`SELECT HIT + 1 FROM NOTICE;`로 조회하면, 각 조회수에 1이 더해진 결과가 출력된다. 하지만 출력된 결과의 컬럼명이 HIT+1로 표시된다. 프로그래머는 일반적으로 컬럼명을 기준으로 데이터를 뽑아내는데, `HIT+1`과 같은 연산식이 포함된 컬럼명을 사용할 경우, 코드를 이해하거나 수정할 때 어려움이 발생할 수 있다.
컬럼명을 HIT+1에서 HIT로 변경하여 출력하려면 별칭(alias)을 사용해야한다.
`SELECT HIT + 1 HIT FROM NOTICE;`와 같이 작성하면 별칭을 부여할 때 AS를 생략하고도 컬럼명을 지정할 수 있다. 이렇게 하면 결과 집합에서 컬럼명이 HIT으로 표시되어 다른 응용 프로그래머들이 해당 컬럼을 직관적으로 사용할 수 있게된다.
또 하나 주의할 사항은 `SELECT 1 + '3' FROM DUAL;`를 실행시키면 어떻게 될까? 숫자 `1`하고 문자열 `'3'`을 더하는 작업을 하면 `4`가 나온다. 오라클은 `+`연산자를 숫자 연산으로만 처리하기 때문에 문자열 `'3'`을 자동으로 숫자 `3`으로 변환하여 연산한다. 따라서 결과는 `4`가 된다.
`FROM DUAL`은 쿼리 문법상 FROM 절이 반드시 필요하기 때문에 오라클에서 연산 결과를 확인하기 위한 더미 테이블로, 데이터 조회가 아닌 단순 연산을 테스트할 때 사용된다.
즉 `+`연산자는 무조건 숫자만 연산해주는 연산자이다. 절대 문자열을 더하는 일은 없다.
오라클에서 문자열을 결합할 때 사용하는 연산자는 `||`이다. 이는 문자열 결합 연산자로, 두 개의 문자열을 이어붙이는 역할을 한다. 예를 들어, `SELECT 1 || '3' FROM DUAL;`을 실행하면 `1`과 `'3'`이 문자열로 결합되어 `13`이라는 결과가 나온다.
이 연산자는 다른 프로그래밍 언어에서 OR 연산자로 사용되지만, 오라클에서는 문자열 결합을 위해 사용된다. 숫자와 문자열을 결합할 경우, 숫자도 자동으로 문자열로 변환되어 결합된다. 따라서 `SELECT 1 || '3' FROM DUAL;`과 같은 쿼리를 실행하면 `1`과 `'3'`이 결합되어 `13`이 결과로 출력된다.
오라클에서 `SELECT 1+'a' FROM DUAL;`을 실행하면 오류가 발생한다. 이 오류는 `ORA-01722: 수치가 부적합합니다 ("invalid number")`라는 메시지를 표시한다. 이유는 `+` 연산자는 숫자 연산에만 사용되며, 문자열을 숫자로 변환하려고 시도하지만 `a`는 숫자로 변환할 수 없기 때문이다.
프로그램을 만들다 보면 회원의 이름과 아이디를 결합하여 새로운 열로 출력해야 할 때가 있다. 원칙적으로는 이런 포맷팅 작업은 UI에서 처리하는 것이 바람직하지만, 데이터베이스에서 직접 처리한다고 가정하고 아래의 문제를 풀려면 `SELECT NAME || '(' || ID || ')' FROM MEMBER;` 쿼리를 사용할 수 있다.
모든 회원의 이름을 조회하시오. 단 이름은 ID를 붙여서 나타내시오. 예:홍길동(hong)
`SELECT NAME || '(' || ID || ')' FROM MEMBER;`
요약
'+'는 숫자만 연산한다, 문자열을 더하는 연산자 '||'
참고자료
'💾 Database > Oracle' 카테고리의 다른 글
[오라클] 12.비교 연산자 (1) | 2024.09.28 |
---|---|
[오라클] 10.트랜잭션 처리(Commit, Rollback) (0) | 2024.09.10 |
[오라클] 9.DML(Update, Delete) (2) | 2024.09.09 |
[오라클] 8.DML(Select, Insert) (0) | 2024.09.09 |
[오라클] 7.ALTER(수정, 삭제, 추가) (0) | 2024.08.31 |