Programming/SQL

[SQL 입문] selection 검색

aram 2022. 8. 18. 02:00

- selection 검색

select * | [distinct] column 리스트 | 표현식 [as alias]
from 테이블 [AS alias]  --여기까지만 하면 project(관계데이터) 연산 검색하는 것
[where 조건]  -- 여기까지 하는게 selection 검색
[order by 컬럼 정렬방식, 컬럼 position, 별칭]
  • 조건은 컬럼 비교연산자값 형식으로 선언
  • 정렬방식 : 생략 = asc(오름차순) 정렬   /  명시 - desc(내림차순)
  • 날짜 값 형식이 세션에 설정된 format과 일치하거나 유사하면, 자동으로 date타입으로 형변환해줌

 

- where 조건에 사용되는 연산자

  • 비교 연산자 > , >=, =, <>, !=, <, <=
  • 범위 연산자 [NOT] BETWEEN 하한값 AND 상한값 : 하한값과 상한값 사이에 포함되는지 비교한다
  • in list 연산자 [NOT] IN(리스트) : 리스트 여러값 중에서 어느 하나와 일치한다
  • character pattern matching 연산자 : 시작 또는 끝을 포함하는 문자 또는 문자열을 조건으로 검색
    -- LIKE : 유사항목
    -- 만능문자 '%' : 0개 이상 M 글자수, 모든 문자를 의미
    -- '_' :  1개의 글자 수 또는 모든 문자 의미 
  • 논리 연산자 : nor, and, or

 

- 연산자 우선순위

  1. 산술연산자
  2. 연결연산자 ||
  3. 비교연산자
  4. is null, like, in, is not null, not like, not in
  5. [not] between 하한값 and 상한값
  6. not
  7. and
  8. or

>> 괄호를 사용하여 우선순위에 대한 규칙 순위 조절 가능

 

- null 값

  • null에 대한 산술연산자, 비교연산자, 논리 연산 모두 null return
  • null은 아직 값이 할당되지 않아 알 수 없는 값으로 ' '
    >> 0이 아님

 


1. 비교 연산자

Q) EMP 테이블에서 급여가 3000이상인 사원의 사원번호, 이름, 담당업무, 급여를 출력하라.

더보기
select empno, ename, job, sal
from emp
where sal >= 3000;

 

2. 범위 연산자 : BETWEEN 하한값 AND 상한값

Q) EMP 테이블에서 급여가 2000이상 3000 이하인 사원의 사원번호, 이름, 담당업무, 급여를 출력하라.

더보기
select empno, ename, job, sal
from emp
where sal >= 2000 and sal <= 3000;

select empno, ename, job, sal
from emp
where sal between 2000 and 3000;

 

3. IN(리스트) 

Q) EMP 테이블에서 사원번호가 7902, 7788, 7566인 사원의 사원번호, 이름, 담당업무, 급여, 입사일자를 출력하라.

더보기
select empno, ename, job, sal, hiredate
from emp
where empno = 7902 or empno = 7788 or empno = 7566;

select empno, ename, job, sal, hiredate
from emp
where empno in (7902, 7788, 7566);

 

4. character pattern matching 연산자

Q) EMP 테이블에서 이름의 첫 글자가 'M'인 사원의 이름, 급여를 출력하라.

더보기
SELECT ename, sal
FROM emp
WHERE ename LIKE 'M%';

 

Q) EMP 테이블에서 이름의 두 번째 글자가 'L'인 사원의 이름, 업무를 출력하라.

더보기
SELECT ename, job
FROM emp
WHERE ename LIKE '_L%';

 

Q) EMP 테이블에서 이름의 마지막 글자가 'N'인 사원의 이름, 업무를 출력하라.

더보기
SELECT ename, job
FROM emp
WHERE ename LIKE '%N';

 


 

-- 날짜 값 형식이 세션에 설정된 format과 일치하거나 유사하면, 자동으로 date타입으로 형변환해줌

Q) EMP 테이블에서 1982년 1월 1일 이후에 입사한 사원의 사원번호, 성명, 담당업무, 급여, 입사날짜를 출력하라.

더보기
SELECT empno, ename, job, sal, hiredate
FROM emp
WHERE hiredate >= '1-1-82';  -- 오류

SELECT empno, ename, job, sal, hiredate
FROM emp
WHERE hiredate >= '1982-1-1';

 

Q) EMP 테이블에서 82년도에 입사한 사원의 사원정보, 성명, 담당업무, 급여, 입사일자, 부서번호를 출력하라.

더보기
SELECT empno, ename, job, sal, hiredate, deptno
FROM emp
WHERE hiredate like '82%';   -- hiredate컬럼을 자동으로 char로 형변환 되서 비교가능해짐

SELECT empno, ename, job, sal, hiredate, deptno
FROM emp
WHERE hiredate like '%82%';  -- 포맷형식이 'DD-MM-YY'형식인 경우

SELECT empno, ename, job, sal, hiredate, deptno
FROM emp
WHERE hiredate between '82/01/01' and '82/12/31';

 

--82년도 이후로 표현 할 때 

더보기
SELECT empno, ename, job, sal, hiredate, deptno
FROM emp
WHERE hiredate > '82/01/01' ;

 


 

-- null 값

Q > 커미션을 받는 사원 검색

더보기
SELECT ename, sal, comm, job
FROM emp
WHERE comm < 0;  --- 논리적 오류

SELECT ename, sal, comm, job
FROM emp
WHERE comm is not null;

 

Q > 커미션을 받지 않는 사원 검색

더보기
SELECT ename, sal, comm, job
FROM emp
WHERE comm = null;  --error

SELECT ename, sal, comm, job
FROM emp
WHERE comm is null;

 


 

--괄호를 사용하여 우선순위에 대한 규칙 순위 조절 가능

Q > 급여가 1500 이상인 사원 중 업무가 PRESIDENT 이거나 SALESMAN인 사원번호, 이름, 업무, 급여를 출력하라

더보기
SELECT empno, ename, job, sal
FROM emp
WHERE sal >= 1500 AND (job = 'PRESIDENT' OR job = 'SALESMAN');

select empno, ename, job, sal
from emp
where (sal >= 1500) and (job in ('PRESIDENT', 'SALESMAN'));

 


 

-- 정렬해서 출력하기

Q > EMP 테이블에서 업무를 기준으로 정렬하여 사원번호, 이름, 급여, 입사일자를 조회한다

더보기
SELECT empno, ename, job, sal, hiredate
FROM emp
ORDER BY job;

SELECT empno, ename, job, sal, hiredate
FROM emp
ORDER BY job desc;

 

Q > EMP 테이블에서 부서번호를 오름차순 정렬한 후 부서번호가 동일할 경우 급여가 많은 순으로 사원번호, 이름, 업무, 부서번호, 급여를 조회한다

더보기
SELECT empno, ename, sal, job, deptno
FROM emp
ORDER BY deptno, sal DESC;

 

Q > 아래의 표현식이 가능할까?  >> 모두 가능!

SELECT empno, ename, sal*12 " Annual Salary"
FROM emp
ORDER BY sal*12 DESC;  

SELECT empno, ename, sal*12 "Annual Salary"
FROM emp
ORDER BY "Annual Salary" DESC;  

SELECT empno, ename, sal*12 "Annual Salary"
FROM emp
ORDER BY 3 DESC;

 

* 내용참고&출처 : 태그의 수업을 복습 목적으로 정리한 내용입니다.

728x90