본문 바로가기
프로그래밍/데이터베이스

[SQL 기초 - 2장] 오라클 SELECT 구문을 배워보자!!

by 잡학다방 2024. 11. 25.
반응형

오늘은 SQL 구문 중 DML 의 한 종류인 SELECT 의 실 사용법을 알아보겠습니다.

먼저 SELECT 구문의 특징을 알아볼까요?

SELECT 구문

1. 컬럼값을 가공 하거나, 존재하지 않는 새로운 상수값(정해진 값)을 표현합니다.

2. 연산을 통해 새로운 컬럼을 조회할 수 있습니다.

3. 연산을 하더라도 해당 SQL 조회 결과에만 나올 뿐이고 실제 테이블의 데이터에는 영향을 주지 않습니다.

위 처럼 3가지의 특징을 가진 SELECT 구문을 바로 사용 해보겠습니다!

혹시라도 테이블 데이터가 없으신 분들은 아래 버튼을 눌러 확인하고 오시길 바랍니다!

 

[1.5장] 오라클에 실습 데이터 넣기

안녕하세요! 2장으로 넘어가기 전에 우리가 앞으로 실습할 때 사용할 데이터를 넣어보도록 하겠습니다! 도커에서 오라클 서버를 켜주시고 DBeaver 도 켜서 지난시간에 연결 해놓은 새로 생성한

tdkimblog.com

 

아래 사진들이 이전에 사용했던 DBeaver 와 다를 수 있는데 결과만 확인하시면 됩니다!!

저는 SQLdeveloper 라는 툴을 사용한거에요!!

 

 

 

emp 테이블 전체 조회 쿼리

먼저 제가 가진 emp 테이블을 조회 해봤습니다.

쿼리를 설명하자면 SELECT 구문의 기본인데 아래와 같은 형식을 갖고 있습니다.

SELECT * | [column, column2, ...] [Alias]
FROM 테이블명;

 

' | ' 표기는 '또는' 이라는 의미를 갖고 있으며 [ ] 사이의 내용은 옵션이므로 있어도 되고 없어도 되는 컬럼입니다.

* 를 하면 모든 컬럼을 선택한것과 같은 결과를 보여줍니다.

emp 테이블의 sal 데이터 변형

emp 테이블의 sal 데이터를 변형시켜 봤습니다.

앞서 말한 SELECT 구문의 특징대로 컬럼값을 가공,

즉 사칙연산을 해도 테이블의 데이터는 변형되지 않고 새로운 컬럼으로 나타나게 되죠.

그리고 SQL 에서는 날짜에 사칙연산을 할 수 있습니다.

이 말이 무슨 말이냐, 날짜데이터에 +,- 정수 의 식에서 정수를 일자 취급 한다는 말이죠

예를 들면,

'2020년 6월 25일" + 5 : 2020년 6월 25일부터 5일 지난 날짜

'2020년 6월 25일" - 5 : 2020년 6월 25일부터 5일 이전 날짜

위와 같은 개념이 적용된다는 것입니다.

사진을 통해 확인해 보도록 하죠

emp 테이블의 hiredate 의 변형

앞에서 봤던 emp 테이블의 hiredate 부분과 그의 변형컬럼을 나타낸 사진입니다.

날짜를 보시면 기존 데이터에서 +5일, -5일이 되었고, 그것들이 새로운 테이블로 나타난것을 확인할 수 있습니다.

다른 테이블을 보겠습니다.

users 기본 테이블

users 라는 테이블이 있습니다.

곳곳에 (null) 이라는 문구들이 보이는데요, 번외로 설명하자면

NULL : 아직 모르는 값, 할당되지 않은 값

NULL과 숫자타입의 0은 다르며, 문자타입의 공백과 다르다.

NULL을 피연산자로 하는 연산의 결과는 항상 NULL => NULL + 500 = NULL

NULL은 위와 같은 특징을 갖고 있습니다.

emp 테이블에 별칭 부여, 컬럼의 합

그럼 이어서 SELECT 구문에 대해 다시 설명하도록 하겠습니다.

지금까지의 제가 첨부한 사진들을 보면 테이블의 컬럼명들이 처음에 정한 이름으로 정해져있습니다.

하지만 우리는 이것들을 바꿀 수 있죠.

제가 처음에 SELECT 구문의 형식을 써드렸을때 [Alias] 라고 있던것을 기억하시나요?

Alias 는 별칭이라는 뜻으로 SQL 에서는 컬럼명을 바꿀 때 이 부분에 바꿀 이름을 적어주시면 됩니다. 위의 사진처럼 말이죠. 위의 사진처럼 한글명도 사용할 수 있습니다.

그리고 앞에서는 컬럼의 내용에 사칙연산을 통해 증감, 곱, 나누기를 할 수 있다고 했는데요,

컬럼들끼리도 가능합니다. 위의 사진에서 보시면 sal 와 comm 부분이 합쳐진것을 볼 수 있습니다.

또한, 별칭은 SQL 내부에서 무조건 대문자로 표현되는데 소문자로 표현하고 싶다면 더블 쿼테이션 ""으로 묶어주시면 됩니다. 물론 그 사이에 공백도 넣을 수 있습니다.

다음으로 literal 에 대해서 좀 설명해볼까 합니다.

literal 이란, 값 자체를 말하며 literal 표기법은 값을 표현하는 방법입니다.

JAVA 에서는 리터럴을 표기할 때 "test" 와 같이 더블 쿼테이션으로 묶어주는데요,

SQL 에서는 'test' 와 같이 싱글 쿼테이션으로 묶어줍니다.

네! 이것을 보고 문자열 표기방법이라고 하죠!

그렇다면 이 문자열들의 연산이 가능 할까요?

JAVA 에서는 문자열의 결합연산자로 "+" 를 사용하죠?

하지만 SQL 에서는 문자열의 결합연산자로 | | (역 슬래쉬x2)를 사용합니다.

그리고 문자열 결합 함수도 있는데요 CONCAT 이라는 함수입니다.

CONCAT(문자열1, 문자열2) ==> 문자열1 || 문자열2

두개의 문자열을 인자로 받아서 결합 결과를 리턴하는 방식입니다.

users 테이블의 userid 컬럼과 usernm 컬럼을 결합

위의 사진은 userid 컬럼과 usernm의 컬럼을 연산자와 함수를 사용해 각각 결합시킨 결과입니다.

그렇다면 위와 같은 쿼리는 어떻게 짜면 될까요?!

생각해보세요!!

!

!

!

!

!

!

!

!

!

!

!

!

!

!

!

!

!

!

!

 

CONCAT 의 형식을 보면 문자열이 두개 뿐이기 때문에 세개의 문자열을 위의 쿼리처럼 두개의 문자열로 바꿔 주시는 작업을 하면 됩니다.

WHERE 구문

마지막으로 SELECT 구문에서 가장 중요한 부분인 WHERE 절에 대해서 알아보겠습니다.

SQL 을 조금 공부하신분들은 첫 부분에서 SELECT 구문에 왜 WHERE 절이 없지?!

라는 생각을 하셨으리라 생각합니다.

SELECT 의 기본을 먼저 설명하고자 했기에 WHERE절을 뒤로 미뤘습니다.

WHERE ?

WHERE : 테이블에서 조회할 행의 조건을 기술한다

WHERE 절에 기술한 조건이 참일 때 해당 행을 조회합니다.

SQL에서 가장 어려운 부분이면서 많은 응용이 발생하는 부분이죠.

바로 실행해보도록 하겠습니다!

WHERE 절을 이용한 해당 조건 행 조회

어떠신가요? 처음의 users 기본 테이블에 있던 많은 이름들이 없어지고,

'brown' 이라는 문자열을 포함한 행만 나타났죠?

WHERE 절에서 "userid 컬럼이 'brown' 을 포함한 행만 조회" 라고 조건을 걸었기 때문입니다.

또한, 이 WHERE 절의 조건으로는 문자열 뿐만 아니라 비교 조건도 사용할 수 있습니다.

<, >, <=, >= 과 같이 부등호를 이용할 수 도 있고,

BETWEEN ~ AND ~IN 연산자를 사용할 수 있습니다.

BETWEEN AND : 두 값 사이에 위치한 값을 참으로 인식

형식 : 비교값 BETWEEN 시작값 AND 종료값

비교값이 시작값과 종료값을 포함하여 사이에 있으면 참으로 인식합니다.

그럼 바로 쿼리를 보겠습니다.

emp 테이블에서 BETWEEN AND 를 사용하여 조회

위의 쿼리는 emp 테이블에서 sal 값이 1000보다 크거나 갖고 2000보다 작거나 같은 사원들만(행들만) 조회한 쿼리와 결과값 입니다.

그리고 바로 IN 연산자에 대해 설명하겠습니다.

IN : 비교값이 나열된 값에 포함될 때 참으로 인식

형식 : 비교값 IN (비교대상 값1, 비교대상 값2, 비교대상 값3,...)

비교대상 값들은 갯수에 제한이 없습니다.

OR 연산과 비슷한 연산자인데요 여러개의 비교대상 값들이 있다면 IN 연산자를 사용하는게 훨 씬 편하겠죠?

emp 테이블에서 IN 연산자를 사용하여 조회

emp 테이블의 전체테이블을 위에서 보고 오시면 알겠지만 위의 쿼리는 사진과 같이 deptno 가 10 또는 20인 행들만 조회한 결과입니다.

오늘은 SQL의 SELECT 구문에 대해서 알아보았습니다.

다음에는 더 유익한 정보로 돌아오겠습니다.

감사합니다!!!

반응형