목록전체 글 (122)
기록
SELECT goods_id, goods_name, sell_price, buy_price FROM Goods ORDER BY buy_price, sell_price DESC; 오름차순 : ASC (디폴트값) 내림차순 : DESC SELECT 이후에 실행되기 때문에 별명 사용 가능 실행 순서 : FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY 집약 함수도 ORDER BY구에 이용 가능 SELECT goods_classify, COUNT(*) FROM Goods GROUP BY goods_classify ORDER BY COUNT(*)
집약한 결과가 정확히 2행인 그룹만 선택하려면 어떻게 해야할까? 조건 지정이라 하면 WHERE구가 바로 떠오를 수 있다. 하지만 WHERE구는 어디까지나 레코드(행) 선택을 위한 조건만 지정할 수 있기 때문에 그룹에 대한 조건 지정으로는 사용할 수 없다. ex) 포함되는 행 수가 2행, 평균 값이 500 이런 그룹에 대한 조건 지정을 위한 기능이 HAVING 구이다. SELECT goods_classify, COUNT(*) FROM Goods GROUP BY goods_classify HAVING COUNT(*) = 2; SELECT goods_classify, AVG(sell_price) FROM Goods GROUP BY goods_classify HAVING AVG(sell_price) >= 250..
지금까지 봐온 집약함수는 전체 테이블을 집약 범위로 계산했다. 이번에는 테이블을 몇 개의 그룹으로 나누어서 집약해 보도록 하자. 즉, 상품분류별이나 등록일별 등으로 집약하는 것을 의미한다. 우리말로는 ~마다, ~별, ~단위 등으로 자주 표현된다. 이때 사용하는 도구가 GROUP BY 구다. 우리말로 표현하면 '~에 의해 그룹을 나눈다'는 의미이다. 예를들어, 상품분류별로 행 수를 계산해보도록 하자. SELECT goods_classify, COUNT(*) FROM Goods GROUP BY goods_classify; GROUP BY를 사용하지 않았을 때는 1행밖에 없던 결과가 이번에는 복수행으로 늘었다. GROUP BY구를 적용하지 않은 경우는 테이블을 전체의 하나의 그룹으로 보고 처리하는 반면, GR..
상품분류 레코드 중 중복을 제외한 값 종류의 수만 구하고 싶다면? 중복값을 제외하고 행 수를 계산하면 되는데, 이는 DISTINCT 키워드를 COUNT함수의 인수로 사용하면 된다. SELECT COUNT(DISTINCT goods_classify) FROM Goods; /* 결과 3 */ 이 때 DISTINCT는 반드시 괄호 안에 기술해야 한다. 먼저 goods_classify 열의 중복값을 제외한 후에 행 수를 계산하고 있기 때문이다. DISTINCT는 COUNT 함수 뿐만 아니라 집약함수라면 어디든지 사용할 수 있다. SELECT SUM(sell_price), SUM(DISTINCT sell_price) From Goods 오른쪽 합계가 왼쪽 합계보다 500원이 더 적은 결과가 나오는데, 이것은 판매..
나머지 네 가지 집약 함수의 사용법에 대해 알아보자. 구문은 기본적으로 COUNT함수와 동일하나, 언급했다시피 별표를 인수로 사용할 수 없다. [SUM 함수] 복수의 행으로부터 합계를 구하는 법을 알아보자. SELECT SUM(sell_price) From Goods; SELECT SUM(sell_price) AS 판매단가, SUM(buy_price) AS 매입단가 From Goods; 여기서, NULL은 0으로 치부되는게 아니라 처음부터 계산식에 포함되지 않는다. 집약함수는 NULL을 제외한다. 단, COUNT(*)만은 예외적으로 NULL을 포함한다. [AVG 함수] 복수의 행으로부터 평균 값을 구하는 법을 알아보자. SELECT AVG(sell_price) From Goods; (값의 합계)/(값의 ..
SQL로 데이터에 어떠한 처리나 계산을 하려면 '함수'라는 도구를 사용한다. SQL에는 다양한 집계함수가 마련되어 있지만, 우선 대표적인 다음의 다섯가지 함수가 있다. COUNT : 테이블 레코드 수(행 수)를 계산한다 SUM : 숫자열 데이터의 합계를 구한다 AVG : 숫자열 데이터의 평균을 구한다 MAX : 임의 열이 가진 데이터의 최댓값을 구한다 MIN : 임의 열이 가진 데이터의 최솟값을 구한다 이와 같은 집계용 함수를 집약함수라고 한다. 집약이란, '복수의 행을 하나의 행으로 모은다'라는 의미다. 실제로도 모든 집약함수는 복수 행을 입력 데이터로 받으며, 출력하는 데이터는 단일 행이다. [전체 행 수 계산하기] SELECT COUNT(*) FROM Goods; /* 8 */ COUNT() 안에 ..
'상품분류가 사무용품' 그리고 '등록일이 2019년 9월 11일 또는 2019년 9월 20일' 이 검색조건을 쿼리로 표현하면 다음과 같다. SELECT goods_name, goods_classify, register_date FROM Goods WHERE goods_classify = '사무용품' AND register_date = '2019-09-11' OR register_date = '2019-09-20'; 하지만 이를 실행하면 사무용품이나 주방용품 등 불필요한 요소까지 포함해버린다. AND연산자가 OR연산자보다 우선순위가 높기 때문이다. 따라서, 괄호를 이용하여 다음과 같이 수정한다. SELECT goods_name, goods_classify, register_date FROM Goods WH..
NULL인 행은 임의의 숫자에 대해 비교연산자를 수행해도 출력되지 않는다. ~~~~ where buy_price = NULL; 이 또한 잘못된 구문이다. SQL에는 NULL을 판별하기 위한 전용 연산자 IS NULL이 존재한다. select goods_name, buy_price From Goods where buy_price IS NULL; 실행 결과 goods_name buy_price 포크 볼펜 반대로, NULL이 아닌 행을 선택하고 싶은 경우에는 IS NOT NULL이라는 연산자를 사용한다. select goods_name, buy_price from Goods where buy_price IS NOT NULL; NULL인 행을 선택하려면 조건식(where절)에 IS NULL 연산자를 사용한다. ..
[산술연산자] SQL 문에도 계산식을 쓸 수 있다. 다음 SELECT 문은 각 상품의 두개분 가격을 "sell_price_X2" 열로 출력한다. select goods_name, sell_price, sell_price * 2 as "sell_price_X2" from Goods; SQL 문에서 사용 가능한 사칙연산 기호는 +, -, *, / 이다. NULL을 포함하는 연산은 무조건 결과가 NULL이 됨으로 주의. ex) 5 + NULL = NULL [비교연산자] =, (~와 같지않다), >=, >, '2'; 실행결과로는 3, 222가 출력된다. 문자열형 데이터의 대소를 비교할 때는 숫자와는 달리 '사전식 순서'가 적용된다. 사전식 순서로 나열하면 1, 10, 11, 2, 222, 3