목록전체 글 (119)
기록
오늘자 포스팅 중 틀린 데이터 값이 있어서 바꿔줬다. update Goods set sell_price = 100 where goods_id = '0008'; ㅡ 합계 행을 함께 구하고 싶다 SELECT문 2번 사용 후 UNION ALL로 합치는 방법도 있지만, 외형적으로 보기 좋지 않고 DBMS 내부 리소스도 높아지는 방법이다. GROUPING 연산자로 집약 단위가 다른 집약 결과를 간단하게 구할 수 있다. GROUPING 연산자에는 다음 세 가지 종류가 있다. - ROLLUP - CUBE - GROUPING SETS ㅡ ROLLUP 사용법 -- ROLLUP으로 합계 행과 소계를 함께 구한다. select goods_classify, sum(sell_price) as 합계 from goods group..
윈도우 함수의 출력 형식에 대한 주의점이 있다. 바로 레코드의 정렬 순서다. 윈도우 함수를 사용할 때 OVER 구 안에 ORDER BY 구를 사용하기 때문에 이 ORDER BY에서 지정한 순서로 정렬된다고 착각할 수 있다. OVER 구 내의 ORDER BY는 단지 윈도우 함수가 어떤 순서로 계산할지 결정하기 위한 것으로, 출력 순서에는 영향을 끼치지 않는다. select goods_name, goods_classify, sell_price, rank() over (order by sell_price) as 랭킹 from Goods; DBMS에 따라 다르지만, 이 SELECT문의 출력 결과의 정렬 순서는 보장되지 않는다. 그렇다면 랭킹 열을 오름차순으로 제대로 정렬하려면? 간단하다. select 문 마지막..
ㅡ 집약 함수를 윈도우함수로 사용 집약함수를 윈도우함수로 사용하는 방법을 알아보자. 모든 집약함수는 윈도우함수로 사용할 수 있으며, 구문은 윈도우 전용 함수를 사용할 때와 동일하다. -- SUM함수를 윈도우 함수로 사용. select goods_id, goods_name, sell_price, SUM (sell_price) OVER (ORDER BY goods_id) AS 누적합계 from Goods; 지금까지처럼 집계 대상이 되는 열을 인수로 지정한다, 다만 단순한 합계가 아니다. 일반적으로 '누계'라 부르는 방식의 집계 방법으로, 시계열 순으로 그때그때의 매출 금액의 총액을 산출할 때 자주 사용하는 방법이다. -- AVG 함수를 윈도우함수로 사용 select goods_id, goods_name, s..
윈도우 함수는 OLAP 함수라고도 한다. OLAP란, OnLine Analytical Processing의 약자로, 데이터베이스를 사용한 실시간(온라인) 데이터 분석처리다. 윈도우 함수는 이 OLAP 용도로 사용하기 위해 표준 SQL에 추가된 기능이다. MySQL은 아직도 윈도우 함수를 지원하고 있지 않다.. 윈도우 함수로 사용할 수 있는 대표적 함수 (1) 집약함수(SUM, AVG, COUNT, MAX, MIN)를 윈도우 함수로 사용 (2) RANK, DENSE_RANK, ROW_NUMBER 등의 윈도우 전용 함수 윈도우 함수 구문 OVER ( PARTITION BY ORDER BY ) 중요한 키워드는 PARTITION BY와 ORDER BY다. 이 두가지의 역할을 이해하는 것이 윈도우 함수를 이해하는..
지금까지 다음 네 가지 집합 연산자를 학습했다. - UNION (합) - EXCEPT (차) - INTERSECT (교차) - CROSS JOIN (직적) 나눗셈도 집합 연산에 존재한다. 집합 연산의 나눗셈은 일반적으로 관계 나눗셈이라고 한다. SELECT DINSTINCT emp FROM EmpSkills AS ES1 WHERE NOT EXISTS -- 차가 존재하지 않아야 한다 (SELECT skill FROM Skills EXCEPT SELECT skill FROM EmpSkills AS ES2 WHERE ES1.emp = ES2.emp); 나눗셈은 집합 연산 중 가장 까다로운 연산이다. 하지만 실무에서 의외로 사용하는 경우가 많으며, 중급으로 올라가기 위해서는 마스터해야하는 기술이다.
앞서 배운 집합연산은 행 지향 연산이다. 이들 집합연산을 사용하면 행이 늘거나 줄어든다. 한편, 이 집합연산들에는 열 수를 변화시킬 수 있는 힘이 없다. 집합 연산 대상의 테이블은 열 수가 일치한다는 것을 전제로 하기 때문이다. 이번 포스팅에서 배울 결합(JOIN)이라는 연산은, 다른 테이블에서 열을 가지고와 열을 늘리는 처리다. 내부 결합 ㅡ INNER JOIN (내부의 정보만 가지고 결합) 가장 자주 쓰이는 결합이다. SELECT a.store_id, a.store_name, a.goods_id, b.goods_name, b.sell_price FROM StoreGoods AS a INNER JOIN Goods AS b ON a.goods_id = b.goods_id WHERE a.store_name..
집합 연산이란? 데이터베이이스에서의 집합은 레코드의 집합을 의미한다. 집합 연산은 레코드끼리 더하거나 빼는, 이른바 레코드 사칙연산이다. 이번 포스팅에서는 테이블 덧셈과 뺄셈을, 다음 포스팅에서는 테이블 결합을 배워보자. 테이블 덧셈 ㅡ UNION (합집합) UNION은 레코드 덧셈을 수행하는 집합연산자이다. SELECT goods_id, goods_name FROM Goods UNION SELECT goods_id, goods_name FROM Goods2 ORDER BY goods_id; UNION 뿐만 아니라 모든 집합 연산자는 중복 행을 제외한다. 집합 연산의 주의사항 1) 연산 대상이 되는 레코드의 열 수가 같아야 한다. (에러 발생) 2) 덧셈 대상이 되는 레코드의 열이 같은 데이터형일 것 (..
CASE식은 명칭이 가르키듯이 경우 구분을 기술할 때 사용한다. 프로그래밍에서는 '조건 분기'라고 칭한다. CASE 식 구문에는 단순 CASE식과 검색 CASE식이 있다. 먼저 검색 CASE구문을 살펴보자. CASE WHEN THEN WHEN THEN WHEN THEN ... ELSE END WHEN 구의 이란, '열=값'과 같이 반환값이 진리값이 되는 식을 말한다. =, !=, LIKE, BETWEEN 같은 술어를 사용해서 만든 식이라고 보면 된다. 실제로 사용해보자. SELECT goods_name, CASE WHEN goods_classify = '의류' THEN CONCAT('A:', goods_classify) # THEN 'A:' || goods_classify WHEN goods_classi..
술어란 ? 반환값이 진리값인 함수 (TRUE/FALSE/UNKWOUN) 대표적인 술어는 다음과 같다 - LIKE - BETWEEN - IS NULL, IS NOT NULL - IN - EXISTS LIKE 술어 : 문자열 부분 일치 검색 전방일치 - 검색조건이 되는 문자열이 검색 대상 문자열의 가장 앞에 위치하고 있는 레코드만 검색 SELECT * FROM SampleLike WHERE strcol LIKE 'ddd%'; 중간일치 - 검색 조건이 되는 문자열이 검색 대상 문자열의 '어딘가'에 포함되어 있으면 레코드가 선택됨 (가장 앞, 가장 뒤, 중간 모두 상관없음) SELECT * FROM SampleLike WHERE strcol LIKE '%ddd%'; 후방일치 - 검색조건이 되는 문자열이 문자열 ..
CURRENT_DATE - 현재 날짜 이 함수가 실행된 날을 반환 값으로 출력한다. 인수가 없기 때문에 괄호가 필요 없다. SELECT CURRENT_DATE; CURRENT_TIME - 현재 시간 함수가 실행된 시간을 취득한다. 인수가 없어서 괄호가 필요 없다. SELECT CURRENT_TIME; CURRENT_TIMESTAMP - 현재 일시 현재날짜와 현재시간 기능을 합친 기능을 가진 함수다. 취득한 결과로부터 날짜나 시간만 잘라낼 수도 있다. SELECT CURRENT_TIMESTAMP; EXTRACT - 날짜 요소 추출하기 날짜 데이터에서 일부분을 추출하는 것으로, 예를 들어 '년', '월' 또는 '시간'이나 '초'만 추출할 때 사용한다. 반환형은 날짜형이 아닌 숫자형이 된다. SELECT CU..