SQL 실습(SELECT) (비교 연산자 , 대입 연산자 , 정렬 , OR, AND, IN( ) , BETWEEN A AND B)

실습 1

전체부서를 조회하는 쿼리

SELECT * FROM DEPARTMENT;

-- 예제 1) 사원테이블의 모든 컬럼 정보를 보기하는 SQL 문 작성하세요

SELECT * FROM EMPLOYEE;

예제 2) 사원테이블의 컬럼중에서 ENO, ENAME 컬럼만 정보를 보는 SQL 문을 작성하세요

SELECT ENO, ENAME FROM EMPLOYEE;

 

예제 3) 부서테이블의 컬럼중에서 DNO(부서번호), LOC(부서위치) 컬럼만 조회하기

SELECT DNO, LOC FROM DEPARTMENT;

예제 4) 힌트) 컬럼에 *(/,+,-: 산술연산자) 연산해서 화면에 출력할 수 있습니다.

SELECT ENAME, SALARY * 12 FROM EMPLOYEE;

예제 5) 사원테이블에서 커미션을 더한 연봉 구하기

SELECT ENAME, SALARY * 12 + COMMISSION FROM EMPLOYEE;

예제 5-2) 위의 데이터 값을 보정하기

SELECT ENAME, SALARY * 12 + NVL(COMMISSION,0) FROM EMPLOYEE;

예제 6) 컬럼에 별명(별칭) 붙이기

SELECT ENAME, SALARY * 12 + NVL(COMMISSION,0) AS 연봉 FROM EMPLOYEE;

예제 6-2) 별명에 공백을 넣어서 사용하기 : "  " (쌍따옴표 사용)

SELECT ENAME, SALARY * 12 + NVL(COMMISSION,0) AS "연 봉" FROM EMPLOYEE;

예제 7) 중복된 데이터를 한번씩만 출력하게 하는 예제

SELECT DISTINCT DNO FROM EMPLOYEE;

-- 예제 8) 간단한 산술연산 및 테스트 용도 테이블을 소개합니다.
-- DUAL 테이블
SELECT * FROM DUAL;



-- 활용도)
SELECT 4*5+1 FROM DUAL;
-- SQL 문의 문자열 : '문자열' : 홑따옴표 사용
SELECT '홍길동' FROM DUAL;
-- 오늘 날짜 : SYSDATE 속성
SELECT SYSDATE FROM DUAL

 

새로운 워크시트 만들어서 비교연산자 테스트해보기

예제 1) 월급(SALARY) 이 1500 이상인 사원(EMPLOYEE) 조회하기(ENAME, SALARY)

SELECT ENAME, SALARY FROM EMPLOYEE
WHERE SALARY > 1500;

-- 예제 2) 10번 부서의 소속 사원을 출력하세요(전체출력 : *)
-- 사원 테이블   : EMPLOYEE
-- 부서번호 컬럼 : DNO
-- 조건절 : WHERE DNO = 10
SELECT * FROM EMPLOYEE
WHERE DNO = 10;

-- 예제 3) 사원명(ENAME) 이 SCOTT 사원을 출력하세요( 전체출력 )
-- 사원 테이블   : EMPLOYEE
-- 힌트) SQL 문자열 : '문자열' (홑따옴표)
SELECT * FROM EMPLOYEE
WHERE ENAME = 'SCOTT';

-- 예제 4) 입사일(HIREDATE) 이 '1981/01/01' 이전인 사원만 출력하기(전체 출력)
-- 힌트 : 문자열 비교 (비교연산자 : > , < , >=, <=, = , <>)
-- 사원테이블 : EMPLOYEE
SELECT * FROM EMPLOYEE
WHERE HIREDATE <= '1981/01/01';

-- 2) 논리 연산자와 함께 조건절 사용하기
-- 논리연산자 ( AND(*****), OR, NOT )
-- 성능 : AND > OR (NOT)
-- 예제 5) 부서번호(DNO) 가 10이고(AND) 직급이(JOB) 'MANAGER' 사원을 출력하세요
-- 사원 : EMPLOYEE
SELECT * FROM EMPLOYEE
WHERE DNO = 10 
AND   JOB = 'MANAGER';

-- 연습 1) 급여가(SALARY) 1000 과 1500 사이의 사원 조회하기(전체 조회)
-- 사원 : EMPLOYEE
SELECT * FROM EMPLOYEE
WHERE SALARY >= 1000
AND   SALARY <= 1500;

-- 예제 6) 부서번호가(DNO) 10이거나(OR) 직급이(JOB) 'MANAGER' 인 사원만 출력하기
SELECT * FROM EMPLOYEE
WHERE DNO = 10
OR    JOB = 'MANAGER';

-- 예제 7) 10번 부서에 소속된 사원을 제외하고 나머지 사원 출력하기
-- 사용법) SELECT 컬럼명 FROM 테이블명 WHERE NOT 컬럼명 = 값; (그 값에 반대되는 데이터가 출력됨)
SELECT * FROM EMPLOYEE
WHERE NOT DNO = 10;

-- 결과는 같고 다른 방법 : <>(같지 않다)
SELECT * FROM EMPLOYEE
WHERE DNO <> 10;

-- 연습 2) 급여가(SALARY) 1000 미만이거나 1500 초과인 사원 출력하기
-- 사원 : EMPLOYEE
SELECT * FROM EMPLOYEE
WHERE SALARY < 1000
OR    SALARY > 1500;

-- 연습 3) 커미션(COMMISSION) 이 300 이거나(OR) 500 이거나(OR) 1400 인 사원 출력하기
-- 사원 : EMPLOYEE
SELECT * FROM EMPLOYEE
WHERE COMMISSION = 300
OR    COMMISSION = 500
OR    COMMISSION = 1400;

-- 3) BETWEEN 예약어 소개
-- 예제 8) 급여가(SALARY) 1000 과 1500 사이의 사원 조회하기
-- 사원 : EMPLOYEE
SELECT * FROM EMPLOYEE
WHERE SALARY >= 1000
AND   SALARY <= 1500;

-- 사용법) SELECT 컬러명 FROM 테이블명 BETWEEN 작은값 AND 큰값;
-- 사용처 : 작은값 ~ 큰값 사이의 결과 조회하기 할때 사용
SELECT * FROM EMPLOYEE
WHERE SALARY BETWEEN 1000 AND 1500;

-- NOT BETWEEN 
-- 예제 9) 급여가(SALARY) 1000 미만이거나 1500 초과인 사원 조회하기
-- 사원 : EMPLOYEE
SELECT * FROM EMPLOYEE
WHERE SALARY < 1000
OR    SALARY > 1500;

-- NOT BETWEEN 
SELECT * FROM EMPLOYEE
WHERE SALARY NOT BETWEEN 1000 AND 1500;

-- 연습 3) 1982년에 입사한(HIREDATE) 사원 조회하기
-- 단 BETWEEN ~ AND 사용해서 작성하세요
-- 사원 : EMPLOYEE
SELECT * FROM EMPLOYEE
WHERE HIREDATE BETWEEN '82/01/01' AND '82/12/31';

 

-- 4) IN 예약어 
-- 예제 10) 상여금(COMMISSION) 300 이거나 500 이거나 1400 인 사원 조회하기
-- 사원 : EMPLOYEE
SELECT * FROM EMPLOYEE
WHERE COMMISSION = 300
OR    COMMISSION = 500
OR    COMMISSION = 1400;

-- 사용법) SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 IN (값, 값2, ...);
-- 사용처 ; OR 로 연결된 데이터를 간단하게 사용 가능
SELECT * FROM EMPLOYEE
WHERE COMMISSION IN (300, 500, 1400);

-- NOT IN 사용
-- 예제 11) 상여금(COMMISSION) 300 이 아니고, 500이 아니고, 1400 아닌 사원 조회하기
-- 사원 : EMPLOYEE
SELECT * FROM EMPLOYEE
WHERE COMMISSION NOT IN (300, 500, 1400);

-- 5) LIKE 검색(*****)
-- 정의 : 일부 키워드(영문자, 한글)만 사용해서 비슷한 것들만 추려서 조회하기
-- 예제 12) 이름이 'F' 로 시작하는 사원 조회하기
-- 사원     : EMPLOYEE
-- 대상 컬럼 : ENAME
-- 사용법) SELECT 컬럼 FROM 테이블명 WHERE 컬럼명 LIKE '%키워드%';
--  % : 키워드를 제외한 문자들
SELECT * FROM EMPLOYEE
WHERE ENAME LIKE 'F%';

 

-- 연습 4) 이름에 'M' 이 포함되어 있는 사원 조회하기(전체 조회)
-- 사원 : EMPLOYEE
-- 사원명 컬럼 : ENAME
-- 결과 : 5건
SELECT * FROM EMPLOYEE
WHERE ENAME LIKE '%M%';

-- 연습 5) 이름이 'N' 으로 끝나는 사원 조회하기(전체 조회)
-- 사원 : EMPLOYEE
-- 사원명 컬럼 : ENAME
-- 결과 : 2건
SELECT * FROM EMPLOYEE
WHERE ENAME LIKE '%N';

-- 예제 13) 이름의 두번째 글짜가 'A' 인 사원 조회하기
-- LIKE 기호 : %(키워드를 제외한 어떤 문자열을 의미) 
--            _ (키워드를 제외한 어떤 1문자를 의미)
-- 사원 : EMPLOYEE
-- 사원명 컬럼 : ENAME
SELECT * FROM EMPLOYEE
WHERE ENAME LIKE '_A%';

-- 연습 6) 이름의 세번째 글짜가 'A' 인 사원 조회하기
-- 사원 : EMPLOYEE
-- 사원명 컬럼 : ENAME
SELECT * FROM EMPLOYEE
WHERE ENAME LIKE '__A%';

-- 예제 14) IN, BETWEEN 의 반대를 나타낼때 NOT 앞에 붙여서 사용햇음
-- LIKE 의 반대를 나타낼때 똑같이 사용할 수 있음 : NOT LIKE
-- 이름에 'A' 가 포함되지 않는 사원을 조회하세요
-- 사원 : EMPLOYEE
-- 사원명 컬럼 : ENAME
SELECT * FROM EMPLOYEE
WHERE ENAME NOT LIKE '%A%';

-- 6) NULL 검색(조회)
-- 예제 15) 상여금(COMMISSION) 이 NULL 인 사원을 조회하세요.
-- NULL 의 특징 : 연산/비교 모든것이 안됨 -> 결과는 NULL
-- 예약어 : NULL 조회시 : WHERE 컬럼명 IS NULL;
-- 사원 : EMPLOYEE
SELECT * FROM EMPLOYEE
WHERE COMMISSION = NULL; -- 안됨(오류)
-- 수정
SELECT * FROM EMPLOYEE
WHERE COMMISSION IS NULL; -- 정상

-- IN, BETWEEN, LIKE 의 반대는 앞에 NOT 
-- IS NOT NULL 있음 ( NULL 값을 가지지 않은 사람 )
-- 상여금에(COMMISSION) NULL 이 아닌 사람을 조회하세요
SELECT * FROM EMPLOYEE
WHERE COMMISSION IS NOT NULL;

-- 7) ORDER BY : 정렬 기능
-- 예제 16) 사원테이블을(EMPLOYEE) 오름차순으로 정렬하기
-- 단 , 월급으로(SALARY) 정렬하세요
-- 오름차순(ASCENDING) : 작은 순부터 큰순으로 정렬
-- 사용법) SELECT 컬럼명 FROM 테이블명 ORDER BY 정렬대상_컬럼명 ASC; -- ASC(생략가능)
-- 참고) 이 기능을 사용하면 성능이 대폭 저하
SELECT * FROM EMPLOYEE
ORDER BY SALARY ASC; -- ASC(오름차순, 생략가능)

-- 사원테이블을(EMPLOYEE) 내림차순으로 정렬하기
-- 단 , 월급으로(SALARY) 정렬하세요
-- 내림차순(DESCENDING) : 큰 순부터 작은순으로 정렬
-- 사용법) SELECT 컬럼명 FROM 테이블명 ORDER BY 정렬대상_컬럼명 DESC; -- DESC(생략불가)
SELECT * FROM EMPLOYEE
ORDER BY SALARY DESC; -- DESC(내림차순)

-- 연습 7) 사원 테이블에서(EMPLOYEE) 사원명으로(ENAME) 오름차순 정렬해서 조회하세요
-- 사원 : EMPLOYEE
SELECT * FROM EMPLOYEE
ORDER BY ENAME;

-- 연습 8) 입사일(HIREDATE) 데이터로 내림차순 정렬하세요
-- 사원 : EMPLOYEE
SELECT * FROM EMPLOYEE
ORDER BY HIREDATE DESC;

-- 연습 9) 사원테이블에서(EMPLOYEE) 급여는(SALARY) 내림차순으로 정렬하고,
--        사원명은(ENAME) 오름차순으로 정렬하세요
-- 의미) ORDER BY 컬럼명 (먼저 정렬되고), 
--      컬럼명2(1ST 정렬된 조건에서 중복된 데이터에 한해 정렬을 실행)
-- 힌트) ORDER BY 컬럼명 DESC[ASC], 컬럼명2 DESC[ASC], .....
SELECT * FROM EMPLOYEE
ORDER BY SALARY DESC, ENAME;

 

실습 2 (연습문제)

-- 연습문제 : 03_Select_Where_Exam.sql
-- 문제 1) 사원 테이블에서 JOB이(직위) 'MANAGER' 인 사원의 데이터를 뽑아서
--     ENAME(사원명)으로 오름차순 정렬하세요
-- 사원테이블 : EMPLOYEE
-- 사원명    : ENAME
-- 직위      : JOB
-- 모든 컬럼 : *
SELECT * FROM EMPLOYEE
WHERE JOB = 'MANAGER'
ORDER BY ENAME;

-- 문제 2) 사원테이블에서 JOB 이 'CLERK' 인 사원의 데이터를 뽑아서
-- ENAME(사원명)으로 내림차순 정렬하세요
-- 힌트) ORDER BY 컬럼명 DESC[ASC]
-- 사원테이블 : EMPLOYEE
-- 사원명 : ENAME
-- 직위 : JOB
-- 모든 컬럼 : *
SELECT * FROM EMPLOYEE
WHERE JOB = 'CLERK'
ORDER BY ENAME DESC;

-- 문제 3) 덧셈 연산자를 이용하여 모든 사원에 대해서 $300 의 급여 인상을
--      계산한 후 사원의 이름(ENAME), 급여(SALARY), "인상된 급여"(별명)를 출력하세요
-- 힌트) 컬럼명 AS "인상된 급여"
-- 사원테이블 : EMPLOYEE
-- 사원명 컬럼: ENAME
-- 급여 컬럼: SALARY
SELECT ENAME
      ,SALARY
      ,SALARY+300 AS "인상된 급여"
FROM EMPLOYEE;

-- 문제4) 사원의 이름(ENAME), 급여(SALARY), 연간 총수입을 
--       총 수입이 많은 것부터 작은 순으로 출력하세요.(내림정렬)
-- ( 연간 총수입은 월급에 12를 곱한 후 $100의 상여금을 더해서 계산하세요 )
-- 사원테이블 : EMPLOYEE

SELECT ENAME, SALARY, SALARY * 12 AS "연간 총수입"
FROM EMPLOYEE
ORDER BY "연간 총수입" DESC;

-- 문제5) 급여가(SALARY) 2000을 넘는 사원의 이름과(ENAME) 급여를 
--       급여가 많은 것부터 작은 순으로 출력하세요(내림차순)
-- 사원테이블 : EMPLOYEE

SELECT ENAME, SALARY FROM EMPLOYEE
WHERE SALARY > 2000
ORDER BY SALARY DESC;

-- 문제6) 사원번호가(ENO) 7788인 사원의 이름과(ENAME) 부서번호를(DNO) 출력하세요
-- 사원테이블 : EMPLOYEE

SELECT ENAME, DNO FROM EMPLOYEE
WHERE ENO = 7788;

-- 문제7) 급여가(SALARY) 2000에서 3000 사이에 포함되지 않는 
--        사원의 이름과(ENAME) 급여를 출력하세요.
-- 힌트) 컬럼명 NOT BETWEEN A AND B 
-- 사원테이블 : EMPLOYEE

SELECT ENAME, SALARY FROM EMPLOYEE
--WHERE NOT SALARY > 2000 AND SALARY < 3000;
WHERE NOT SALARY BETWEEN 2000 AND 3000;

-- 문제 8) 1981년 2월 20일 부터 1981년 5월 1일 사이에 입사한 사원의 
-- 이름(ENAME), 담당 업무(JOB), 입사일(HIREDATE)을 출력하세요
-- 힌트) 컬럼명 BETWEEN A AND B 
-- 사원테이블 : EMPLOYEE

SELECT ENAME, JOB, HIREDATE FROM EMPLOYEE
--WHERE HIREDATE >='1981/02/20' AND HIREDATE <='1981/05/01';
WHERE HIREDATE BETWEEN '1981/02/20' AND '1981/05/01';

-- 문제 9)부서번호(DNO)가 20 및 30에 속한 (이거나,또는 OR, IN)
--       사원의 이름(ENAME)과 부서번호(DNO)를 출력하되
--        이름을 기준으로 내림차순 출력하세요(정렬)
-- 힌트) 컬럼명 IN (A, B)
-- 사원테이블 : EMPLOYEE

SELECT ENAME, DNO FROM EMPLOYEE
WHERE DNO IN(20,30);
--WHERE DNO = 20 OR DNO = 30;


-- 문제 10) 사원의 급여(SALARY)가 2000에서 3000 사이에 포함되고 (1번이고)
--          부서번호(DNO)가 20 또는 30인 (2번)
--         사원의 이름(ENAME), 급여와 부서번호를 출력하되 
--         이름순(오름차순)으로 출력하세요
-- 사원테이블 : EMPLOYEE

SELECT ENAME, SALARY, DNO FROM EMPLOYEE
WHERE SALARY BETWEEN 2000 AND 3000
AND DNO IN(20, 30)
ORDER BY ENAME;

-- 문제 11) 1981년도에 입사한 사원의 이름(ENAME)과 
--         입사일(HIREDATE)을 출력하세요
-- 단, LIKE 연산자와 와일드카드(%, _)를 사용하세요
-- 힌트 : 컬럼명 LIKE '%문자%'
-- 사원테이블 : EMPLOYEE

SELECT ENAME, HIREDATE FROM EMPLOYEE
WHERE HIREDATE LIKE '81%';

-- 문제 12) 관리자가(MANAGER) 없는 사원의 이름(ENAME)과 
--         담당 업무를(JOB) 출력하세요
-- 힌트) 관리자가(MANAGER) 없는 사원 : MANAGER 컬럼에 NULL로 표시됨
-- 사원테이블 : EMPLOYEE
-- 직위 컬럼 : JOB

SELECT ENAME, JOB FROM EMPLOYEE
WHERE MANAGER IS NULL;


-- 문제 13) COMMISSION(상여금)을 받을 수 있는 자격이 되는 (COMMISSION NULL 이 아닌사람)
--         사원의 이름(ENAME), 급여(SALARY), 상여금(COMMISSION)을 출력하되
--         급여 및 커미션을 기준으로 내림차순 정렬하여 출력하세요
-- 사원테이블 : EMPLOYEE
-- 힌트) 컬럼명 IS NOT NULL

SELECT ENAME, SALARY, COMMISSION FROM EMPLOYEE
WHERE COMMISSION IS NOT NULL
ORDER BY SALARY DESC, COMMISSION DESC;

-- 문제 14) 이름(ENAME)의 세번째 문자가 R인 사원의 이름을 표시하세요.
-- 사원테이블 : EMPLOYEE
-- 힌트) 컬럼명 LIKE '__문자%'

SELECT ENAME FROM EMPLOYEE
WHERE ENAME LIKE '__R%'; 

-- 문제 15) 이름에(ENAME) A와(1번조건) E를(2번조건) 모두 포함하고 있는 
--         사원의 이름을 표시하세요.
-- 사원 테이블 : EMPLOYEE

SELECT ENAME FROM EMPLOYEE
WHERE ENAME LIKE '%A%' AND ENAME LIKE '%E%';

-- 문제 16) 담당업무(JOB컬럼)가 사무원(CLERK) 또는 영업사원(SALESMAN)이면서(1번)
--     급여가 $1600, $950 또는 $1300이 아닌 (2번)
--     사원의 이름(ENAME), 담당업무(JOB), 급여(SALARY)를 출력하세요
-- 힌트) ~ 아닌 : 1) ~ 인 것을 구하고, 2) NOT : NOT IN()
-- 사원 테이블 : EMPLOYEE

SELECT ENAME, JOB, SALARY FROM EMPLOYEE
--WHERE (JOB = 'CLERK' OR JOB = 'SALESMAN')
WHERE JOB IN('CLERK','SALESMAN')
AND SALARY NOT IN(1600, 950, 1300);

-- 문제 17) COMMISSION(상여금)이 $500 이상인 
--     사원의 이름(ENAME)과 급여(SALARY) 및 COMMISSION(상여금)을 출력하세요
-- 사원 테이블 : EMPLOYEE
-- 참고) COMMISSION 컬럼 : 데이터 형태 (NULL ,숫자)
--    부등호 비교연산자 로 비교시 : NULL 데이터는 제외하고, 비교를 함
--   NULL 산술연산 = NULL

SELECT ENAME, SALARY, COMMISSION FROM EMPLOYEE
WHERE COMMISSION >= 500;

-- 문제 18) 사원테이블에서(EMPLOYEE) 사원 이름이(ENAME) S 로 끝나는 사원 데이터를 
-- 모두 출력하는 SQL 문을 작성해 보세요

SELECT * FROM EMPLOYEE
WHERE ENAME LIKE '%S';

 -- 문제 19) 사원 테이블을(EMPLOYEE) 사용하여 30번 부서에서(DNO) 근무하고 있는 사원 중에 
-- 직책이(JOB) SALESMAN 인 사원의 사원번호(ENO), 이름(ENAME), 직책(JOB), 
-- 급여(SALARY), 부서번호를(DNO) 출력하는 SQL 문을 작성해 보세요.

SELECT ENO, ENAME, JOB, SALARY, DNO FROM EMPLOYEE
WHERE DNO = 30 
AND JOB = 'SALESMAN';

-- 문제 20) 사원 테이블을(EMPLOYEE) 사용하여 20번, 30번 부서에(DNO) 근무하고 있는 사원 중
-- 급여가(SALARY) 2000 초과인 사원을 조회하세요

SELECT * FROM EMPLOYEE
WHERE  DNO IN (20,30) AND SALARY > 2000;

-- 문제 21) 사원이름에(ENAME) E 가 포함되어 있는 30번 부서의(DNO) 사원 중 급여가(SALARY)
-- 1000 ~ 2000 사이가 아닌 사원이름(ENAME), 사원번호(ENO), 급여(SALARY), 부서번호를(DNO) 출력하는
-- SQL 문을 작성해 보세요

SELECT ENAME, ENO, SALARY, DNO FROM EMPLOYEE
WHERE SALARY BETWEEN 1000 AND 2000 
AND ENAME LIKE '%E%' 
AND DNO = 30;

-- 문제 22) 상여금이(COMMISSION) 없고 매니저가(MANAGER) 있고 직책이(JOB) MANAGER , CLERK 인 사원 중에서
-- 사원이름의 두번째 글자가 L 이 아닌 사원의 정보를 출력하는 SQL문을 작성하세요

SELECT * FROM EMPLOYEE
WHERE COMMISSION IS NULL 
AND MANAGER IS NOT NULL
AND JOB IN ('MANAGER', 'CLERK')
AND ENAME NOT LIKE '_L%';

'HTML > SQL' 카테고리의 다른 글

[SQL] DDL, DML, DCL  (0) 2023.09.13
[SQL] 서브 쿼리  (0) 2023.09.12
[SQL] 그룹 함수, 조인  (0) 2023.09.11
오라클 내장함수 모음  (0) 2023.09.08
오라클 설치 방법 및 실행(DOCKER, DOCKERHUB, SQL DEVELOPER)  (1) 2023.09.07