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
추후 추가 예정
'kh교육' 카테고리의 다른 글
(20250910049) 데이터베이스 , 패킷, 해킹 툴 (0) | 2025.09.10 |
---|---|
(20250909048)데이터베이스, 패킷 이해 (0) | 2025.09.09 |
(20250908047)데이터베이스, 와이어샤크 (0) | 2025.09.08 |
(20250905046) kali리눅스 (0) | 2025.09.05 |
(20250903046)image (0) | 2025.09.03 |