본문 바로가기
DB/Oracle SQL Developer

<11, 12 , 13, 14> 관계연산자 AND, OR / LIKE / BETWEEN, IN

by 코딩 뉴비 2020. 12. 2.

<11, 12>

[관계 연산자 : AND, OR]

--1) 20번 부서원 중에 급여가 2000이상인 사원을 검색하세요
SELECT *
FROM emp
WHERE dno = '20'
AND sal >= 2000;

--2) 30번 부서원 중에 급여가 2000이상이고 개발 업무를 담당하는
--  사원을 검색하세요
SELECT *
FROM emp
WHERE dno='30'
AND sal >= 2000
AND job='개발';

--3) 관계 연산자 우선순위
NOT > AND > OR

SELECT *
FROM emp
WHERE dno='10' OR sal > 1600 AND comm > 600;

SELECT *
FROM emp
WHERE (dno='10' OR sal > 1600) AND comm > 600;


[LIKE 연산자]
; a. 문자열 검색시 사용
  b. '_' : 반드시 한개의 문자를 대체
     '%' : 문자열을 대체(문자가 없는 경우도 포함)
  c.
    LIKE '경%' => '경'으로 시작하는 모든 문자열
                경, 경제, 경영학과
    LIKE '%과' => '과'로 끝나는 모든 문자열
                과, 다과, 화학과, 물리학과
    LIKE '%김%' => '김'이란 글자가 들어간 문자열
                김, 김씨, 돌김, 되새김질
    LIKE '화_' => '화'로 시작하는 두 글자 단어
                화학, 화약, 화장
    LIKE '__화' => '화'로 끝나는 세글자 단어
                무궁화, 해당화, 운동화, 들국화
    LIKE '_동_' => '동'이 가운데 들어간 세글자 단어
                원동기, 전동차

--4) 김씨 성을 가진 사원을 검색하세요
SELECT *
FROM emp
WHERE ename LIKE '김%';

--5) 이름이 '하늘'인 사원
SELECT *
FROM emp
WHERE ename LIKE '%하늘';

6) 성과 이름이 각각 한 글자인 사원을 검색하세요
SELECT *
FROM emp
WHERE ename LIKE '__';


  
  
  

 

연습문제

--1) 유공과와 생물과, 식영과 학생을 검색하라
SELECT * FROM student;

SELECT *
FROM student
WHERE major='화학'
OR major='생물'
OR major='식영';


--2) 화학과가 아닌 학생중에 1학년 학생을 검색하라
SELECT *
FROM student
WHERE major != '화학'
AND syear = '1';

--3) 물리학과 3학년 학생을 검색하라
SELECT *
FROM student
WHERE major ='물리'
AND syear ='3';


--4) 평점이 2.0에서 3.0사이인 학생을 검색하라
SELECT *
FROM student
WHERE 2.0 <= avr
AND avr <= 3.0
ORDER BY major, avr;


--5) 교수가 지정되지 않은 과목중에 학점이 3학점인 과목을 검색하라
select * from course ;
SELECT *
FROM course
WHERE pno IS NULL
AND st_num='3';


--6) 화학과 관련된 과목중 평점이 2학점 이하인 과목을 검색하라
SELECT *
FROM course
WHERE cname LIKE '%화학%'
AND st_num <= '2';


--7) 화학과 정교수를 검색하라
SELECT *
FROM professor
WHERE orders= '정교수'
AND section ='화학';


--8) 물리학과 학생중에 성이 사마씨인 학생을 검색하라
SELECT *
FROM student
WHERE major = '물리'
AND sname LIKE '사마%';


--9) 부임일이 1995년 이전인 정교수를 검색하라
SELECT *
FROM professor
WHERE orders = '정교수'
AND hiredate < '1995.01.01';


--10) 성과 이름이 각각 1글자인 교수를 검색하라
SELECT *
FROM professor
WHERE pname LIKE '__';


 

 

<13, 14>

[BETWEEN 연산자]
--1)급여가 1000에서 2000 이하인 사원
SELECT *
FROM emp
WHERE sal >=1000
AND sal <= 2000;

SELECT *
FROM emp 
WHERE sal BETWEEN 1000 AND 2000; 

--) 2 급여가 2000에서 1000 사이인 사원
SELECT *
FROM emp 
WHERE sal BETWEEN 2000 AND 1000;  -- -> 오류. 작은 조건이 반드시 먼저 나와야 한다.

--3)10, 20번 부서 사원 
SELECT *
FROM emp 
WHERE dno BETWEEN '10' AND '20';

SELECT *
FROM emp 
WHERE dno BETWEEN '10' AND '20'; -- = (dno>='10' AND dno <= '20';) 그래서 정확하지x
--in연산자가 더 자연스러움

--4) 1992년에서 1996년 사이에 입사한 사원을 검색하시오
--'1992/01/01' ==? '1992/01/01 00:00:00'
--'1996/12/31' ==? '1996/12/31 00:00:00'
--만약 1996년 오전 11시에 입사한 사람은 제외됨.

SELECT * FROM emp;

--시/분/초를 비교할 수 있는 포맷으로 변경한다
ALTER SESSION SET nls_date_format='YYYY/MM/DD:HH24:MI:SS'; --꼭 엔터로 set을 해 줘야함

SELECT *
FROM emp 
WHERE hdate BETWEEN '1992/01/01' AND '1996/12/31'
ORDER BY hdate;

SELECT *
FROM emp 
WHERE hdate BETWEEN '1992/01/01:00:00:00' 
AND '1996/12/31:23:59:59'
ORDER BY hdate;



[IN 연산자]
--5) 10, 20번 부서 사원
SELECT *
FROM emp
WHERE dno IN ('10', '20')
ORDER BY dno;

--6) 개발이나 관리 업무를 담당하는 사원
SELECT *
FROM emp
WHERE job IN ('개발', '회계')
ORDER BY job;

 

연습문제

--1) 평점이 3.0에서 4.0사이의 학생을 검색하라

SELECT *
FROM student
WHERE avr BETWEEN 3.0 AND 4.0
ORDER BY avr;


--2) 1994년에서 1995년까지 부임한 교수의 명단을 검색하라
ALTER SESSION SET nls_date_format='YYYY/MM/DD:HH24:MI:SS';

SELECT *
FROM professor
WHERE hiredate BETWEEN '1994/01/01:00:00:00' 
AND '1995/12/31:23:59:59'
ORDER BY hiredate;

--3) 화학과와 물리학과, 생물학과 학생을 검색하라
SELECT *
FROM student
WHERE major IN ('화학', '물리', '생물');


--4) 정교수와 조교수를 검색하라
SELECT *
FROM professor
WHERE orders IN ('정교수', '조교수')
--oders=정교수 OR orders= 조교수
ORDER BY orders;



--5) 학점수가 1학점, 2학점인 과목을 검색하라
SELECT * FROM course;
SELECT *
FROM course
WHERE st_num IN ('1', '2');


--6) 1, 2학년 학생 중에 평점이 2.0에서 3.0사이인 학생을 검색하라
SELECT *
FROM student 
WHERE syear IN ('1', '2')
AND avr BETWEEN '2.0' AND '3.0'
ORDER BY syear, avr;



--7) 화학, 물리학과 학생 중 1, 2 학년 학생을 성적순으로 검색하라
SELECT *
FROM student
WHERE major IN ('화학', '물리')
AND syear IN ('1', '2')
ORDER BY major, syear, avr DESC;

댓글