관계 연산자와 LIKE 연산자
WHERE column '조건1' AND/OR '조건2'
WHERE column LIKE '비교문자' 로 구성된다.
관계 연산자 AND OR사용하는것 NOT연산자도 있는데 이것은 연산자의 반댓값을 출력하는 것이다.
관계 연산자 사용 하는 이유는 조건 검색을 통해 DATA를 줄여주는데 있다. 사람이 한번에 인식할수있는 데이터의 양은 정해져 있기 때문이다.
관계연산자를 연속적으로 나열해서 사용할때 ()를 반드시 사용해 줘야 한다.
LIKE연산자는 와일드문자(=예약어)를 사용하여 원하는 조건에 맞춰 검색하는 연산자 이다. 와일드 문자는 %와 _가 있으며 #라는 이스케이 문자도 있다. 각 역할은 다음과 같다.
예 |
설명 |
검색 대상 |
'경%' |
'경'으로 시작하는 모든 문자열 |
경, 경제, 경범죄, 경영학과, ... |
'%과' |
'과'로 끝나는 모든 문자열 |
과, 다과, 화학과, 물리학과, ... |
'%김%' |
'김'이 들어간 모든 문자열 |
김, 김씨, 돌김, 되새김질, ... |
'화_' |
'화'로 시작하는 두글자 단어 |
화학, 화약, 화상, ... |
'--화' |
'화'로 끝나는 세글자 단어 |
무궁화, 해당화, 운동화, ... |
'-동-' |
'동'이 가운데 들어간 세글자 단어 |
원동기, 전동차, ... |
'%이#%%' |
'이%'가 포함된 문자열 |
|
'_#%_' |
'%'가 포함된 세글자 단어 |
위에서 보는 것과 같이 %는 글자수에 상관없이 위치에 따라서 검색하는 내용이 달라지고 _는 글자수를 제한하고 위치에 따라 검색하는 내용이 달라진다.
6 실습
1. 화학과와 물리학과 학생을 검색한다.
2. 화학과가 아닌 학생 중에 1학년 학생을 검색한다.
3. 화학과 3학년 학생을 검색한다,
4. 평점이 2.0에서 3.0 사이인 학생을 검색한다,
5. 교수가 지정되지 않은 과목 중에 학점이 3학점인 과목을 검색한다,
6. 화학과 관련된 과목 중 평점이 2학점 이하인 과목을 검색한다.(화학 관련 과목은 과목명에 화학이 들어간 과목을 의미한다.)
7. 화학과 정교수를 검색한다.
8. 화학과 학생 중에 성이 권씨인 학생을 검색한다.
9. 부임일이 1995년 이전인 정교수를 검색한다.
10. 성과 이름이 각각 한글자인 교수를 검색한다.
BETWEEN과 IN연산자
있으면 가독성은 올라가지만 반드시 써야 하는 연산자는 아니다.
WHERE column BETWEEN 'A' AND 'B'로 구성되어 있으며 A에서 B까지이다. 이때 주의 할 사항으로는 A의 크기가 무조건 B보다 작아야 한다. 만약 B가 A보다 작다면 결과는 없다고 출력된다.
WHERE column IN('a', 'b')로 구성되며 IN 연산자로 적힌 내용은 전부 OR로 대체가 가능하다. 하지만 OR 연산자로 적힌 내용은 IN 연산자로 대체가 될수도 있고 안될수도 있다.
※ 범위탐색(range search) 특정탐색(pin point search)
범위탐색은 어떠한 범위내에서 탐색을 하는것이고 특정탐색은 어떤 특성을 선택하여 선택적으로 탐색하는 것이다.
따라서 범위 탐색에서 특정탐색으로 변환하게 되면 성능이 좋아지는데 특정탐색을 범위 탐색으로 변환하는것은 성능이 나빠진다.
-예제 6-2-
1992년에서 1996년 사이에 입사한 사원을 검색한다.
sol) SQL> SELECT * FORM emp
2 WHERE hdate BETWEEN '1992/01/01' AND '1996/12/31'
3 ORDER BY hdate;
여기서 잘못된 것이 있다. 무엇일까?
답은 WHERE hdate BETWEEN '1992/01/01' AND '1996/12/31'이다 물론 코드상에서는 문제가 없지만 이 내용은 날짜 범위가 YYYY/MM/DD:HH24:MI:SS의 양식에 따라 1992/01/01:0024:00:00에서 1996/12/31:0024:00:00이기 때문에 만약 1996/12/31 오후 1시에 입사한 직원이 있다면 결과 출력이 되지 않는다.
이것은 자료를 입력할때 정보의 처리에 대한 부분이 잘못된것이다. 통상적으로 입사일을 관리할때 시간은 필요없기 때문에 전부 지워주어야 한다. 그러나 그 정보가 남아있으면 위와 같은 오류가 발생하게 되는 것이다.
7 실습
1. 평점이 3.0에서 4.0 사이의 학생을 검색한다.
2. 1999년에서 2001년까지 부임한 교수의 명단을 검색한다.
3, 화학과와 물리학과, 생물학과 학생을 검색한다.
4. 정교수와 조교수를 검색한다.
5. 학점수가 1학점, 2학점인 과목을 검색한다.
6. 1, 2 학년 학생 중에 평점이 2.0에서 3.0 사이인 학생을 검색한다.
7. 화학, 물리학 학생 중 1, 2학년 학생을 성적순으로 검색한다.
8. 물리, 화학과 학생 중 4.5 환산 평점이 3.5에서 4.0 사이인 학생을 검색한다.
9. 물리, 화학과 학생의 정보를 학년별 성적순으로 검색한다.
10. 물리, 화학과 교수중에 1999년에서 2000년 사이에 부임한 교수의 정보를 직위별로 검색한다.
조인문(이론)
조인문은 여러개의 테이블을 참조하여 데이터를 출력하는 조건으로써 RDB에서 가장 중요한 요소이다. RDB는 나누어진 데이터들이 연관성을 가지기 때문이다. 그리고 사용하는 이유가 생산성을 높히고 무결성을 가지는 유일한 것이기 때문이다. filesystem DB는 원하는 데이터정보를 한 테이블에 모아놓는다. 그리고 DB중에서 단일성능측면에서 최고다. 조인문은 데이터간의 관계를 파악하는 것이 가장 핵심이기 때문에 먼저 추상화를 그리며 모델링을 하는것이 중요하다.
테이블은 직사각형으로 그리며 위에는 테이블 이름을 적는다. 그리고 맨 첫칸에는 pk(primary key)를 적어준다. pk값은 중복되는 값이 없고 NULL값도 가질 수 없다. 따라서 pk는 보통 식별가능한 요소로 지정한다. emp에서 eno값에 따라 (ename, sex, job, mgr, hdate, sal, comm, dno)를 식별하므로 이 두 관계를 '함수적 종속관계에 있다.'라고 설명한다. 당연한 얘기지만 dname은 eno와 무관하고 dno에 의해 결정된다. 이것을 보고 다른 테이블이라고 이야기 할 수 있는 것이다. fk(foreign key)는 참조값으로 사용하는데 중복인 값을 가질수도 있고 NULL값이 올수도 있다. 또한 fk는 pk에서부터 생성되기 때문에 pk를 가진 테이블을 부모테이블, fk를 가진 테이블을 자녀테이블이라고 한다. 그 표시는 선으로 할때 중복없이 1개의 값을 가지므로 부모테이블에는 그저 선으로만 연결하고 자녀테이블은 중복된 값을 가질수있기때문에 사선도 붙여 까마귀발(crow-feet)표기법이라고도 한다. 테이블간에 링크는 되지만 선으로 연결을 못시키는 부분도 있는데 이럴때는 옆쪽에 설명을 반드시 적어야 한다.
'교육 > SQL' 카테고리의 다른 글
Day 17 (SQL) (0) | 2019.12.10 |
---|---|
Day 16 (SQL) (0) | 2019.12.09 |
Day 15 (SQL) (0) | 2019.12.06 |
Day 14 (SQL) (0) | 2019.12.05 |
Day 12(SQL) (0) | 2019.12.03 |