데이터 제한 및 정렬

SELECT 문의 필수 기능은 Selection, Projection 및 Joining입니다. 테이블의 특정 열을 표시하는 것을 프로젝트 작업이라고합니다. 이제 특정 출력 행을 표시하는 데 초점을 맞출 것입니다. 이를 선택 작업이라고합니다. SELECT 쿼리에 WHERE 절을 추가하여 특정 행을 선택할 수 있습니다. 실제로 WHERE 절은 SELECT 쿼리 계층 구조의 FROM 절 바로 뒤에 나타납니다. 시퀀스는 모든 시나리오에서 유지되어야합니다. 위반할 경우 Oracle은 예외를 발생시킵니다.

통사론:

SELECT *|{[DISTINCT] column| expression [alias],..}
FROM table
[WHERE condition(s)]

구문에서

  • WHERE 절은 키워드입니다.

  • [조건]에는 열 이름, 표현식, 상수, 리터럴 및 비교 연산자가 포함됩니다.

관리자가 조직의 분기 별 예산에 대해 작업하고 있다고 가정합니다. 이 활동의 ​​일환으로 각 직원의 필수 세부 정보 목록을 생성해야하지만 연간 $ 25,000 이상을받는 직원에 대해서만 해당됩니다. 아래 SQL 쿼리는이 작업을 수행합니다. 굵은 텍스트로 표시된 WHERE 절의 사용에 유의하십시오.

SELECT Employee_ID, Last_Name, First_Name, Salary
FROM employees
WHERE Salary >= 25000;  

EMPLOYEE_ID  LAST_NAME        FIRST_NAME       SALARY
----------   ---------------  ---------------  -----------
88303        Jones            Quincey          $30,550.00
88404        Barlow           William          $27,500.00
88505        Smith            Susan            $32,500.00

3 rows selected

주목할 점-

  • SELECT 절은 WHERE 절을 하나만 포함 할 수 있습니다. 그러나 AND 또는 OR 연산자를 사용하여 여러 필터 조건을 WHERE 절에 추가 할 수 있습니다.

  • 술어 절의 열, 리터럴 또는 표현식은 유사하거나 상호 변환 가능한 데이터 유형이어야합니다.

  • 열 별칭은 WHERE 절에서 사용할 수 없습니다.

  • 문자 리터럴은 작은 따옴표로 묶어야하며 대소 문자를 구분합니다.

  • 날짜 리터럴은 작은 따옴표로 묶어야하며 형식을 구분합니다. 기본 형식은DD-MON-RR.

비교 연산자

비교 연산자는 조건 자에서 한 용어 또는 피연산자를 다른 용어와 비교하는 데 사용됩니다. SQL은 포괄적 인 동등성, 부등식 및 기타 연산자를 제공합니다. SELECT 쿼리의 데이터 및 필터 조건 논리에 따라 사용할 수 있습니다. WHERE 절에서 비교 연산자를 사용하는 경우 연산자의 양쪽에있는 인수 (비교하는 개체 또는 값)는 열 이름이거나 특정 값이어야합니다. 특정 값이 사용되는 경우 값은 숫자 값 또는 리터럴 문자열이어야합니다. 값이 문자열 또는 날짜 인 경우 작은 따옴표 ( '') 안에 값을 입력해야합니다.

Oracle에는 같음 또는 같지 않음 조건에서 사용할 9 개의 비교 연산자가 있습니다.

Operator  Meaning
=         equal to 
<         less than
>         greater than
>=        greater than or equal to
<=        less than or equal to
!=        not equal to
<>        not equal to

다른 Oracle 연산자는 BETWEEN..AND, IN, LIKE 및 IS NULL입니다.

BETWEEN 연산자

BETWEEN 연산자를 사용하여 한정된 범위 내에서 열 값을 비교할 수 있습니다. 지정된 범위에는 하한과 상한이 있어야하며 비교 중에 둘 다 포함됩니다. 사용은 복합 부등식 연산자 (<= 및> =)와 유사합니다. 숫자, 문자 및 날짜 유형 값과 함께 사용할 수 있습니다.

예를 들어, WHERE 조건 SALARY BETWEEN 1500 AND 2500 SELECT 쿼리에서 급여가 1500에서 2500 사이 인 직원을 나열합니다.

IN 연산자

IN 연산자는 주어진 값 집합에서 열 값을 테스트하는 데 사용됩니다. 열이 주어진 세트의 값과 동일 할 수있는 경우 조건의 유효성이 검증됩니다. IN 연산자를 사용하여 정의 된 조건을 구성원 조건이라고도합니다.

예를 들어, WHERE 조건 SALARY IN (1500, 3000, 2500) SELECT 쿼리에서 급여가 1500, 3000 또는 2500 인 행을 제한합니다.

LIKE 연산자

LIKE 연산자는 SELECT 쿼리에서 패턴 일치 및 와일드 카드 검색에 사용됩니다. 열 값의 일부를 알 수없는 경우 와일드 카드를 사용하여 알 수없는 부분을 대체 할 수 있습니다. 와일드 카드 연산자를 사용하여 검색 문자열을 작성하므로 검색을 와일드 카드 검색이라고합니다. 이 두 연산자는 백분위 수 ( '%')와 밑줄 ( '_')입니다. 밑줄 ( '_')은 단일 문자를 대체하고 백분위 수 ( '%')는 둘 이상의 문자를 대체합니다. 조합하여 사용할 수도 있습니다.

예를 들어, 아래 SELECT 쿼리는 성이 'SA'로 시작하는 직원의 이름을 나열합니다.

SELECT first_name
FROM employees
WHERE last_name LIKE 'SA%';

IS (NOT) NULL 조건

참고로 NULL 값은 같음 연산자를 사용하여 테스트 할 수 없습니다. NULL 값을 알 수없고 할당되지 않았고 등호 연산자가 명확한 값을 테스트하기 때문입니다. IS NULL 연산자는 열의 NULL 값을 확인하는 등호 연산자 역할을합니다.

예를 들어, WHERE 조건 COMMISSION_PCT IS NULL SELECT 쿼리에서 커미션 비율이없는 직원을 나열합니다.

논리 연산자

WHERE 절 조건 자에 여러 필터 조건을 추가 할 수 있습니다. 논리 연산자 AND, OR 및 NOT을 사용하여 둘 이상의 조건을 함께 결합 할 수 있습니다.

  • AND : 둘 이상의 조건을 조인하고 모든 조건이 참인 경우에만 결과를 반환합니다.

  • OR : 둘 이상의 조건을 조인하고 조건 중 하나라도 참일 때 결과를 반환합니다.

  • NOT : 뒤에 오는 표현식을 부정합니다.

AND 연산자는 WHERE 절에서 둘 이상의 조건을 연결하고 모든 조건이 참인 경우에만 TRUE를 반환합니다. 관리자에게 여성 직원 목록이 필요하다고 가정합니다. 또한이 목록에는 성이 "E"문자로 시작하거나 알파벳 뒤에 나오는 성이있는 직원 만 포함되어야합니다. 또한 결과 테이블은 직원 성을 기준으로 정렬해야합니다. 충족해야 할 두 가지 간단한 조건이 있습니다. WHERE 절은 WHERE Gender = 'F'AND last_name> 'E'로 작성할 수 있습니다.

SELECT last_name "Last Name", first_name "First Name", Gender "Gender"
FROM employees
WHERE Gender = 'F' AND last_name > 'E'
ORDER BY last_name;

OR 연산자는 WHERE 절에서 둘 이상의 조건을 연결하고 조건 중 하나가 true를 반환하면 TRUE를 반환합니다. 조직 관리자의 요구 사항이 약간 변경되었다고 가정합니다. 다른 직원 목록이 필요하지만이 목록에서 직원은 (1) 여성이거나, (2) 문자 "T"로 시작하는 성이 있거나 알파벳 뒤에 나오는 문자가 있어야합니다. 결과 테이블은 직원 성을 기준으로 정렬되어야합니다. 이 상황에서 쿼리를 충족하기 위해 두 조건 중 하나를 충족 할 수 있습니다. 두 번째 조건을 충족하는 이름을 가진 직원과 함께 여성 직원을 나열해야합니다.

NOT 연산자는 표현식 또는 conition을 부정하는 데 사용됩니다.

ORDER BY 절

몇 행의 데이터 만 표시하는 경우 출력을 정렬 할 필요가 없습니다. 그러나 여러 행을 표시 할 때 관리자는 정보를 정렬하여 의사 결정에 도움을받을 수 있습니다. SELECT 문의 출력은 선택적 ORDER BY 절을 사용하여 정렬 할 수 있습니다. ORDER BY 절을 사용하는 경우 정렬하는 열 이름은 SELECT 절에 지정된 열 이름이어야합니다.

아래 SQL 쿼리는 ORDER BY 절을 사용하여 결과 테이블을 last_name 열을 기준으로 오름차순으로 정렬합니다. 오름차순이 기본 정렬 순서입니다.

SELECT last_name, first_name
FROM employees
WHERE last_name >= 'J'
ORDER BY last_name;

last_name        first_name
---------------  ---------------
Jones            Quincey
Klepper          Robert
Quattromani      Toni
Schultheis       Robert

숫자 및 날짜 값을 기준으로 정렬 할 수도 있습니다. 여러 열을 기준으로 정렬 할 수도 있습니다.

기본적으로 ORDER BY 절은 결과 테이블의 출력 행을 오름차순으로 정렬합니다. DESC (내림차순) 키워드를 사용하여 내림차순 정렬을 활성화 할 수 있습니다. 대체 기본값은 오름차순으로 정렬되는 ASC이지만 ASC 키워드는 기본값이므로 거의 사용되지 않습니다. ASC 또는 DESC 선택적 키워드를 사용하는 경우 WHERE 절에서 정렬하는 열 이름을 따라야합니다.

Positional Sorting -선택한 컬럼 목록에서 컬럼의 숫자 위치는 컬럼 이름 대신 ORDER BY 절에 주어질 수 있습니다. 주로 UNION 쿼리에 사용됩니다 (나중에 설명). 쿼리는 결과 집합이 열 목록에서 두 번째로 나타나기 때문에 급여별로 정렬합니다.

SELECT  first_name, salary
FROM employees
ORDER BY 2;

대체 변수

다른 입력 집합에 대해 SQL 쿼리를 두 번 이상 실행해야하는 경우 대체 변수를 사용할 수 있습니다. 대체 변수를 사용하여 쿼리를 실행하기 전에 사용자 입력을 요청할 수 있습니다. 조건부 필터링 및 데이터 표시를위한 입력으로 사용자의 데이터 범위를 가져 오는 쿼리 기반 보고서 생성에 널리 사용됩니다. 값을 임시로 저장하기 위해 대체 변수 앞에 단일 앰퍼샌드 (&) 기호가 붙습니다. 예를 들면

SELECT EMPLOYEE_ID, LAST_NAME, SALARY
FROM employees
WHERE LAST_NAME = &last_name
OR EMPLOYEE_ID = &EMPNO;

위의 SELECT 쿼리가 실행되면 oracle은 '&'를 대체 변수로 식별합니다. 아래와 같이 'last_name'과 'EMPNO'에 대한 값을 입력하라는 메시지가 표시됩니다.

Enter value for last_name:
Enter value for empno:

사용자가 두 변수에 입력을 제공하면 값이 대체되고 쿼리가 확인되고 실행됩니다.

주목할 점-

  • 변수가 문자 또는 날짜 값을 대체하는 것을 의미하는 경우 리터럴은 작은 따옴표로 묶어야합니다. 유용한 기술은 문자 및 날짜 값을 처리 할 때 앰퍼샌드 대체 변수를 작은 따옴표로 묶는 것입니다.

  • SQL Developer와 SQL * Plus는 모두 대체 변수와 DEFINE / UNDEFINE 명령을 지원합니다. SQL Developer 또는 SQL * Plus는 사용자 입력에 대한 유효성 검사 (데이터 유형 제외)를 지원하지 않습니다.

  • SQL 문의 WHERE 절뿐만 아니라 열 이름, 표현식 또는 텍스트에 대한 대체로도 대체 변수를 사용할 수 있습니다.

이중 앰퍼샌드 대체 변수 사용

동일한 대체 변수가 여러 위치에서 사용되는 경우 동일한 데이터를 다시 입력하지 않도록 이중 앰퍼샌드 대체를 사용합니다. 이러한 경우, 입력 된 대체 변수의 값은 모든 사용 순간에 대체됩니다.

SELECT first_name, HIRE_DATE, SEPARATION_DATE
FROM employees
WHERE HIRE_DATE LIKE '%&DT%' AND SEPARATION_DATE '%&&DT%'

위의 쿼리에서 동일한 & DT 값이 두 번 대체됩니다. 따라서 사용자가 제공 한 값은 두 곳에서 대체됩니다.

DEFINE 및 VERIFY 명령

세션에서 변수 정의 설정은 SQL * Plus의 DEFINE 기능에 의해 설정됩니다. 쿼리 실행 중 중단을 방지하기 위해 세션에서 변수를 정의 할 수 있습니다. Oracle은 SQL 쿼리에서 발생할 때마다 동일한 변수를 읽습니다. 기본적으로 ON 상태입니다. DEFINE 절의 도움으로 쿼리 실행 전에 명령 줄에서 변수를 다음과 같이 선언 할 수 있습니다.DEFINE variable=value;.

Verify 명령은 OLD 및 NEW 문으로 표시된 위의 대체를 확인합니다. 기본적으로 OFF이며 SET 명령을 사용하여 ON으로 설정할 수 있습니다.

SQL> SET DEFINE ON
SQL> SET VERIFY ON
SQL> DEFINE NAME = MARTIN'
SQL> SELECT first_name, SALARY 
FROM employees
WHERE first_name = '&NAME';
OLD   1: select first_name, sal from employee where first_name = '&first_name'
new   1: select first_name, sal from employee where first_name = 'MARTIN'

first_name     SALARY
-------        -------
MARTIN         5000