SQL 연산자 & ORDER BY절

YeHee·2024년 10월 23일

⏰ 2024.10.23 (D+10)

1. SQL 연산자

1) BETWEEN 연산자
: 두 값의 범위에 해당하는 행을 출력하기 위해 사용
BETWEEN연산자는 컬럼 >= 값 AND 컬럼 <= 값과 같은 의미
컬럼명 BETWEEN 값1 AND 값2
⇒컬럼명 >=값1 AND 컬러명 <=값2

예시 📖]
select
ename,
job,
sal
from emp
where sal between 2500 and 3000;
- 추출조건 : 연봉이 2500에서 부터 3000에 해당하는 경우

2) IN 연산자
: 목록에 있는 값에 대해서 출력하기 위해 IN연산자를 사용
IN 연산자는 OR로 연결된 논리연산자의 결합과 같다.
컬럼명 IN (값1,값2,....)
⇒ 컬럼명 =값1 OR 컬럼명 = 값2 OR....

예시 📖]
select
ename,
job,
sal
from emp
where job in ('SALESMAN','MANAGER');
- 추출조건 : 직업이 SALESMAN 이거나 MANAGER에 해당하는 경우

3) LIKE 연산자
: 검색 스트링 값에 대한 와일드 카드 검색을 위해서 LIKE연산자를 사용

  • % 임의의 0개 이상의 문자열
  • 임의의 한 글자
    - LIKE 'A%'
    : 컬럼이 'A'로 시작하는 데이터들만 검색
    ABC,A123,A
    - LIKE '%A'
    컬럼이 'A'로 끝나는 테이터들만 검색
    BCA,123A,A
    - LIKE '%KIM%'
    : 컬럼에 'KIM' 문자가 있는 데이터 들만 검색
    ABCKIM ,ABCKIMDEF,KIMABC ,KIM
    - LIKE '_A%'
    : 컬럼에 'A'문자가 두 번째 위치한 데이터 들만 검색
    DA(O),DDDA(X),A(X),DA123(O)

예시 📖]
- 추출조건 : 'S'으로 시작하는 조건 검색
select
ename,
job,
sal,
deptno
from emp
where job like 'S%';

- 추출조건 : 'N'으로 끝나는 조건 검색
select
ename,
job,
sal,
deptno
from emp
where job like '%N';

- 추출조건 : 'SALE' 문자가 있는 데이터 들만 검색
select
ename,
job,
sal,
deptno
from emp
where job like '%SALE%';

- 추출조건 : 컬럼에 'A'문자가 두 번째 위치한 데이터 들만 검색
select
ename,
job,
sal,
deptno
from emp
where job like '_A%';

4) IS NULL 연산자
- NULL값은 값이 없거나, 알 수 없거나, 적용할 수 없다는 의미
- NULL값을 조회하고자 할 경우 사용
- NULL 이란 0이나 공백(SPACE)와는 다르다.
- NULL값을 포함한 산술 표현식 결과는 NULL
- 컬럼에 데이터 값이 없으면 그 값 자체가 NULL

예시 📖]
- IS NULL 연산자
select
job,
comm
from emp
where comm is null;

- IS NOT NULL 연산자
select
job,
comm
from emp
where comm is not null;

2. ORDER BY절

🔖 중요]
- ORDER BY절은 행을 정렬하는 데 사용하며, SELECT문의 맨 뒤에 기술
- 하나 이상의 열로 질의 결과를 정렬 가능
- 주어진 테이블에 있는 컬럼 갯수까지만 가능
- ORDER BY절에서 열을 명시하고, 열 이름은 콤마(,)로 구분

예시 📖]
- 오름차순
select *
from emp
ORDER by sal;

-내림차순
select *
from emp
ORDER by sal DESC;

3. SQL 문제(1~11)

📙문제 1]
EMP 테이블에서 직책이 MANAGER이면서 연봉이 2500이상 3000이하인 직원의 사원번호,이름,직책,연봉을 출력(검색)하여라
단, BETWEEN A AND B 연산자 이용.

select
empno 사원번호,
ename 이름,
job 직책,
sal 연봉
from emp
where job = 'MANAGER' and sal between 2500 and 3000;

📙문제 2]
부서 코드가 30인 직원 중에 연봉이 1500이상인 직원의 이름과 부서 코드 와 연봉 그리고 직무를 출력하여라,
단, 직무가 SALESMAN은 제외하여라.

select
ename 이름,
deptno 부서코드,
sal 연봉,
job 직무
from emp
where deptno ='30' and sal >=1500 and job != 'SALESMAN';

📙문제 3]
EMP 테이블에서 부서 코드가 20 이거나 혹은 30 이면서 연봉이 2000이상이 아닌(2000미만인) 직원 모든 데이타를 검색해라
단, IN연산자를 이용(부서 코드 적용시)

select
empno 사원번호,
ename 이름,
job 직업,
mgr 직급번호,
hiredate 입사일,
sal 연봉,
comm 성과급,
deptno 부서코드
from emp
where deptno in('20','30') and sal < 2000;

select

  • from emp
    where deptno in('20','30') and NOT sal >= 2000;

📙문제 4]
EMP 테이블에서 부서 코드가 20 이거나 30이 아니면서 연봉이 2000이상이 아닌 직원 모든 데이타를 검색해라
단, IN연산자를 이용(부서 코드 적용시)

select
empno 사원번호,
ename 이름,
job 직업,
mgr 직급번호,
hiredate 입사일,
sal 연봉,
comm 성과급,
deptno 부서코드
from emp
where deptno NOT in('20','30') and sal < 2000;

📙문제 5]
보너스(COMM)를 받는 직원 중에서 연봉이 1500이상인 직원의 모든 데이타를 검색해라.(IS NULL연산자)

SELECT
*
FROM EMP
WHERE comm is not NULL and sal >=1500;

📙문제 6]
HR계정의 EMPLOYEES테이블에서 COMMISSION_PCT가 NULL이 아닌 직원 중 연봉이 5000 이상이면서 LAST_NAME이 S로 시작하는 직원의 FIRST_NAME과 LAST_NAME ,COMMISSION_PCT,SALARY를 검색하여라
단, FIRST_NAME과 LAST_NAME을 연결해서 출력하고 컬럼명을 ’성 명’으로 별칭을 부여해서 출력해라

select
FIRST_NAME,
LAST_NAME,
COMMISSION_PCT,
SALARY,
FIRST_NAME || ' ' || LAST_NAME "성 명"
from EMPLOYEES
where COMMISSION_PCT is not null and SALARY >= 5000 and LAST_NAME like 'S%';

📙문제 7]
HR계정의 EMPLOYEES테이블에서 COMMISSION_PCT가 NULL이 아닌 직원 중 연봉이 5000 이상이면서 LAST_NAME의 두번째 글자가 a로 시작하는 직원의 FIRST_NAME과 LAST_NAME ,COMMISSION_PCT,SALARY를 검색하여라
단, FIRST_NAME과 LAST_NAME을 연결해서 출력하고 컬럼명을 ’성 명’으로 별칭을 부여해서 출력해라

select
FIRST_NAME,
LAST_NAME,
COMMISSION_PCT,
SALARY,
FIRST_NAME || ' ' || LAST_NAME "성 명"
from EMPLOYEES
where COMMISSION_PCT is not null and SALARY >= 5000 and LAST_NAME like '_a%';

📙문제 8]
HR계정의 EMPLOYEES테이블에서 연락처가 011로 시작하는 직원의 FIRST_NAME과 LAST_NAME을 연결해서 출력하고,연락처,입사일을 출력하여라

select
FIRST_NAME || ' ' || LAST_NAME 이름,
phone_number 연락처,
hire_date 입사일
from EMPLOYEES
where phone_number like '011%';

📙문제 9]
SCOTT계정의 EMP 테이블에서 연봉이 가장 높은 직원 부터 직원의 모든 데이타를 출력하여라.(내림차순)

select *
from emp
ORDER by sal DESC;

📙문제 10]
직무가 SALESMAN인 직원중에서 보너스를 100이상을 받는 직원들의 이름,부서코드,연봉,보너스를 출력하되 연봉이 낮은 순부터 출력하여라.

select
ename 이름,
deptno 부서코드,
sal 연봉,
comm 보너스
from emp
where job='SALESMAN' and comm >=100
ORDER by sal, comm DESC;

📙문제 11]
이름에 A가 들어간 직원들을 출력하되 먼저 연봉으로 오름 차순 하고 부서 코드로 내림 차순 해서 출력하여라.

select *
from emp
where ename like '%A%'
ORDER by sal, deptno DESC;

0개의 댓글