kh교육

(20250911050)sql, icmp

boangod 2025. 9. 11. 22:56

sql은 가독성이 높아야 함.


다양한 조건검색


NULL과 비교 연산



• NULL은 비교연산자(=, <, >)를사용할 수 없다.

• NULL에 대한 직접검색은 다음 연산자를 이용한다.
‐ 컬럼 IS NULL
‐ 컬럼 IS NOT NULL
‐ 널 자체를 찾는 건 추천하지 않는다.
‐ 널은 숫자에 넣으면 부정연산자가 된다.
결정이 안 난 가격 같은 거는 -1을 넣는다 null을 넣지 않고



• 보너스가 결정되지 않은 사원을 검색한다.
SQL> SELECT * FROM emp
2 WHERE comm IS NULL;



BETWEEN.. AND 연산자
ㄴ 어떤 값 사이에 있는 걸 찾을 때 사용



SELECT * | 컬럼,......
FROM 테이블
WHERE 컬럼 BETWEEN 값1 AND 값2
ORDER BY 컬럼 ......


‐ '컬럼 >= 값1 AND 컬럼 <= 값2' 와 동일하다.
‐ 컬럼의 값이 값1에서 값2 사이의 값을 검색한다.
‐ 값1은 반드시 값2보 다작 아야 한다.
‐ AND 연산자로 환원가능하지만 가독성이 떨어진다.




• 급여가 1000에서 2000 이내인사원을 검색한다.
• 1992년에서 1996년 사이에 입사한 사원을 검색한다. → 날짜는 버림임. 숫자는 반올림.


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

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





잘못기술된 BETWEEN

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


BETWEEN 연산자 이용시 반드시 작은 값이 먼 저와 야한다.
‐ 에러가 발생하지 않고'선택된 레코드가 없습니다.' 가출력된다.
‐ 'BETWEEN-3 AND -4'와 같은 실수가 가능하다.





IN 연산자
ㄴ 100 퍼 or연산자로 바꿀 수 있음.

SELECT * | 컬럼, ......
FROM 테이블
WHERE 컬럼 IN (값1, 값2 ...)
ORDER BY 컬럼 ......


‐ 값 중에 일치하는 값이하나라도 있으면 검색된다.
‐ OR 연산자와= 연산자로 교환가능하다.
‐ 가독성이 매우 우수하다.
‐ IN 연산자는 나중에 서브쿼리, 파티션등의 여러 기능에 사용되는 중요한 연산자다.




• 개발이나분석업무를담당하는사원을 검색한다.
• 10, 20번 부서 사원을검색한다.


SQL> SELECT * FROM emp
2 WHERE job IN ('개발', '분석')
3 ORDER BY JOB;


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


‐ job='개발' OR job='관리'
‐ dno='10' OR dno='20’



LIKE 연산자 - 패턴 연산자


SELECT * | 컬럼, ......
FROM 테이블
WHERE 컬럼 LIKE '리터럴'
ORDER BY 컬럼 ......;

‐ LIKE 연산자는 패턴연산자의 일종으로 일부문자열만을 이용해서 대상을 검색한다.
‐ 와일드문자를 사용한다.
     .% : 문자열공백을 포함한다.
     ._ : 문자


•와일드문자

'경%'            '경'으로 시작하는 모든 문자열                 경, 경제, 경범죄, 경영학과...
'% 과'           '과'로끝나는모든 문자열                          과, 다과, 화학과, 물리학과...
'%김%'         '김'이란 글자가 들어간 모든 문자열          김, 김 씨, 돌김, 되새김질...
'화_'             '화'로 시작하는 두 글자단어                     화학, 화약, 화상...
'__화'           '화'로끝나는세글자단어                           무궁화, 해당화, 운동화...
'동'               '동'이 가운데들어간세글자단어                 원동기, 전동차...
'%이#%%' ESCAPE '#'으로 지정한 경우, '이%' 가포함된 문자열
'#%' ESCAPE '#'으로 지정한 경우, '%'가포함된세글자단어





• 김 씨 성을 가진 사원
• 이름이 '하늘'인 사원
• 성과 이름이 각 각 한글자인 사원을 검색한다.
• 이름에'%' 문자가 포함된 사원을 검색한다.



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


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


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


SQL> SELECT eno, ename
2 FROM emp
3 WHERE ename LIKE '%#%%' ESCAPE '#';


join


SELECT 테이블.컬럼, ……
FROM 테이블, 테이블, ......
WHERE 조인_조건 AND 일반_조건
ORDER BY 컬럼 ......;


조인
조인조건: 테이블 간의 관계수식
‐ 조인문장에서 기술된 모든 테이블은반드시조인조건으로 기술됨.
‐ 동일한 이름의 칼럼이 여러 테이블에 존재하는 경우 칼럼명 앞에 반드시 테이블명이 필요함.
‐ 테이블개수가 n개일 때 조인조건은 항상(n-1) 개이상.
‐ 등가조인(Equi-join) : 조인 조건이 등호('=')
‐ 비등가조인(Non equi-join) : 조인 조건이 부등호


등가조인 → emp.dno = dept.dno
• 각사원의 근무부서와 근무지를 검색한다.


SQL> SELECT dept.dno 부서번호, dname 부서, loc 근무처,
2 eno 사번, ename 이름
3 FROM dept, emp
4 WHERE dept.dno=emp.dno;



SQL> SELECT d.dno 부서번호, dname 부서, loc 근무처,
2 eno 사번, ename 이름
3 FROM dept d, emp e
4 WHERE d.dno=e.dno;


‐ 테이블에 별명은 SQL문을 간결하게 하지만 가독성에 문제가 있을 수 있다.
‐ 별명이 부여된 경우 테이블명은 사용할 수 없다.
      .'ORA-00904: … 부적합한 식별자' 에러 발생



비등가조인 → emp.sal BETWEEN salgrade.losal AND salgrade.hisal
• 각사원의 급여등급을 검색한다.
• 총무부서사원의 급여를 10% 인상한 경우 사원의 급여등급을 검색한다.


SQL> SELECT eno, ename, sal, grade
2 FROM emp e, salgrade s
3 WHERE sal BETWEEN losal AND hisal;


SQL> SELECT d.dno, dname, eno, ename, sal, sal1.1, grade
2 FROM dept d, emp e, salgrade s
3 WHERE d.dno = e.dno AND sal1.1 BETWEEN losal AND hisal
4 AND dname = '총무';




패킷


ICMP


추후 추가 예정