DB
2023.02.14
연을
2023. 2. 14. 17:30
728x90
ansi 조인
기존 문법 | ansi 문법 |
select a.컬럼, b.컬럼 from 테이블 a, 테이블 b where a.컬럼 = b.컬럼 |
select a.컬럼, b.컬럼 from 테이블 a inner join 테이블 b on (a.컬럼 = b.컬럼) where ... |
select a.A1, b.B1 from a,b where a.A1 = b.B1(+) |
select a.A1, b.B1 from a left outer join b on a.A1=b.B1 from a right outer join b on a.A1=b.B1 from a full outer join b on a.A1=b.B1 |
예시 | ||
select 직원.이름, 부서.부서명 from 직원, 부서 where 직원.부서코드 = 부서.부서코드(+) |
select 직원.이름, 부서.부서명 from 직원 left outer join부서 on 직원.부서코드 = 부서.부서코드 |
![]() |
select 직원.이름, 부서.부서명 from 직원, 부서 where 직원.부서코드(+) = 부서.부서코드 |
select 직원.이름, 부서.부서명 from 직원 right outer join부서 on 직원.부서코드 = 부서.부서코드 |
![]() |
select 직원.이름, 부서.부서명 from 직원, 부서 where 직원.부서코드(+) = 부서.부서코드(+) |
select 직원.이름, 부서.부서명 from 직원 full outer join부서 on 직원.부서코드 = 부서.부서코드 |
![]() |
=======================================
PL/SQL | ||
코드블록(code block) - 익명블록(unnamed block) - 함수/프로시저(function/procedure) |
declare 변수선언 begin 실행문(s) end; |
dbms_output.put_line(); = system.out.println(); = document.write(); console.log() |
언어 | C/C++/Java/JS | Pascal/COBOL |
배정연산자 | = | := |
비교연산자 | == | = |
변수타입선언 변수명 테이블명.컬럼명%type:='Jefferson'; |
- SQL의 결과물이 하나일때 - into구문 사용
- SQL의 결과물이 여럿일때 - cursor 사용
<코드>
declare = 선언 / 선언할 변수 없다면 declare를 쓰지 않으면 된다.
declare
i number;
begin
i:=100;
dbms_output.put_line(i);
end;
/
<결과>
보기 => dbms출력 => +표시 눌러서 db랑 연결
<코드>
declare
a integer := 2**2*3**2;
begin
dbms_output.put_line('a='||to_char(a));
end;
/
<결과>
<코드>
declare
vs_emp_name varchar2(80); --employees.emp_name%type;
vs_dep_name varchar2(80); -- departments.department_name%type;
begin
select a.emp_name, b.department_name
into vs_emp_name, vs_dep_name --값 1개만 저장가능
from employees a, departments b
where a.department_id = b.department_id and a.employee_id =100;
dbms_output.put_line(vs_emp_name||' - '||vs_dep_name);
end;
/
<결과>
=====================================
if문 |
if 조건식1 then 실행문(s); else if 조건식2 then 실행문(s); else 실행문(s); end if; |
<코드>
declare
vn_mid employees.manager_id%type;
vs_self employees.emp_name%type;
vs_name employees.emp_name%type;
begin
select emp_name,manager_id into vs_self,vn_mid from employees where employee_id = 100;
if vn_mid is null then
dbms_output.put_line('직원명='||vs_self||',매니저가 없습니다.');
else
select emp_name into vs_name from employees where employee_id = vn_mid;
if vs_name is null then
dbms_output.put_line('직원명='||vs_self||',매니저이름을 찾을 수 없습니다.');
else
dbms_output.put_line('직원명='||vs_self||',매니저='||vs_name);
end if;
end if;
end;
<결과>
<코드>
월급이 가장 낮은 사람의 사번,이름,매니저이름 찾는 pl/sql 작성
declare
vn_eid employees.employee_id%type; --사번
vs_name employees.emp_name%type; --이름
vs_mname employees.emp_name%type; --매니저이름
vn_mid employees.manager_id%type; --매니저아이디
begin
select employee_id, emp_name, manager_id into vn_eid,vs_name,vn_mid from employees
where salary = (select min(salary) from employees);
if vs_name is null then
dbms_output.put_line('찾을 수 없습니다.');
else
select emp_name into vs_mname from employees where employee_id = vn_mid;
if vs_mname is null then
dbms_output.put_line('사번 : '||vn_eid||', 이름 : '||vs_name||', 매니저를 찾을 수 없습니다. ');
else
dbms_output.put_line('사번 : '||vn_eid||', 이름 : '||vs_name||', 매니저 : '||vs_mname);
end if;
end if;
end;
/
declare
eid employees.employee_id%type;
ename employees.emp_name%type;
mname employees.emp_name%type;
payment employees.salary%type;
begin
select a.employee_id,a.emp_name,a.salary,b.emp_name
into eid,ename,payment,mname
from employees a, employees b
where a.salary = (select min(salary) from employees)
and a.manager_id=b.employee_id;
dbms_output.put_line('사번='||eid||',이름='||ename||', 월급='||payment||',매니저='||mname);
end;
/
<결과>
=======================================
case문 |
|
case 변수/표현식/컬럼명 when 값1 then 실행문1 when 값2 then 실행문2 else 실행문3 end |
case when 조건식1 then 실행문1 when 조건식2 then 실행문2 else 실행문3 end |
========================================
loop | |
loop 실행문(s) exit when 조건식 end loop; |
while 조건문 loop 실행문(s); end loop; |
<코드>
declare
i number := 0;
begin
loop
dbms_output.put_line('i='||i);
i:=i+1;
exit when i>10;
end loop;
dbms_output.put_line('Program terminated');
end;
/
<결과>
<코드>
구구단
declare
i number := 1;
j number := 1;
begin
loop
i:=i+1;
j:=1;
loop
dbms_output.put_line(i||'x'||j||'='||i*j);
j:=j+1;
if j>9 then
dbms_output.new_line;
exit;
end if;
end loop;
exit when i>=9;
end loop;
end;
/
<결과>
==================================
for문 |
for 변수 in 시작값..마지막값 loop 실행문; end loop; |
<코드>
declare
i number :=2;
j number :=1;
begin
for i in 2..9
loop
for j in 1..9
loop
dbms_output.put_line(i||'x'||j||'='||i*j);
end loop;
dbms_output.new_line;
end loop;
end;
/
<결과>
======================
continue
<코드>
소수구하기
declare
i number :=2;
j number :=2;
begin
for i in 2..1000
loop
for j in 2..i
loop
if mod(i,j)=0 then exit;
end if;
end loop;
if i=j then dbms_output.put_line(i);
end if;
end loop;
end;
/
정확한 답이 아니니 내일..한다...

728x90