My Programing/DataBase

오라클 DB 설계 및 활용 3일째 2번째 내용

nkdk 2008. 3. 7. 19:44
1번째 내용에 이어서 정렬을 계속 합니다.ORDER BY

SELECT DISTINCT SAWON_JIK FROM SAWON; <- DISTIN 중복자료 배제

SELECT * FROM SAWON WHERE SAWON_NO=5; -- 레코드 제한시

SELECT * FROM SAWON ORDER BY SAWON_JIK ASC WHERE SAWON_JIK='사원'; <- SELECT문의 순서 오류
SELECT * FROM SAWON WHERE SAWON_JIK='사원' ORDER BY SAWON_JIK ASC; <- ORDER BY 가 맨 끝에 와야 함

SELECT * FROM SAWON WHERE SAWON_IBSAIL='2005-08-05';

SELECT * FROM SAWON WHERE SAWON_NO=5 OR SAWON_NO=7;
SELECT * FROM SAWON WHERE SAWON_JIK='사원' AND SAWON_SEX='남' AND SAWON_PAY<2000;
(AND와 OR에서 헷갈리지 말고 순서대로 잘 지켜줄것)
SELECT SAWON FROM SAWON WHERE SAWON_NO=&NO;
(이와 같이 치환문을 사용하여 사용할 수도 있다.)

1. SELECT SAWON_NO>=5 AND SAWON_NO<=10;
2. SELECT * FROM SAWON WHERE SAWON_NO BETWEEN 5 AND 10;
( 두개의 SELECT는 똑같은 문 입니다.)

SELECT * FROM SAWON WHERE SAWON_IBSAIL BETWEEN '2000-1-1' AND '2007-04-30'
<- 사원입사일이 2000-1-1 부터 2007-04-30일까지의 * 자료를 나오게함

SELECT * FROM SAWON WHERE SAWON_NO<5 OR SAWON_NO>10;
SELECT * FROM SAWON WHERE SAWON_NO NOT BETWEEN 5 AND 10;
(NOT 문을 사용하면 원래의 자료에 해당하지 않는 자료가 나온다. )

SELECT * FROM SAWON WHERE SAWON_PAY + 1000 >= 3000;
( SAWON_PAY 에서 1000 을 더해서 3000보다 크거나 같은 값을 나오게 함)

SELECT * FROM SAWON WHERE SAWON_NAME='홍길동';
SELECT * FROM SAWON WHERE SAWON_NAME>='박';
(박 씨 이후의 자료를 나오게 한다)
SELECT ASCII('A'), ASCII('가'),ASCII(0) FROM DUAL;
( ASCII 'A' 와 '가' 와 '0' 값에 대한 아스키 코드값을 가상테이블에 나오게함)

SELECT * FROM SAWON WHERE SAWON_NAME BETWEEN '김' AND '홍';

SELECT * FROM SAWON WHERE SAWON_JIK='대리' OR SAWON_JIK='과장';

SELECT * FROM SAWON WHERE SAWON_JIK IN('대리,'과장');
SELECT * FROM SAWON WHERE BUSER_NUM IN(10,20,40);

SELECT * FROM SAWON WHERE SAWON_NAME LIKE '이%';
( Like 함수는 _, %를 사용하여 비슷한 조건의 값을 검색 할 때 사용한다 )

방법: 밑줄 부분을 다음과 같이 수정 할 수 있습니다.
'이%라' , '%라' , '%순%'
%는 몇자리가 오든 관계가 없다. _는 한 자리만 어떤 것이 들어오면 검색하게끔 한다.
참고: access 에서는 ( * 와 ? 를 사용한다)
SELECT * FROM SAWON WHERE SAWON_NAME LIKE '이순%' OR SAWON_NAME LIKE ' 이미%';
(이순%) 혹은 (이미%)에 대한 자료를 나오게 합니다.
SELECT * FROM SAWON WHERE SAWON_PAY LIKE '3%';

SELECT * FROM SAWON
UPDATE SAWON SET SAWON_JIK=NULL WHERE SAWON_NO=5;

SELECT * FROM SAWON WHERE SAWON_JIK=NULL; => 오류 에러는 안남
(NULL에 대해서는 이렇게 하면 안된다. is를 꼭 써야 한다)
SELECT * FROM SAWON WHERE SAWON_JIK IS NULL;
SELECT * FROM SAWON WHERE SAWON_JIK IS NOT NULL;

SELECT SAWON_NO AS 직원번호, SAWON_NAME AS 직원명, SAWON_JIK AS 직급, SAWON_PAY AS 연봉, SAWON_PAY / 12 AS 보너스, SAWON_IBSAIL AS 입사일 FROM SAWON WHERE SAWON_JIK IN('과장','사원','대리') AND ((SAWON_PAY >= 1500 AND SAWON_IBSAIL BETWEEN '1985-1-1' AND '2005-12-31') OR (SAWON_NAME LIKE '이%' AND SAWON_IBSAIL BETWEEN '1985-1-1' AND '2005-12-31')) ORDER BY SAWON_JIK, SAWON_PAY DESC;
(이 내용들이 어떤 내용인지는 보면서 바로 해석이 되는 수준은 되야 합니다.)

*** 내장 함수 호출 : 데이터 조작의 효율성 증진
* 문자 함수
SELECT LOWER ('HELLO') FROM DUAL;
(단어를 모두 소문자로 나타냄)
SELECT UPPER ('hello') FROM DUAL;
(단어를 모두 대문자로 나타냄)
SELECT INITCAP('hello world') FROM DUAL;
-> 단어의 첫 글자만 대문자로
SELECT INITCAP(DNAME) FROM DEPT; <- DEPT 자료를 출력시켜 본다 문단의 첫 글자를 대문자로 표시한다.
SELECT CONCAT('hello',' world') FROM DUAL;
SELECT CONCAT(SAWON_NAME,'님') FROM SAWON;
-> 문자를 합칠 때 사용한다.
SELECT SUBSTR('HELLO WORLD', 3,3) FROM DUAL;
-> 3글자 지점에서 3글자를 빼내어라
SELECT SUBSTR('HELLO WORLD', 3) FROM DUAL;
-> 3글자 지점에서 모두 나오게 하라
SELECT LENGTH('HELLO WORLD') FROM DUAL;
-> HELLO WORLD의 길이가 몇 글자인지 숫자로 나오게 한다
1. SELECT INSTR('HELLO WORLD', 'O') FROM DUAL;
2. SELECT INSTR('HELLO WORLD', 'O', 6) FROM DUAL;
3. SELECT INSTR('HELLO WORLD', 'O', 1,2) FROM DUAL;
-> O 라는 문자를 나오게 한다. 6은 6번째 이후 문자부터 찾아 달라는 검색어 입니다. 3번은 첫번째 문자부터 시작해서 2번째 있는 O가 몇번째 있는가 숫자로 표기한다.
SELECT LPAD('hello', 10, '*') from dual; <- 왼쪽을 채움
SELECT RPAD('hello', 10, '*') from dual; <- 오른쪽을 채움
<-총 10자리 이고 남은 자리에 대해서 *로 채우라는 표시입니다.
SELECT TRIM(BOTH 'h' FROM 'hanhanhh') FROM DUAL;
<- 양족에 있는 h 를 떼어 낼 때 사용한다.
SELECT REPLACE('011.1234.4567', '.', '-') FROM DUAL;
<- 치환시 사용하는 명령어 입니다. . 이라는 문자를 - 로 변경해 준다

연습) SELECT * FROM SAWON;
SAWON 테이블에서 이름에 '이'가 포함되어 있으면 '이'부터 두자만 출력
하게끔 합니다.

SELECT SUBSTR(SAWON_NAME, INSTR(SAWON_NAME, '이'),2) FROM SAWON WHERE SAWON_NAME LIKE '%이%';

정도로 하게 되면 나오게 되겠네요 :)

화이팅 ^_^

오늘은 여기 까지입니다.