카테고리 없음

PostgreSQL (4)

16비트 2023. 1. 23. 18:42

Chapter 4 고급 SQL 명령


1. 각종 시간 정보를 보는 법

  • SHOW ALL - 실행 시간 값을 보여주는 매개변수
  • SHOW TIMEZONE - 작업하는 곳에 해당하는 표준 시간대
  • SHOW NOW() - 날짜와 시간 및 표준시간대 정보를 알 수 있음
  • SHOW TIMEOFDAY() SELECT CURRENT_TIME SELECT CURRENT_DATE

 

2. EXTRACT() - 년, 월, 일, 주, 분기별로 추출할 수 있다. 

SELECT EXTRACT(YEAR FROM payment_date) 
AS year FROM payment



3. AGE() - 타임스탬프 내에서 현재까지의 시기를 계산해서 알려준다.

SELECT AGE(payment_date) FROM payment



4. TO_CHAR() - 일자 유형을 글자로 바꿔주는 함수

SELECT TO_CHAR(payment_date, 'MM-dd-YYYY') FROM payment



5. 어떤 달에 지급이 이루어졌을까요?

SELECT DISTINCT(TO_CHAR(payment_date,'MONTH')) FROM payment



6. 월요일에는 지급이 얼마나 발생했을까요? (Postgre에서 한 주의 시작 일요일은 인덱스가 0이다.)

SELECT COUNT(*) FROM payment 
WHERE EXTRACT(dow FROM payment_date) = 1



7. 수리연산 - 대여료는 대여 원가의 몇 퍼센트일까?

SELECT ROUND(rental_rate/replacement_cost,2)*100 
AS percent_cost FROM film



8. 대체 비용 보증금 10퍼센트를 낮추기로 했을 때 가격

SELECT 0.1 * replacement_cost 
AS deposit FROM film



9. 문자열 길이 알아보기

SELECT LENGTH(first_name) FROM customer



10. 문자열 합치기

SELECT first_name || ' ' || last_name 
AS full_name FROM customer



11. 문자열 대문자 만들기

SELECT upper(first_name) FROM customer



12. 이름 가지고 이메일 만들어보기

SELECT LOWER(LEFT(first_name,1)) || LOWER(last_name) AS custom_email FROM customer



13. 서브쿼리 평균보다 높은 학생 구하기 

SELECT student,grade FROM test_scores 
WHERE grade > (SELECT AVG(grade) FROM test_scores)


14. 대여료가 평균보다 높은 영화 도출하기

SELECT title,rental_rate FROM film
WHERE rental)rate > SELECT AVG(rental_rate) FROM film



15. 다른 표에 있는 학생의 시험 성적표에서 학생과 성적을 도출

SELECT student,grade FROM test_scores
WHERE student IN (SELECT student FROM honor_roll_table)



16. 어떤 기간에 반납된 영화 이름을 확인하기

SELECT film_id,title FROM film 
WHERE film_id 
IN (SELECT inventory.film_id FROM rental 
INNER JOIN inventory ON inventory.inventory_id = rental.inventory_id 
WHERE rental.return_date 
BETWEEN '2005-05-29' AND '2005-05-30') 
ORDER BY film_id



17. 어떤 행이 서브 쿼리로 도출되었는지 확인

SELECT column_name FROM table_name 
WHERE EXISTS (SELECT column_name FROM table_name WHERE condition);



18. 11달러 초과로 한 번 이상 지급한 고객의 이름과 성을 보기

SELECT first_name,last_name 
FROM customer AS c 
WHERE EXISTS (SELECT * FROM payment as p WHERE p.customer_id = c.customer_id AND amount > 11)



19. 셀프 조인 - 같은 표 내 여러 열의 여러 값을 비교할 때 유용함

SELECT tableA.col,tableB.col FROM table 
AS tableA JOIN table AS tableB 
ON tableA.some_col = tableB.other_col



20. 직원 아이디와 리포트 아이디로 발송자name와 수신자 이름rep 표로 만들기

SELECT emp.name,report.name AS rep FROM employees 
AS emp JOIN employees AS report 
ON emp.emp_id = report.emp_id



21. 같은 영화 시간을 가진 영화 짝을 지어보기

SELECT f1.title, f2.title, f1.length FROM film
AS f1 INNER JOIN film AS f2 
ON f1.film_id != f2.film_id AND f1.length = f2.length