SQL 작성

노건우·2023년 7월 19일
0

concat 예제

SELECT 	CONCAT('Hello','bye'), CONCAT('good','bad')  
FROM 	dual
;

concat이 아닌 operator이용

SELECT 	CONCAT('good','bad') 	concat, 
		'good' || 'bad'			operators
FROM dual
;

  • 파생문제
 DEPARTMENTS 테이블에서 부서번호와 부서이름, 위치번호를 합하여 출력하도록 하라.(||사용)
*/
SELECT 	DEPARTMENT_ID || DEPARTMENT_NAME  || LOCATION_ID 
FROM 	DEPARTMENTS d 
;

/*
 EMPLOYEES 테이블에서 30번 부서 중 사원번호 이름과 담당 아이디를 연결하여 출력하여라. 
	(concat 사용)
*/
SELECT	CONCAT(CONCAT(DEPARTMENT_ID, LAST_NAME), MANAGER_ID)    	
FROM 	EMPLOYEES e  
WHERE 	DEPARTMENT_ID = 30
;

NVL()

널 값을 다른 데이터로 변경하는 함수를 말한다.

![](https://velog.velcdn.com/images/gwooroh23/post/a48d7bde-09c8-42ec-8501-938d589b8eff/image.png)

COMMISSION_PCT의 값을 0으로 맞춰주었으므로 모든 COMMISSION_PCT의 값은 0이 된다. 만일 10으로 지정한다면 모든 데이터 값이 10으로 고정

case() : else if 문과 같은 역할 함수
SELECT	FIRST_NAME , LAST_NAME ,DEPARTMENT_ID 
	,	CASE WHEN DEPARTMENT_ID = 20 THEN 'MA' 
			 WHEN DEPARTMENT_ID = 60 THEN 'IT'
			 WHEN DEPARTMENT_ID = 90 THEN 'EX'
			 ELSE ''
		END "department"
FROM 	EMPLOYEES e 
;

코드에 나와있는대로 DEPARTMENT_ID의 값에 따라 department값을 지정한다.

  • 파생문제
  SALARY+SALARY*nvl(COMMISSION_PCT ,0) 이 10000이상이면, 'good' 
 * 			5000 이상이면, 	'average', 
 * 			1이상 5000미만이면 'bad' 
 * 			0이면 no good 로 평가하고  
	EMPLOYEE_ID ,FIRST_NAME , SALARY ,COMMISSION_PCT, 
	 SALARY+SALARY*nvl(COMMISSION_PCT ,0) 평가를 출력해라.
 */
SELECT 	EMPLOYEE_ID , FIRST_NAME , SALARY , COMMISSION_PCT 
	,	SALARY + SALARY * nvl(COMMISSION_PCT, 0) AS sal
	,	CASE 
		WHEN SALARY + SALARY * nvl(COMMISSION_PCT, 0) >= 10000 THEN 'good'
		WHEN SALARY + SALARY * nvl(COMMISSION_PCT, 0) >= 5000 THEN 'average'
		WHEN SALARY + SALARY * nvl(COMMISSION_PCT, 0) >= 1 	THEN 'bad'
		WHEN SALARY + SALARY * nvl(COMMISSION_PCT, 0) = 0 	THEN 'no good'
	END AS grade	
FROM 	EMPLOYEES e
ORDER BY sal
;

Group By

데이터를 그룹핑해서 그 결과를 가져오는 경우 사용한다.집계함수와 짝을 이루어 사용할 수 있다.

EMPLOYEES 테이블에서 부서 인원이 4명보다 많은 부서의 부서번호, 
-- 인원수, 급여의 합을 구하여 출력하여라
SELECT DEPARTMENT_ID,COUNT(EMPLOYEE_ID),SUM(SALARY)
FROM EMPLOYEES e 
HAVING COUNT(EMPLOYEE_ID)>=4
GROUP BY DEPARTMENT_ID 
ORDER BY DEPARTMENT_ID ;
--

>  where문이 아닌 having을 쓴다는 점을 기억해야 할 것



매니저의 사번 및 그 매니저가 관리하는 직원들 중
-- 최소 연봉을 받는 사원의 연봉을 조회한다.
-- 매니저가 없는 사람들은 제외한다.
-- 최소 연봉 기준 역순으로 조회한다.
SELECT *
FROM EMPLOYEES e;
SELECT MANAGER_ID ,MIN(SALARY)
FROM EMPLOYEES e
WHERE MANAGER_ID IS NOT NULL
GROUP BY MANAGER_ID
ORDER BY MIN(SALARY) DESC
;


profile
초보 개발자 이야기

2개의 댓글

comment-user-thumbnail
2023년 7월 19일

좋은 글 잘 읽었습니다, 감사합니다.

1개의 답글