SQL-관계 연산자와 LIKE 연산자, BETWEEN, IN

2019. 12. 4. 10:08Security/sql

관계 연산자

SELECT [DISTINCT | ALL] 컬럼, 컬럼...

FROM 테이블 WHERE [관계 연산자 조건]

ORDER BY 컬럼 ASC, 컬럼 ASC..

 

[예제]

#SQL > SELECT * FROM emp WHERE dno = '20' AND sal >= 2000 AND job = '모델링';

-> 20번 부서 사원중에 급여가 2000이상이고, 모델링 업무를 담당하는 사원 검색

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

-> AND와 OR 연산자를 같이 사용할때는 연산순서상 문제가 없더라도 괄호를 반드시 사용

 

LIKE 연산자

SELECT [DISTINCT | ALL] 컬럼, 컬럼...

FROM 테이블 WHERE 컬럼

LIKE '비교 문자열'

ORDER BY 컬럼 ASC, 컬럼 ASC..

 

와일드 문자의 종류

% : 문자열을 의미. 리눅스의 *와 의미가 같음.

ex) '경%' : '경'으로 시작하는 모든 문자열

     '%과' : '과'로 끝나는 모든 문자열

    '%김%' : '김'이란 글자가 들어간 모든 문자열

 

_ : 글자수를 제한한 검색

ex) '화_' : '화'로 시작하는 두 글자 단어

    '__화' : '화'로 끝나는 세 글자 단어

    '_동_' : '동'이 가운데 들어간 세 글자 단어

 

[예제]

#SQL > SELECT * FROM emp WHERE ename LIKE '김%';

-> 김씨 성을 가진 사원

#SQL > SELECT * FROM emp WHERE ename LIKE '%하늘';

-> 이름이 '하늘'인 사원

#SQL > SELECT * FROM emp WHERE ename LIKE '__';

-> 이름이 두 글자인 사원 검색 

 

이름을 검색할때 정확하게 하려면 성과 이름을 구분해서 DB를 입력해야 한다.

 

[실습]

1. 화학과와 물리학과 학생을 검색

#SQL > SELECT * FROM student WHERE major='화학' OR major='물리';

 

2. 화학과가 아닌 학생 중에 1학년 학생을 검색

#SQL > SELECT * FROM student WHERE major!='화학' AND syear=1;

 

3. 화학과 3학년 학생을 검색

#SQL > SELECT * FROM student WHERE major='화학' AND syear=3;

 

4. 평점이 2.0에서 3.0사이인 학생 검색

#SQL > SELECT * FROM student WHERE AVR > 2.0 AND AVR < 3.0;

 

5. 교수가 지정되지 않은 과목중에 학점이 3학점인 과목을 검색

#SQL > SELECT * FROM course WHERE PNO is NULL AND ST_NUM = 3;

 

6. 화학 관련 된 과목중(과목명에 화학이 포함) 평점이 2학점 이하인 과목을 검색

#SQL > SELECT * FROM course WHERE CNAME LIKE '%화학%' AND ST_NUM < 3;

 

7. 화학과 정교수를 검색

#SQL > SELECT * FROM professor WHERE ORDERS = '정교수';

 

8. 화학과 학생 중에 성이 권씨인 학생을 검색

#SQL > SELECT * FROM student WHERE major = '화학' AND SNAME LIKE '권%';

 

9. 부임일이 1995년 이전인 정교수를 검색

#SQL > SELECT * FROM professor WHERE HIREDATE < '1996/01/01' AND ORDERS = '정교수';

 

10. 성과 이름이 각각 한글자인 교수를 검색

#SQL > SELECT * FROM professor WHERE PNAME LIKE '__';

 

* BETWEEN..AND 연산자

SELECT [DISTINCT | ALL] 컬럼, 컬럼 ...

FROM 테이블

WHERE 컬럼

BETWEEN 값1 AND 값2 ORDER BY 컬럼 [ASC], ...

- 반드시  값1 보다 값2가 커야한다.

 

[예제]

#SQL > SELECT * FROM emp WHERE sal BETWEEN 1000 AND 2000;

-> 급여가 1000에서 2000이내인 사원을 검색

 

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

-> 1992년에서 1996년 사이에 입사한 사원을 검색

 

* IN 연산자

SELECT [DISTINCT | ALL] 컬럼, 컬럼 ...

FROM 테이블

WHERE 컬럼

IN (값1, 값2 ...)

ORDER BY 컬럼 [ASC], ...

 

- IN 연산자는 100% OR 연산자로 바꿀 수 있지만 OR 연산자는 IN 연산자로 100% 바꿀수는 없다.

- 가독성이 훨씬 좋기 때문에 BETWEEN and 연산자나 OR 연산자를 IN 연산자로 바꿔서 사용하는 경우가 많다.

 

[예제]

#SQL >  SELECT * FROM emp WHERE job IN ('개발', '관리') ORDER BY job;

-> 개발이나 관리 업무를 담당하는 사원을 검색

#SQL > SELECT * FROM emp WHERE dno IN ('10', '20') ORDER BY dno;

-> 10번, 20번 부서 사원 검색

 

[실습] 

1. 평점이 3.0에서 4.0사이의 학생을 검색

#SQL > SELECT * FROM student WHERE AVR BETWEEN 3.0 AND 4.0 ORDER BY AVR desc;

 

2. 1999년에서 2001년까지 부임한 교수의 명단 검색

#SQL > SELECT * FROM professor WHERE HIREDATE BETWEEN '1999/01/01' AND '2001/12/31' ORDER BY HIREDATE;

 

3. 화학과, 물리학과, 생물학과 학생을 검색

#SQL > SELECT * FROM student WHERE MAJOR IN ('화학', '물리', '생물');

 

4. 정교수와 조교수 검색

#SQL > SELECT * FROM professor WHERE ORDERS IN ('정교수', '부교수');

 

5. 학점수가 1, 2인 과목을 검색

#SQL > SELECT * FROM course WHERE ST_NUM IN(1, 2) ORDER BY ST_NUM desc;

 

6. 1,2학년 학생중 평점이 2.0에서 3.0사이인 학생을 검색

#SQL > SELECT * FROM student WHERE SYEAR IN(1, 2) AND AVR BETWEEN 2.0 AND 3.0 ORDER BY SYEAR desc, AVR desc;

 

7. 화학, 물리학과 학생 중 1, 2학년 학생을 성적순으로 검색

#SQL > SELECT * FROM student WHERE MAJOR IN('화학', '물리') AND SYEAR IN (1, 2) ORDER BY AVR desc;

 

8. 물리, 화학과 학생 중 4.5 환산 평점이 3.5에서 4.0사이인 학생을 검색

#SQL > SELECT * FROM student WHERE MAJOR IN ('화학', '물리') AND ((AVR*4.5/4) BETWEEN 3.5 AND 4.0);

 

9. 물리, 화학과 학생의 정보를 학년별 성적순으로 검색

#SQL > SELECT * FROM student WHERE MAJOR IN ('화학', '물리') ORDER BY SYEAR DESC, AVR DESC;

 

10. 물리, 화학과 교수 중에 1999년에서 2000년 사이에 부임한 교수의 정보를 직위별로 검색

#SQL > SELECT * FROM professor WHERE SECTION IN ('화학', '물리') AND HIREDATE BETWEEN '1999/01/01' AND '2000/12/31' ORDER BY ORDERS; 

 

* 용어 및 개념 정리

#SQL > ALTER SESSION SET nls_date_format='YYYY/MM/DD';

// 날짜 세팅

 

'Security > sql' 카테고리의 다른 글

SQL-서브쿼리  (0) 2019.12.06
SQL-모델링, join  (0) 2019.12.05
SQL-WHERE  (0) 2019.12.03
SQL-SELECT(2)  (0) 2019.12.03
RDB & SQL-SELECT  (0) 2019.12.02