문제
https://teamsparta.notion.site/2-flex-1102dc3ef5148108b390fcaad7a5b909
5. products 테이블에서 제품 이름(product_name)과 가격(price)만을 선택하는 쿼리를 작성해주세요.
SELECT product_name, price FROM products; |
6. products 테이블에서 제품 이름에 '프로'가 포함된 모든 제품을 선택하는 쿼리를 작성해주세요.
SELECT * FROM products WHERE product_name LIKE '%프로%'; |
7. products 테이블에서 제품 이름이 '갤'로 시작하는 모든 제품을 선택하는 쿼리를 작성해주세요.
SELECT * FROM products WHERE product_name LIKE '갤%'; |
8. products 테이블에서 모든 제품을 구매하기 위해 필요한 돈을 계산하는 쿼리를 작성해주세요.
SELECT SUM(price) FROM products; |
풀이
5번
특정 문자열 포함 여부 확인 LIKE 연산자, REGEXP 연산자, INSTR 함수
LIKE 연산자 : 조건절(WHERE)에서 특정 문자열이 포함된 데이터를 찾을 때 사용합니다.
SELECT 컬럼 FROM 테이블이름 WHERE 컬럼 LIKE '%문자열%';
LIKE 연산자는 true, false를 반환하므로 CASE 표현식과 PL/SQL의 IF 문에서도 사용이 가능합니다.
1) 특정 문자로 시작하는 데이터 검색
SELECT 컬럼 FROM 테이블이름 WHERE 컬럼 LIKE '문자열%';
2) 특정 문자로 끝나는 데이터 검색
SELECT 컬럼 FROM 테이블이름 WHERE 컬럼 LIKE '%문자열';
3) 특정 문자를 포함하는 데이터 검색
SELECT 컬럼 FROM 테이블이름 WHERE 컬럼 LIKE '%문자열%';
4) 복수의 특정 문자를 포함하는 데이터를 검색
SELECT 컬럼 FROM 테이블이름 WHERE 컬럼
LIKE '%문자열1%' OR 컬럼 LIKE '%문자열2%';
REGEXP 연산자 : 복수의 특정 문자를 포함하는 데이터를 검색합니다. (특정 문자열을 '|' 를 기준으로 구분)
SELECT [필드명] FROM [테이블명] WHERE [필드명]
REGEXP '문자열1|문자열2';
INSTR 함수 : 특정 문자열이 포함된 위치를 반환 하므로 특정 문자열을 자를 때 사용합니다.
SELECT [필드명] FROM [테이블명] WHERE INSTR([필드명] LIKE '문자열');
INSTR 함수는 특정 문자열을 찾은 위치를 정수형(숫자)으로 반환합니다. (문자열을 찾으면 1이상, 못 찾으면 0)
8번
합계 구하는 SUM 함수
※ ‘AS sum_000’에서 ‘sum_000’은 해당 열이 필요하거나 생성되는 것이 아니라 단순히 결과 집합에서 계산된 값에 대한 별칭을 지정한 것뿐이다.
1) 합계 구하기
SELECT SUM(컬럼) FROM 테이블 이름;
2) 조건 있는 데이터 합계
SELECT SUM(컬럼) FROM 테이블 이름 WHERE job = 'SALESMAN’; -- job이 'SALESMAN’인 경우 컬럼의 값을 합하여 출력합니다. |
SELECT SUM(sal) AS sum_sal , SUM(comm) AS sum_comm , SUM(sal) + SUM(comm) AS sum_total FROM emp WHERE job = 'SALESMAN -- 직업(job)이 "SALESMAN"인 직원의 급여(sal)와 성과급(comm)의 합계를 출력합니다. |
3) 그룹별 합계 구하기
GROUP BY 절을 사용하지 않으면 집계 함수(SUM)만 SELECT 절에 사용할 수 있습니다.
SELECT 절에 일반 칼럼(job)을 같이 사용하려면 GROUP BY 절을 사용해서 그룹으로 집계를 해야 합니다.
SELECT 컬럼1, SUM(컬럼2) AS sum_컬럼2 FROM 테이블이름 GROUP BY 컬럼1 -- 컬럼1에 따라 그룹을 지어 각 그룹에 속하는 컬럼2의 합계를 계산하고, 그 결과를 보여줍니다. |
SELECT job , SUM(sal) AS sum_sal , SUM(comm) AS sum_comm , ISNULL(SUM(sal), 0) + ISNULL(SUM(comm), 0) AS sum_total FROM emp GROUP BY job; -- 직업(job)별로 급여(sal)와 성과금(comm)의 합계를 계산하고, 그 값을 합산하여 직업별로 결과를 보여줍니다. |
4) 분석함수를 사용하여 합계 구하기 (OVER 절) : 값을 테이블의 각 행마다 표시합니다
SELECT empno, ename, job, sal, SUM(sal) OVER() AS sum_sal FROM emp WHERE job = 'SALESMAN’ -- 조회된 데이터의 급여(sal) 총합계를 구하여 각 행에 표시합니다. |
SELECT empno, ename, job, sal, SUM(sal) OVER(PARTITION BY job) AS sum_sal FROM emp WHERE job IN ('MANAGER', 'SALESMAN') -- 조회된 데이터에서 직업(job)별로 급여(sal)를 합산하여 총합계를 직업(job)에 맞게 각 행에 표시합니다. |
※문자열 합치기 STRING_AGG() 함수 : LISTAGG() 함수와 비슷한 기능을 수행합니다.
STRING_AGG("합칠컬럼명", "구분자") WITHIN GROUP(ORDER BY "컬럼명")
STRING_AGG 함수는 GROUP BY 절과 함께 사용해야 합니다.
ORDER BY 절을 사용하여 정렬이 가능하며 ORDER BY 절은 생략할 수 있습니다.
1) 기본 사용법
SELECT job, STRING_AGG(ename, ',') enames FROM emp WHERE job IN ('MANAGER', 'SALESMAN') GROUP BY job -- job이 MANAGER인 ‘ename’열의 문자열을 사이에 ‘,’로 구분지어 출력하고 'SALESMAN'인 경우도 모아서 출력합니다. |
2) 컬럼 값을 정렬하여 합치는 방법
SELECT job, STRING_AGG(ename, ',') WITHIN GROUP(ORDER BY ename) enames FROM emp WHERE job IN ('MANAGER', 'SALESMAN') GROUP BY job -- 기본사용법 결과가 문자열의 글자 순으로 배열되어 출력됩니다. |
'내일배움 과제 > 기타 과제' 카테고리의 다른 글
걷기반 SQL - 6) 팀 프로젝트 열심히 했으니 다시 놀아볼까요?! (0) | 2024.10.18 |
---|---|
걷기반 SQL - 5) 공부하다보니 팀 프로젝트 시간이 왔어요! (0) | 2024.10.17 |
걷기반 SQL - 4) 이제 놀만큼 놀았으니 다시 공부해봅시다! (0) | 2024.10.17 |
걷기반 SQL - 3) 상품 주문이 들어왔으니 주문을 처리해봅시다! (0) | 2024.10.17 |
걷기반 SQL - 1) 돈을 벌기 위해 일을 합시다! (0) | 2024.10.16 |