갯수 제한할때
ROWNAME과 ORDER BY를 혼용해서 사용할 때가 있는데.. 주의해야 한다.
ROWNAME이 ORDER BY보다 먼저 실행되기 때문에.. 본인 같은 경우 서브 쿼리 형태로 작성하였다.
SYSDATE + TO_CHAR 는 짝끙
JOIN에서
INNER, OUTER 등 명확한 명시를 안 하고
WHERE절에서 ID외래키로 JOIN한 것은 INNER조인이다!
SET STATISTICS TIME ON; --SQL Server 쿼리 수행 시간 측정
SELECT
e.first_name + ' ' + e.last_name employee,
m.first_name + ' ' + m.last_name manager,
m2.first_name + ' ' + m2.last_name manager2,
m3.first_name + ' ' + m3.last_name manager3
FROM
sales.staffs e
LEFT JOIN
sales.staffs m
ON m.staff_id = e.manager_id
LEFT JOIN
sales.staffs m2
ON m2.staff_id = m.manager_id
LEFT JOIN
sales.staffs m3
ON m3.staff_id = m2.manager_id
ORDER BY
manager3, manager2, manager, employee;
SET STATISTICS TIME OFF;
차차상위 매니저 검색하기
반복이 된다..
나중에 이럴일이 많이 생기면 for문이나 변수 지정등에 대해서 공부하는 것도 좋을 것 같다.
오라클에서 수행 시간 검색하기
SET TIMING ON;
이러면 메세지에 Elapsed 라고 찍힌다.
조인을 할 때 여러 방식이 있다
SELECT []
FROM TABLE_A, TABLE_B
WHERE TABLE_A.ID = TABLE_B.ID (+)
SELECT []
FROM TABLE_A A
LEFT JOIN
FROM TABLE_B B
ON
A.ID = B.ID;
밑에 방식을 사용하는 것이 좋다.
WHERE와 ON절을 나눠서 용도에 맞게 사용이 가능하며
다른 SQL 언어와도 호환이 된다.
self join에서 >와 <>에 대해 조건 걸었을 떄 후자가 row가 2배 많다. 이것은 신승범쌤 순열조합 표그리기를 생각하면 쉽게 이해할 수 있다.
안선생이 내준 2번 문제이다.
self join으로 차상위 칼럼을 나타내는 것이 쉽지 않았다.
select
cus.first_name + ' ' + cus.last_name as "customer",
emp.first_name + ' ' + emp.last_name as "employee",
mgr.first_name + ' ' + mgr.last_name as "mgrloyee"
from sales.orders ord
inner join
sales.customers cus
on
cus.customer_id = ord.staff_id
inner join
sales.staffs emp
on
emp.staff_id = ord.staff_id
inner join
sales.staffs mgr
on
mgr.staff_id = emp.manager_id;
VIEW 예제.. SQL Server에서는 먹히지 않는다.. 샴실에서 QueryBox로 해 보자.
http://www.gurubee.net/lecture/1036
--SQL> CREATE OR REPLACE VIEW name_query
-- AS
-- SELECT a.ename, b.dname
-- FROM emp a, dept b
-- WHERE a.deptno = b.deptno
-- AND b.deptno = 20;
---- 뷰를 이용한 조회
--SQL> SELECT * FROM name_query;
-- 오더에서 오더아이템으로.. 또 거기서 프로덕의 네임으로
--select * from sales.orders;
--select * from sales.order_items;
CREATE VIEW getPrdName
AS
SELECT product_name
FROM
sales.orders ord
INNER JOIN
sales.order_items ordItem
ON
ord.order_id = ordItem.order_id
INNER JOIN
production.products prd
ON
prd.product_id = ordItem.product_id;
SELECT * FROM getPrdName;
헛 ! 됏다능!
'Database' 카테고리의 다른 글
=== 중간 중간 알게된 것들 === (0) | 2020.10.05 |
---|---|
자바 JDBC 연동, 오라클 계정 생성 (0) | 2020.10.04 |
programmers solution (0) | 2020.10.01 |
ORACLE 공부하기 좋은 사이트 (0) | 2020.10.01 |
egoing님 강의록.. (0) | 2020.10.01 |
hi hello... World >< 가장 아름다운 하나의 해답이 존재한다
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!