Oracle 기초 : 실전(2) 기초 용법1 - select, where, order by

codePark·2020년 6월 11일
0

Oracle

목록 보기
4/23

Select: Get Virtual Columns

  • 가상의 Column 생성: 존재하지 않는 Column도 가상의 Column을 작성하고 그에 as "alias"를 부여할 수 있다. 이 때, 별칭 선언시 as 및 ""를 생략하는 것도 가능하다. 단, 공백이 없거나 숫자로 시작하지 않는 경우에만 as 및 "" 생략이 가능하다.

Select: null & nvl Function

  • null과 연산: nvl 함수: null을 포함한 산술 연산 수식은 무조건 null을 리턴하므로 정상적인 산술 연산이 불가능하다. 이런 상황에 필요한 함수가 바로 nvl 함수인데, 공식은 다음과 같다:
nvl(column, actual_value_instead_of_null)
--즉 (대상 Column, null을 대체할 값)을 대입한다.

Select : Select Distinct

  • 중복 없는 조회: select distinct: select를 통한 조회 시에 중복값을 허용하지 않으려면 기존의 select 문에 distinct를 추가해 select distinct ColumnName의 형식으로 선언하면 된다. 이 distinct는 select문에 한 번만 사용이 가능하고, 여러 column을 나열하면 여러 Column의 값을 그룹으로 묶어 유일히 취급한 후 조회한다. 다시 말해, select distinct Col1, Col2를 하게 되면 Col1에 중복값이 존재하더라도 이들의 Col2 값이 다르면 중복되지 않는 경우로 취급된다는 것이다. 따라서 distinct에 다중 Column을 선언하는 경우 선언된 Column들의 값이 모두 일치하는 경우에만 이들을 중복값으로 판단하여 제외한다.

Where : Comparison Conditions

  • 수식: 값의 비교: a와 b의 값을 비교한다고 할 때, a=b는 a와 b가 같은가? 라는 뜻이다. (java의 대입연산자와 다르다.) 또한 a와 b는 같지 않은가?를 나타내는 수식은 a!=b, a<>b, a^b 이렇게 3가지가 존재한다. (왜 3가지씩이나 있는건지 모르겠다. 근데 a<>b는 좀 귀엽게 생긴 것 같다.)

Where : between Conditions

  • 조건 범위 연산자: between a and b: a이상 b이하의 값을 조회하며, 여기에서 a와 b에 해당하는 부분은 number 혹은 date 형식이여야 한다. (특성상 조건에 character 대입 불가) 또한 문자열로 날짜 또는 숫자를 입력할 때에, 해당 문자열의 형태가 날짜/숫자와 비슷한 경우 자동으로 날짜/숫자로 형변환 된다. (ex. '20200612' -> date, '200' -> number) ※주의! 영문으로 컴퓨터를 사용하는 경우 한국과 다른 날짜 포맷을 기본으로 차용하고 있기 때문에 '20200612'와 같은 방식으로 입력해도 Oracle이 date로 판별하지 못한다. 영문 PC를 사용하고 있는 경우 where hire_date between '01-Jan-01' and '31-dec-10', 즉 'dd-MMM-yy'의 형식으로 입력해야 한다!

Where : Pattern-Matching Conditions, like(1)

  • 문자열 패턴 비교: like 연산자(1): "정확히" 값이 일치하는지, 아닌지를 판별하는 =, 즉 equal과는 다르게 like는 해당 문자열의 일부가 일치하는지 아닌지를 판별한다. 조건문 판별을 위해 두 가지 기호, %(쓰임에 따라 기호 앞/뒤로 0개 이상의 문자가 존재한다는 의미), _(쓰임에 따라 기호 앞/뒤로 글자가 "정확히 "1개 존재한다는 의미)를 사용한다. 구체적인 작성법은 다음과 같다:
    1. where ColumnName like '%test'; -> Blahtest, 어쩌고test, Atest 등이 조회된다.
    2. where ColumnName like 'test%'; -> testBlah, test어쩌구, testA 등이 조회된다.
    3. where ColumnName like 'test_'; -> testA, testc, test1 등이 조회된다.
    4. where ColumnName like '_\test'; -> Atest, Ctest, 1test 등이 조회된다.

Where : Pattern-Matching Conditions, like(2), escape

  • like 연산자(2): escape용법: java와 다르게 탈출 문자가 정해져 있지 않고, 사용자 임의로 직접 선언 및 사용이 가능하다. 단, 탈출 문자는 단 1글자로만 선언해야 하며, 가급적 역슬래시등 사용 빈도가 적은 문자를 고르는 것이 좋다. 작성법의 예를 들면 다음과 같다:
where ColumnName like '%test\%' escape '\';
where ColumnName like '___\_%' escape '\';
--'%', '_'문자 자체가 like의 판별기호로 작용할 때,
--직접 설정한 escape기호 뒤에 작성해주면 문자로 인식된다.

Where : in/not in Condition

  • in/not in 용법:
where ColumnName in (Condition1, Condition2);
--Column에서 condition1 "또는" condition2의 조건에 해당하는 자료 조회.
--같은 결과를 도출하기 위해서 or 절을 사용할 수 있다.

where ColumnName not in (Condition1, Condition2);
--Column에서 condition1이 아니며 condition2에도 해당되지 않는 자료 조회.
--같은 결과를 도출하기 위해서 and 절을 사용할 수 있다.
--또한, where not ColumnName in (Cond1, Cond2)으로도 표현할 수 있다.

Where : is null/is not null Condition

  • is null/is not null: null값은 비교 및 산술 연산이 불가하므로 null값을 찾아내는 연산자를 별도로 사용해야 한다. 이 때, is null/is not null을 사용하여 null값을 가진 값을 걸러내어 비교/연산하거나, 상기한 nvl(Column,actual_value_instead_of_null)을 통해 null의 대체값을 설정하여 비교/연산할 수 있다.
where Column is null; 
--Column 내에서 null을 포함한 값 조회
where Column is not null; 
--Column 내에서 null을 포함하지 않은 값 조회

Order by : with multiple Columns

  • 개요/다중 정렬: 조회된 result session에 대한 정렬 처리. 작성법은 다음과 같다:
order by ColumnName, asc or desc;
order by Alias, asc or desc;
order by Order of Column, asc or desc;
--즉,
order by dept_code, emp_name, email, phone asc;
order by "사원코드", "사원명", "이메일", "연락처" desc;
order by 1, 2, 4, 3; --asc/desc 구분 생략: 기본값 asc 정렬

문자열에서의 Ascending/Descending은 사전등재순/사전등재역순이며, 별도의 asc/desc 구분을 하지 않는 경우 기본값으로 설정된 asc 정렬을 따른다. 또한 order by ColumnName/Alias/Order of Column에 해당하는 부분은 다중 선언이 가능하다. 이 경우 우선 선언한 기준대로 정렬한 후 그 안에서 다음 기준으로 차례차례 정렬하게 된다.

기타 특이사항

  • 자바와 다르게 +등은 산술 연산에서만 사용이 가능한 수식이다. 문자열끼리 더하기 이런거 안 됨.
  • where 조건문을 사용해서 데이터 조회를 하는 경우 select Column 절에서 조회할 조건절의 범위를 반드시 포함시켜 주어야 한다.
profile
아! 응애에요!

0개의 댓글