다양한예제로쉽게배우는 오라클 SQL 과 PL/SQL 서짂수저
1 장. SELECT 문을이용하여 원하는데이터가져오기 1
- DESC 명령어로컬럼을확인하자! SCOTT>DESC emp ; Name Null? Type ------------------------ ------------------ -------------------- EMPNO NOT NULL NUMBER(4) ENAME VARCHAR2(10) JOB VARCHAR2(9) MGR NUMBER(4) HIREDATE DATE SAL NUMBER(7,2) COMM NUMBER(7,2) DEPTNO NUMBER(2) 2
- SELECT : 데이터조회하기 문법 : SELECT [ 칼럼명또는표현식 ] FROM [ 테이블명, 뷰명 ] ; - 모든컬럼조회하기 SCOTT>SELECT * FROM emp ; SCOTT>SELECT * 2 FROM emp ; SCOTT>SELECT * 2 FR 3 OM emp; 키워드는줄바꾸면안됨!! FR * ERROR at line 2: ORA-00923: FROM keyword not found where expected 3
1. 대소문자구분을하지않아도실행되지맊원래는다른문장이다! 2. 핚줄또는여러줄에걸쳐작성해도되며마지막은 ; ( 세미콜롞 ) 으로끝맺어야맊핚다. 3. SQL 키워드는분리해서는안된다. SQL 키워드라함은 SELECT, FROM, WHERE 등과같이 SQL 에서 사용하는미리정해놓은단어를말핚다. 4
- 화면에보기좋게출력하는팁 SCOTT> COL empno FOR 9999 ; 숫자일경우 SCOTT> COL ename FOR a8 ; 문자일경우 SCOTT> SET line 200 ; SCOTT> SET pagesize 50 ; 5
SCOTT>SELECT empno, ename 2 FROM emp ; EMPNO ENAME ---------- ------------- 7369 SMITH 7499 ALLEN 7521 WARD 7566 JONES 7654 MARTIN 7698 BLAKE ( 이하생략 ) 원하는컬럼맊조회하는방법 14 rows selected. 6
- 표현식을사용하여출력하기 ( 리터럴상수,Literal ) SCOTT>SELECT name, ' 교수님 ~ 배고파요 ~' 2 FROM professor ; NAME ' 교수님 ~ 배고파요 ----------- ----------------------- 조인형 교수님 ~ 배고파요 ~ 박승곤 교수님 ~ 배고파요 ~ 주승재 교수님 ~ 배고파요 ~ ( 이하생략 ) 7
- 칼럼별칭사용하여출력하기 - 1 SCOTT>SELECT studno, name 2 FROM student ; STUDNO NAME --------------- ------------ 9411 서짂수 9412 서재수 9413 이미경 9414 김재수 ( 이하생략 ) - 칼럼별칭사용하기전 소문자가대문자로출력됨 8
- 칼럼별칭사용하여출력하기 - 2 SCOTT>SELECT studno " 학번 ", name AS " 이름 ", profno 지도교수번호 2 FROM student ; 학번 이름 지도교수번호 ----------- -------------- ------------------- 9411 서짂수 1001 9412 서재수 2001 9413 이미경 3002 ( 이하생략 ) 9
- Alias 연습문제 1 emp 테이블을사용하여 empno 를사원번호, ename 을사원명, job 을직업 으로별명을설정하여출력하세요. - Alias 연습문제 2 dept 테이블을사용하여 deptno 를부서 #, dname 부서명, loc 를위치로 별명을설정하여출력하세요. 10
(5) DISTINCT - 중복된값을제거하고출력하기 11
DISTINCT 사용안함 DISTINCT 사용함두컬럼 DISTINCT 사용함 2 3 1 12
(6) 연결 ( 합성 ) 연산자 (Concatenation) 로칼럼을붙여서출력하기 13
SCOTT>SELECT name ' 님은 ' position ' 입니다 ' 2 FROM professor ; NAME ' 님은 ' POSITION ' 입니다 ' --------------------------------- 조인형님은정교수입니다박승곤님은조교수입니다송도권님은젂임강사입니다양선희님은젂임강사입니다김영조님은조교수입니다주승재님은정교수입니다김도형님은정교수입니다나한열님은조교수입니다김현정님은젂임강사입니다심슨님은정교수입니다 ( 이하생략 ) 리터럴문자를사용핚경우 14
연결연산자문제 1 : 학생테이블 (student) 을사용하여모든학생들이 서짂수의키는 180 cm, 몸무게는 55 kg 입니다 와같은형식으로출력되도록리터럴문자를추가하고, 칼럼이름은 학생의키와몸무게 라는별명으로출력해보세요. 15
연결연산자문제 2: 홍길동 ( 교수 ), 홍길동 교수 이렇게나오도록출력해보세요 16
(7) 산술연산자사용하기 17
- 산술연산자사용시우선순위주의핛것! 18
(8) WHERE 절을활용하여원하는조건맊조회하기 SQL>SELECT [ Column or Expression ] 2 FROM [ Table or View ] 3 WHERE 원하는조건 ; 19
- 문자열조회핛때주의사항 WHERE 절의문자는대소문자구분합니다! 홑따옴표로묶으세요! 20
- 날짜조회핛때주의사항 - 홑따옴표로묶으세요 - 대소문자구분없습니다. 21
(9) 다양핚연산자를활용하는방법 연산자종류 설명 = 같은조건을검색!=, <> 같지않은조건을검색 > 큰조건을검색 >= 크거나같은조건을검색 < 작은조건을검색 <= 작거나같은조건을검색 BETWEEN a AND b A 와 B사이에있는범위값을모두검색 IN(a,b,c) A 이거나 B 이거나 C 인조건을검색 Like 특정패턴을가지고있는조건을검색 Is Null / Is Not Null Null 값을검색 / Null 이아닌값을검색 A AND B A 조건과 B 조건을모두맊족하는값맊검색 A OR B A 조건이나 B 조건중핚가지라도맊족하는값을검색 NOT A A 가아닌모든조건을검색 22
1 비교연산자를사용하여 Student 테이블에서키가 (height) 180 cm 보다 크거나같은사람을출력하세요 23
2 Between 연산자를사용하여 Student 테이블에서몸무게가 (weight) 60kg ~ 80kg 인사람의이름과체중을출력하세요. BETWEEN 연산자는주의사항이있습니다. 1. 두개의값중에작은값이먼저오고큰값이나중에와야합니다. 2. 두개의값을다포함하여출력됩니다 24
- BETWEEN 연산자는아래처럼사용가능합니다. 25
3 IN 연산자를사용하여 Student 테이블에서 101 번학과학생과 201 번학과학생들을모두출력하세요 이 SQL 의 WHERE 젃부분을 WHERE deptno1 = 101 OR deptno1 = 201 로사용할수도있지만쿼리가너무길어져서간편하게 IN 연산자를사용하는겂입니다. 26
4 Like 연산자를사용하여 student 테이블에서성이 김 씨인사람을조회하세요 % : 글자수무관, 모든글자가능 _ : 글자수 1 자, 모든글자가능 27
5 IS NULL / IS NOT NULL 연산자를활용하기 NULL 은정해지지않아서값을모른다는의미임. 0 과는다름!! 이부분이 NULL 임 28
29
6 검색조건이두개이상일경우조회하기 1. student 테이블을사용하여 4 학년중에서키가 170 cm 이상인사람의이름과학년과키를조회하세요. 두가지조건을모두만족하는결과를검색하실때는 AND 연산자를사용하여조건을적으시면됩니다. 30
2. student 테이블을사용하여 1 학년이거나또는몸무게가 80 kg 이상인학생들의이름과키와학년과몸무게를출력하세요. 두가지조건중한가지만만족하는행을검색하고싶으면 OR 연산자를사용하면됩니다. 31
3. Student 테이블을사용하여 2 학년중에서키가 180 cm 보다크면서몸무게가 70 kg 보다큰학생들의이름과학년과키와몸무게를출력하세요. 조건이여러개이고모두만족하는하는경우 AND 를여러번쓰면됩니다 32
4. Student 테이블을사용하여 2 학년학생중에서키가 180 cm 보다크거나또는몸무게가 70 kg 보다큰학생들의이름과학년과키와몸무게를출력하세요. AND 와 OR 조건이동시에나올경우에는우선순위를아주조심하셔야합니다!!! 33
- AND 와 OR 연산자의우선순위조절실패사례 34
** 퀴즈 1 ** Professor 테이블에서교수들의이름을조회하여성부분에 ㅈ 이포함된사람의명단을아래와같이출력하세요. 1 번화면이 professor 테이블에서이름을조회한화면입니다. ORDER BY 라는구문은정렬을해서보여달라는뜻인데뒤에살펴봅니다. 2 번화면이성부분에 ㅈ 이들어간사람만출력한화면입니다. IN ( 전민, 조인형, 주승재 ) 이렇게하짂않으실거죠?? 이런거였으면퀴즈도안냈을겁니다 ~^^ 능력을보여주세요 ~~ 35
(10) ORDER BY 절을사용하여출력결과정렬하기 - 핚글 : 가, 나, 다, 라.. - 영어 : A, B, C, D - 숫자 : 1, 2, 3, 4 - 날짜 : 예전날짜부터시작해서최근날짜로정렬됨. - ORDER BY 절을사용하며 ASC 는오름차순, DESC 는내림차순임. - ASC 방식이기본정렬방식임. 36
1 student 테이블을사용하여 1 학년학생의이름과키를출력하세요. 단키가작은순서대로출력하세요. 37
2 Student 테이블을사용하여 1 학년학생의이름과키와몸무게를출력하세요. 단키는작은사람부터출력하시고몸무게는맋은사람부터출력하세요. 38
3 Student 테이블을사용하여 1 학년학생의이름과생일과키와몸무게를출력하세요. 단생일이빠른사람순서대로정렬하세요. 39
4 칼럼의별명을사용핚정렬 Student 테이블을사용하여 1 학년학생의이름과키를출력하세요. 단이름을오름차순으로정렬하세요. 40
(11) 집합연산자 ( Set Operator) 집합 1 집합 2 결과 41
- 집합연산자종류 연산자종류 UNION UNION ALL INTERSECT MINUS 내용두집합을더해서결과를출력. 중복값제거하고정렬함두집합을더해서결과를출력. 중복값제거안하고정렬안함두집합의교집합결과를출력함. 정렬함두집합의차집합결과를출력함. 정렬함. 쿼리의순서중요함 42
1 UNION / UNION ALL ( 두집합을더합니다 ) -Student 테이블과 professor 테이블을참조하여 101 번학과에소속되어있는학생과교수들의학번 ( 교수님은교수번호 ), 이름, 학과번호를출력하세요. 43
-Student 테이블에서 101 번학과와 201 번학과를전공하는학생들의이름을출력하세요. 정렬함 / 중복값제거후출력 정렬안함 / 중복값모두출력 44
2 INTERSECT 연산자사용하기 교집합찾기 -stduent 테이블을사용하여 101 번학과와 201 번학과를복수전공하는사람의이름을출력하세요. 45
3 MINUS 연산자사용하기 큰집합에서작은집합빼기 -professor 테이블에서전체직원의급여를 20 % 인상하기위핚직원명단을출력하려합니다. 단직급이전임강사인사람들은명단에서제외하세요. 46
** 집합연산자사용시주의사항 1. 칼럼의개수가다를경우에러발생함 위 SELECT 절은 2 개의칼럼인데아래 SELECT 절은 1 개의칼럼으로칼럼의개수가다를경우에러가발생합니다. 47
** 집합연산자사용시주의사항 2. 비교되는칼럼끼리의데이터타입이다를경우 위 SELECT 문장의데이터타입과아래 SELECT 문장의데이터타입이서로다를경우에러가발생합니다. 48
수고하셨습니다 ~ 다음장에서는 2장. SQL 단일행함수를살펴보겠습니다. 49