1. 최대값 구하기

문제 programmers.co.kr/learn/courses/30/lessons/59415

정답

 

2. 최솟값 구하기

문제 programmers.co.kr/learn/courses/30/lessons/59038

정답

 

3. 동물 수 구하기

문제 programmers.co.kr/learn/courses/30/lessons/59406

정답

 

4. 중복 제거하기

문제 programmers.co.kr/learn/courses/30/lessons/59038

정답

 

 

 

1. 모든 레코드 조회하기

문제 programmers.co.kr/learn/courses/30/lessons/59034?language=oracle

정답

 

2. 역순 정렬하기

문제 programmers.co.kr/learn/courses/30/lessons/59035

정답

 

3. 아픈 동물 찾기

문제 programmers.co.kr/learn/courses/30/lessons/59036

정답

 

4. 어린 동물 찾기

문제 programmers.co.kr/learn/courses/30/lessons/59037

정답 

 

참고

* 비교 연산자

연산자 설명
= 같음
> 보다 큼
< 보다 작음
>= 다음보다 크거나 같음
<= 작거나 같음
<>, !=, ^= 같지 않음

 

* 논리 연산자

연산자 설명
NOT  조건을 만족하지 않아야 검색 가능
AND 두 가지 조건 모두 만족해야 검색 가능
OR 두 가지 조건 중 하나만 만족해도 검색 가능

 

* 기타 연산자

연산자 설명
BETWEEN a AND b 범위를 지정하여 조건을 걸 때 사용
IN(a, b) 범위에 포함되는 것
LIKE '%A_' ~와 같은 조건 사용
% : 문자가 없거나 하나 이상의 어떤 값이 와도 상관없다.
_ : 하나의 문자가 어떤 값이 와도 상관없다.

 

5. 동물의 아이디와 이름

문제 programmers.co.kr/learn/courses/30/lessons/59403

정답

 

6. 여러 기준으로 정렬하기

문제 programmers.co.kr/learn/courses/30/lessons/59404

정답

 

7.  상위 n개 레코드

문제 programmers.co.kr/learn/courses/30/lessons/59405

정답(MySQL) -> LIMIT 사용

정답(Oracle) -> 서브쿼리, ROWNUM 사용 (LIMIT사용 불가능)

참고

  • LIMIT1 : 맨 위에서 부터 1개 까지의 정보 조회
  • LIMIT3 : 맨 위에서 부터 3개 까지의 정보 조회
  • LIMIT2,6 : 위에서 2번째부터 6번째 까지의 정보 조회

 

 

[world] 테이블

 

1. 이 테이블이 나오는 코드를 선택해라.

 

 

 

SELECT name, population
FROM world
WHERE population BETWEEN 1000000 AND 1250000

 

2. 이 코드로 부터 나오는 결과를 선택해라.

SELECT name, population
FROM world
WHERE name LIKE 'AI%'

 

세션과 쿠키의 비교

1. 공통점 : 웹 통신 간 유지하려는 정보(ex. 로그인 정보 등)를 저장하기 위해 사용하는 것

2. 차이점 : 저장 위치, 저장 형식, 용량 제한, 만료 시점 등

  • 쿠키 : 개인 PC에 저장됨
  • 세션 : 접속중인 웹 서버에 저장됨

 

 

 

1
SELECT * FROM BOOKS;
cs

 

  NAME WRITER PRICE GENRE
1 홍길동전 허균 30000 소설
2 레미제라블1 빅토르 위고 20000 소설
3 레미제라블2 빅토르 위고 30000 소설

 

BOOKS는 NAME, WRITER, PRICE, GENRE 컬럼이 다 나오는 테이블이다.

 

뷰(VIEW) 생성

1
2
3
4
CREATE OR REPLACE VIEW BOOK
AS
SELECT NAME, WRITER 
FROM BOOKS;
cs

뷰(VIEW) 조회

1
SELECT * FROM BOOK;
cs

 

  NAME WRITER
1 홍길동전 허균
2 레미제라블1 빅토르 위고
3 레미제라블2 빅토르 위고

 

BOOK는 NAME, WRITER 컬럼만 가지고 있는 VIEW이다.

 

뷰(VIEW) 삭제

 

date로 넣은 값을 'YYYY..MM..DD' 형태로 만드는 함수 만들기

 

함수 실행 화면

 

함수 결과 화면

'프로그램 > DataBase' 카테고리의 다른 글

[Oracle] Delete, Truncate, Drop 비교  (0) 2021.03.05
[PL/SQL Developer] 뷰(VIEW) 실습  (0) 2021.02.18
[Oracle] SQL 쿼리문 예제 50문제  (0) 2021.02.16
[Oracle] JOIN  (0) 2021.02.16
[Oracle] 프로시저, 함수의 이해  (0) 2021.02.16
  1. PL/SQL Developer 실행

  2. 디버깅할 프로시저 선택

  3. 마우스 오른쪽 버튼을 눌러 Add Debug information에 체크

  4. view 클릭

  5. test 클릭

  6. start debugger(F9) 버튼 클릭

만약 start debugger(F9) 버튼 클릭 했을 때 Debugging not possible in single session mode 경고 메시지가 난다면 

Tools - Preferences - Oracle - Connection - Session Mode - Single session 을 바꿔주고 프로그램 재실행

 

프로시저 실행 화면

 

1
2
3
4
5
6
7
8
9
create or replace procedure EM_TEST
is
      START_MESSAGE VARCHAR2(100) := '---TEST---';
      END_MESSAGE VARCHAR2(100) := '---END---';
begin
  DBMS_OUTPUT.PUT_LINE(START_MESSAGE);
  DBMS_OUTPUT.PUT_LINE(END_MESSAGE);
end EM_TEST;
 
cs

 

프로시저 결과 화면

---TEST---
---END---

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
--1> 부서테이블의 모든 데이터를 출력하라.
SELECT *
FROM EMP
 
--2> EMP테이블에서 각 사원의 직업, 사원번호, 이름, 입사일을 출력하라.
SELECT JOB, EMPNO, ENAME, HIREDATE
FROM EMP
 
--3> EMP테이블에서 직업을 출력하되, 각 항목(ROW)가 중복되지 않게 출력하라.
SELECT DISTINCT JOB
FROM EMP
 
--4> 급여가 2850 이상인 사원의 이름 및 급여를 출력하라.
SELECT ENAME, SAL
FROM EMP
WHERE SAL >= 2850
 
--5> 사원번호가 7566인 사원의 이름 및 부서번호를 출력하라.
SELECT ENAME, DEPTNO
FROM EMP
WHERE EMPNO = 7566
 
--6> 급여가 1500이상 ~ 2850이하의 범위에 속하지 않는 모든 사원의 이름 및 급여를 출력하라.
SELECT ENAME, SAL
FROM EMP
WHERE SAL NOT BETWEEN 1500 AND 2850
 
--7> 1981년 2월 20일 ~ 1981년 5월 1일에 입사한 사원의 이름,직업 및 입사일을 출력하되, 
-- 입사일을 기준으로 해서 오름차순으로 정렬하라.
SELECT ENAME, JOB, HIREDATE
FROM EMP
WHERE HIREDATE BETWEEN '1981-02-20' AND '1981-05-01'
ORDER BY HIREDATE
 
--8> 10번 및 30번 부서에 속하는 모든 사원의 이름과 부서 번호를 출력하되, 이름을 알파벳순으로 정렬하라.
SELECT ENAME, DEPTNO
FROM EMP
WHERE DEPTNO IN(10,30)
ORDER BY ENAME
 
--9> 10번 및 30번 부서에 속하는 모든 사원 중 급여가 1500을 넘는 사원의 이름 및 급여를 출력하라.
--(단 컬럼명을 각각 employee 및 Monthly Salary로 지정하시오)
SELECT ENAME AS 'Employee', SAL AS ' Monthly Salary'
FROM EMP
WHERE DEPTNO IN(10,30) AND SAL > 1500
 
--10> 관리자가 없는 모든 사원의 이름 및 직위를 출력하라.
SELECT ENAME, JOB
FROM EMP
WHERE MGR IS NULL
 
--11> 커미션을 받는 모든 사원의 이름, 급려 및 커미션을 출력하되, 급여를 기준으로 내림차순으로 정렬하라.
SELECT ENAME, SAL, COMM
FROM EMP
WHERE COMM IS NOT NULL
ORDER BY SAL DESC;
 
--12> 이름의 세 번째 문자가 A인 모든 사원의 이름을 출력하라
SELECT ENAME
FROM EMP
WHERE ENAMAE LIKE '__A%'
 
--13> 이름에 L이 두 번 들어가며 부서 30에 속해있는 사원의 이름을 출력하라.
SELECT ENAME
FROM EMP
WHERE ENAME LIKE '%L%L%' AND DEPTNO = 30;
 
--14> 직업이 Clerk 또는 Analyst이면서 급여가 1000, 3000, 5000 이 아닌 
-- 모든 사원의 이름, 직업 및 급여를 출력하라. 
SELECT ENAME, JOB, SAL
FROM EMP
WHERE JOB IN('Clerk''Analyst') AND SAL NOT IN(100030005000);
 
--15> 사원번호, 이름, 급여 그리고 15%인상된 급여를 정수로 표시하되 컬럼명을 New Salary로 지정하여 출력하라.
SELECT EMPNO, ENAME, SAL,
                ROUND(SAL + (SAL*0.15), 0) AS "New Salary"
FROM EMP
 
--16> 15번 문제와 동일한 데이터에서 급여 인상분(새 급여에서 이전 급여를 뺀 값)을 추가해서 출력하라.
-- 컬럼명은 Increase로 하라.
SELECT EMPNO, ENAME, SAL, ROUND(SAL + (SAL * 0.15)) AS "New Salary",
    (ROUND(SAL + (SAL * 0.15))) - SAL AS "Increase"
FROM EMP
 
--17> 모든 사원의 이름(첫 글자는 대문자로, 나머지 글자는 소문자로 표시) 및 이름 길이를 표시하는 쿼리를 작성하고 컬럼 별칭은 적당히 넣어서 출력하라.
SELECT UPPER(SUBSTR(ENAME, 11)) || LOWER(SUNSTR(ENAME, 212)) AS "NAME",
    LENGTH(ENAME) AS "LENENAME"
FROM EMP
 
--18> 사원의 이름과 커미션을 출력하되, 커미션이 책정되지 않은 사원의 커미션은 'no commission'으로 출력하라.
SELECT ENAME, NVL(TO_CHAR(COMM), 'no commision')
FROM EMP
 
--20> 모든 사원의 이름, 부서 번호, 부서 이름을 표시하는 질의를 작성하라.(DECODE)
SELECT EMPNO, DEPTNO, DECODE(DEPTNO, 10'ACCOUNTING'20'RESEARCH'30'SALES'40'OPERATIONS') AS "DNAME"
FROM EMP;
 
--21> 30번 부서에 속한 사원의 이름과 부서번호 그리고 부서이름을 출력하라.
SELECT E.NAME, E.DEPTNO, D.DNAME
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO AND E.DEPTNO = 30;
 
--22> 30번 부서에 속한 사원들의 모든 직업과 부서위치를 출력하라.
--(단, 직업 목록이 중복되지 않게 하라.)
SELECT DISTINCT E.JOB, D.LOC
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO AND D.DEPTNO = 30;
 
--23> 커미션이 책정되어 있는 모든 사원의 이름, 부서이름 및 위치를 출력하라.
SELECT E.ENAME, D.DNAME, D.LOC
FROM EMPE, DEPT D
WHERE E.DEPTNO = D.DEPTNO AND COMM IS NOT NULL
 
--24> 이름에 A가 들어가는 모든 사원의 이름과 부서 이름을 출력하라.
SELECT E.ENAME, D.DNAME
FROM EMP M, DEPT D
WHERE E.DEPTNO = D.DEPTNO AND E.ENAME LIKE '%A%';
 
--25> Dalls에서 근무하는 모든 사원의 이름, 직업, 부서 번호 및 부서 이름을 출력하라.
SELECT E.ENAME, E.JOB, E.DEPTNO, D.DNAME
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO AND D.LOC = 'Dalls';
 
--26> 사원 이름 및 사원 번호, 해당 관리자 이름 및 관리자 번호를 출력하되,
-- 각 컬럼명을 employee, emp#, manager, mgr#으로 표시하여 출력하라.
SELECT E.ENAME AS "EMPPLOYEE", E.EMPNO AS "EMP#",
M.ENAME AS "MANAGER", M.EMPNO AS "MGR#"
FROM EMP E, EMP M
WHERE E.MGR = M.EMPNO;
 
--27> 모든 사원의 이름, 직업, 부서 이름, 급여 및 등급을 출력하라.
SELECT E.ENAME, E.JOB, D.DNAME, E.SAL, S.GRADE
FROM EMP E, DEPT P, SALGRADE S
WHERE E.DEPTNO = D.DEPTNO
AND E.SAL BETWEEN S.LOSAL AND S.HISAL;
 
--28> Smith 보다 늦게 입사한 사원의 이름 및 입사일을 출력하라.
SELECT ENAME, HIREDATE
FROM EMP
WHERE HIREDATE > (SELECT HIREDATE
    FROM EMP
    WHERE ENAME = 'SMITH');
 
--30> 모든 사원의 급여 최고액, 최저액, 총액 및 평균액을 출력하되 각 컬럼명을 Maximum, Minimum, Sum, Average로 지정하여 출력하라.
SELECT MAX(SAL) AS "Maximum",MIN(SAL) AS "Minimum", SUM(SAL) AS "Sum", AVG(SAL) AS "Average"
FROM EMP
 
 
 
cs

 

31. 각 직업별로 급여, 최저액, 최고액, 총액 및 평균액을 출력해라.

 

32. 직업이 동일한 사람 수를 직업과 같이 출력해라.

 

33. 관리자의 수를 출력하되, 관리자 번호가 중복되지 않게해라. 또, 컬럼명을 Number of Manager로 지정하여 출력해라.

 

34. 최고 급여와 최저 급여의 차액을 출력해라.

 

35. 관리자 번호 및 해당 관리자에 속한 사원들의 최저 급여를 출력해라. 단, 관리자가 없는 사원 및 최저 급여가 1000미만인 그룹은 제외시키고 급여를 기준으로 출력 결과를 내림차순으로 정렬해라.

 

36. 부서별로 부서 이름, 부서 위치, 사원 수 및 평균 급여를 출력하라. 그리고 각각의 컬럼명을 부서명, 위치, 사원의 수, 평균 급여로 표시해라.

 

37. Smith와 동일한 부서에 속한 모든 사원의 이름 및 입사일을 출력해라. 단, Smith는 제외하고 출력해라.

 

38. 자신의 급여가 평균 급여보다 많은  모든사원의 사원 번호, 이름, 급여를 표시하는 질의를 작성하고 급여를 기준으로 결과를 내림차순으로 정렬해라.

 

39. 이름에 T가 들어가는 사원의 속한 부서에서 근무하는 모든 사원의 사원번호 및 이름을 출력해라.

 

40. 부서 위치가 Dallas인 모든 사원의 이름, 부서번호 및 직위를 출력하라.

 

41. KING에게 보고하는모든 사원의 이름과 급여를 출력하라.

 

42. Sales 부서의 모든 사원에 대한 부서번호, 이름 및 직위를 출력하라.

 

43. 자신의 급여가 평균 급여보다 많고 이름에 T가 들어가는 사원과 동일한 부서에 근무하는 모든 사원의 사원 번호, 이름 및 급여를 출력해라.

 

44. 커미션을 받는 사원과 급여가 일치하는 사원의 이름, 부서 번호, 급여를 출력해라.

 

45. Dallas에서 근무하는 사원과 직업이 일치하는 사원의 이름, 부서이름 및 급여를 출력해라.

 

46. SCOTT과 동일한 급여 및 커미션을 받는 모든 사원의 이름, 입사일 및 급여를 출력해라.

 

47. 직업이 CLERK인 사원들보다 더 많은 급여를 받는 사원의 사원번호, 이름, 급여를 출력하되, 결과를 급여가 높은 순으로 정렬하라.

 

48. 이름에 A가 들어가는 사원과 같은 직업을 가진 사원의 이름과 월급, 부서번호를 출력하라.

 

49. New York에서 근무하는 사원과 급여 및 커미션이 같은 사원의 사원 이름과 부서명을 출력하라.

 

50. DALLAS에서 근무하는 사원과 직업 및 관리자가 같은 사원의 사원번호, 사원 이름, 직업, 월급, 부서명, 커미션을 출력하되 커미션이 책정되지 않은 사원은 NoCommission으로 표시하고, 커미션의 컬럼명은 Comm으로나오게 출력해라. (단, 최고 월급부터 출력되게 해라.)

 

51. EMP 테이블에서 부서 인원이 4명보다 많은 부서의 부서번호, 인원수, 급여의 합을 출력해라.

'프로그램 > DataBase' 카테고리의 다른 글

[PL/SQL Developer] 뷰(VIEW) 실습  (0) 2021.02.18
[PL/SQL Developer] 함수 실습  (0) 2021.02.18
[Oracle] JOIN  (0) 2021.02.16
[Oracle] 프로시저, 함수의 이해  (0) 2021.02.16
[Oracle] 뷰(VIEW)의 이해  (0) 2021.02.16

JOIN이란?

  • 2개 이상의 테이블을 연결하여 데이터를 검색하는 방법
  • 보통 공통된 값인 PK 및 FK 값을 사용하여 조인한다.
  • 조인은 조인 연산자에 따라 From 절의 조인 형태에 따라서 구별한다.

 

조인의 종류

종류 설명
등가 조인 (equi join)
내부 조인 (inner join)
단순 조인 (simple join)
테이블을 연결한 후에 출력 행을 각 테이블의 특정 열에 일치한 데이터를 기준으로 선정하는 방식
비등가 조인 (non-equi join) 등가 조인 방식 외의 방식 ex) 범위를 조건으로 지정하는 조인
자체 조인 (self join) 하나의 테이블을 여러 개의 테이블처럼 활용하여 조인하는 방식
외부 조인 (outer join) 두 테이블 간의 조인에서 조인 기준 열의 어느 한쪽이 null이어도 강제로 출력하는 방식 (왼쪽 외부 조인과 오른쪽 외부 조인이 있다.)

 

 

+ Recent posts