본문 바로가기

ORACLE

1. [Oracle] SELECT문을 사용해 보자.

SELECT 문은 데이터베이스에서 정보를 검색합니다. SELECT 문으로 다음을 수행할 수 있습니다.

프로젝션: query에 의해 반환되는 테이블의 열을 선택합니다. 필요한 수만큼 열을 선택할 수 있습니다.

선택: query에 의해 반환되는 테이블의 행을 선택합니다. 다양한 조건을 사용하여 검색되는 행을 제한할 수 있습니 다.

조인: 두 테이블 사이에 링크를 지정하여 서로 다른 테이블에 저장된 데이터를 함께 가져옵니다. SQL조인은 "조인을 사용하여 여러 테이블의 데이터 표시" 단원에서 자세히 다룹니다.

 

기본 SELECT 문 가장 간단한 형태의 SELECT 문은 다음을 포함해야 합니다.

표시할 열을 지정하는 SELECT

SELECT 절에 나열된 열을 포함한 테이블을 식별하는 FROM 절 이 구문에서 다음이 적용됩니다. SELECT 둘 이상의 열로 이루어진 리스트입니다.

 

* 모든 열을 선택합니다. DISTINCT 중복을 방지합니다. column|expression 이름 지정된 열 또는 표현식을 선택합니다. alias 선택된 열에 다른 머리글을 지정합니다. FROM table 열을 포함하는 테이블을 지정합니다. 참고: 본 과정 전체에 걸쳐 키워드 , , 명령문 이라는 단어는 다음과 같이 사용됩니다. 키워드 는 개별SQL 요소를 나타냅니다. 예를 들어, SELECT FROM 등이 키워드입니다. 절 은 SQL 문의 일부입니다. 예를 들어, SELECT employee_id, last_name 등이 절입니다. 명령문 은 둘 이상의 절이 결합된 것입니다. SELECT * FROM employees를 예로 들 수 있습니다.

 

-모든 열 선택

SELECT *

FROM departments;

#selectfrom은 소문자로 써도 가능합니다. SQL문은 대소문자를 구분하지 않습니다. 또한 한 줄로 쭉 늘여쓰더라도 상관없습니다.

#desc departments; 로 해당 데이터 셋에 어떤 열들이 있는지를 확인 할 수 있습니다. 밑에서 자세히 다루겠습니다.

 

-특정 열 선택

SELECT department_id, location_id

FROM departments;

 

select는 표시할 열을 식별합니다.

from은 이러한 열을 포함한 테이블을 식별합니다.

 

#열의 내용은 문자와 날짜는 왼쪽 정렬, 숫자는 오른쪽 정렬됩니다.

 

당연하게도 +, -, *, /가 가능합니다.

산술 연산자를 사용하려면 아래와 같이 하면 됩니다.

 

select salary + 300

from employees;

 

이렇게 실행하면 salary열의 내용들에 300이 추가되서 나타나게 됩니다.

 

연산자는 우선 순위가 존재합니다. 사칙연산과 비슷한 개념이라고 보면 됩니다.

 

-Null 값 정의

행에 특정 열에 대한 데이터 값이 없는 경우 해당 값이 null이거나 null을 포함한다고 합니다. Null은 사용할 수 없거나 , 할당되지 않았거나, 알 수 없거나, 적용할 수 없는 값입니다. Null0이나 공백과는 다릅니다. 0은 숫자이며 공백은 문자입니다.

 

 

null값을 포함하는 산술식은 null로 계산됩니다.

 

-alias정의

열 머리글의 이름을 바꿉니다.

계산에서 유용합니다.

열 이름 바로 뒤에 나옵니다.(열 이름과 alias 사이에 선택 사항인 AS 키워드가 올 수도 있습니다 .)

공백이나 특수 문자를 포함하거나 대소문자를 구분하는 경우 큰 따옴표가 필요합니다

 

SELECT last_name AS name, commission_pct comm

FROM employees;

 

위의 예시처럼 AS를 이용하여 이름을 재명명할 수 있고, 그냥 띄어씌기로도 가능합니다.

 

SELECT last_name "Name" , salary*12 "Annual Salary"

FROM employees;

 

이렇게 큰따옴표로도 가능한데, 위의 예시처럼 띄어쓰기가 있는 경우에는 큰따옴표로만 재명명이 가능합니다.

, 큰따옴표로 자주 이용하게 될 것입니다.

 

-연결 연산자

열이나 문자열을 다른 열에 연결합니다.

두 개의 세로선(||)으로 나타냅니다.

결과 열로 문자 표현식을 작성합니다.

 

SELECT last_name||job_id AS "Employees" FROM employees;

 

위의 예시처럼 실행을 하게 되면 last_name열과 job_id의 내용들이 띄어쓰기 없이 합쳐지게 됩니다.

 

-리터럴 문자열

리터럴은 SELECT 문에 포함된 문자, 숫자 또는 날짜입니다.

날짜 및 문자 리터럴 값은 작은 따옴표로 묶어야 합니다.

각 문자열은 반환되는 각 행에 한 번 출력됩니다

날짜 및 문자 리터럴은 반드시 작은 따옴표(' ')로 묶어야 하지만 숫자 리터럴은 그럴 필요가 없습니다.

 

리터럴 문자열이라는 말이 어려울 수 있는데 다음 예시를 보시면 바로 이해가 가실 것입니다.

 

 

SELECT last_name ||': 1 Month salary = '||salary Monthly

FROM employees;

 

이렇게 되면 last_nam열과 salary Monthly열의 내용들 사이에 ‘: 1 Month salary = ’문자가 들어가는 것입니다.

원래는 Whalen4400 이였다면 Whalen: 1 Month salary = 4400 이렇게 되는 것입니다.

 

-대체 인용(q) 연산자

자신의 따옴표 구분자를 지정합니다.

구분자를 임의로 선택합니다.

가독성 및 사용성이 증가합니다.

많은 SQL 문에서 표현식이나 조건에 문자 리터럴을 사용합니다. 리터럴 자체에 작은 따옴표가 포함된 경우 인용(q) 연산자를 사용하여 자신의 따옴표 구분자를 선택할 수 있습니다. 단일 바이트든 멀티 바이트든 [ ], { }, ( ), < > 문자 쌍 중에서 사용하기 편한 구분자를 선택할 수 있습니다. 위의 예제에서는 문자열에 작은 따옴표가 포함되어 있으며, 이것은 대개 문자열 구분자로 해석됩니다. 그러나 q 연산자를 사용할 경우 대괄호 [] 가 따옴표 구분자로 사용됩니다. 대괄호 구분자 사이의 문자열은 리터럴 문자열로 해석됩니다.

 

SELECT department_name || q'[ Department's Manager Id: ]' || manager_id AS "Department and Manager" FROM departments;

 

-중복행

기본적으로 query 결과에는 중복 행을 포함한 모든 행이 표시됩니다. 중복되지 않게 결과만 나타내고 싶을 경우 distinct 혹은 unique를 사용합니다.

 

SELECT DISTINCT department_id FROM employees;

 

-describe명령어(테이블 구조 표시)

DESCRIBE 명령을 사용하여 테이블의 구조를 표시합니다.

또는 Connections 트리에서 테이블을 선택하고 Columns 탭을 사용하여 테이블 구조를 확인합니다.

 

DESCRIBE 명령을 사용하여 테이블의 구조를 표시할 수 있습니다. 이 명령은 열 이름 및 데이터 유형을 표시하고 열에 반드시 데이터가 포함되어야 하는지 여부(, 열에 NOT NULL 제약 조건이 있는지 여부)를 보여줍니다. 구문에서 table name은 유저가 액세스할 수 있는 기존의 테이블, 뷰 또는 동의어의 이름입니다. SQL Developer GUI 인터페이스를 사용하면 Connections 트리에서 테이블을 선택하고 Columns 탭을 사용하여 테이블 구조를 확인할 수 있습니다.

 

데이터 유형은 다음 표에 설명되어 있습니다.

데이터 유형

설명

NUMBER(p,s)

최대 자릿수가 p이고 소수점 이하 자릿수가 s인 숫자 값

VARCHAR2(s)

최대 크기가 s인 가변 길이 문자 값

DATE

기원전 471211일에서 기원후 99991231일 사이의 날짜 및 시간 값