컬럼에 있던 데이터만 갖고 정직하게 입출력하는 것은 이제 슬슬 ‘시시’해서 죽고 싶어졌다…
컬럼에 있던 데이터들을 사칙연산으로 조작해서 출력하는 것도 ㅆㄱㄴ
그래서 오늘은 컬럼에 있던 데이터들을 회사에서도 내 입맛으로 조작해서 출력하여 조작으로 쇠고랑 차는 법을 알아봅시다.
컬럼에 사칙연산 가능
저번 포스팅에서 ‘사용금액’이란 컬럼이 있었습니다.
근데 그 금액에는 10% 부가세가 포함되어 있기 때문에
부가세를 제외한 사용 금액만 출력하고 싶으면 어떡할까여
엑셀이면 = 옆의 컬럼 *0.9라고 쳤을텐데…
SQL도 비슷합니다.
SELECT 사용금액 * 0.9 FROM card
그냥 컬럼명에 냅다 0.9 곱해버리면 됩니다.
그럼 사용금액에 0.9를 곱한 것이 출력됩니다.
당연히 동시에 여러컬럼도 ㄱㄴ하고 as도 마음대로 쓸 수 있습니다.
SELECT 사용금액 * 0.9 as 부가세제외, 연체횟수 + 100 FROM card
덧 + / 곱 * / 뺄 - / 나 /
컬럼끼리의 연산도 가능
고객의 ‘결제 당 평균 사용금액’을 출력하고 싶습니다. 어째해야할까요?
간단합니다. 사용금액 / 결재횟수 하면 됩니다.
야무지게도 SQL에서는 컬럼끼리의 사칙연산도 가능합니다.
SELECT 사용금액 / 결재횟수 FROM card
문자 덧셈도 가능
사칙연산은 숫자가 들어있는 컬럼만 적용이 가능합니다.
그럼 문자컬럼이 슬프잖아요. 할 수 있는게 없으니까.
ㄴㄴ 걱정마세요 문자끼리는 양옆을 이어 붙일 수 있습니다.
졸작을 하던 중 우병씨가 ‘님아 사업장명으로만은 위치가 어딘지 알기힘드니까 시군구명이랑 사업자명을 붙여서 알려줘’ 이랬습니다.
예를 들어서 ‘강릉시’ + ‘하슬라아트월드’ 이렇게 컬럼에 있는 문자 2개를 이어 붙여서 출력하고 싶은겁니다.
참으로 어려운 부탁이네요.
하지만 저 국나뇽? 간단합니다.
문자 합치기용 ‘CONCAT()’ 함수를 이용하면 됩니다.
SELECT CONCAT(시군구명, 사업장명) FROM 강원도_관광숙박업_현황;
놀랍군요… 숫자만 덧셈할 수 있는게 아니였습니다.
SELECT CONCAT(시군구명,'에 있는 ', 사업장명) FROM 강원도_관광숙박업_현황;
- CONCAT() 안에 여러 문자들을 집어넣을 수 있습니다.
- 컬럼 이름말고 직접 문자를 입력할 수 있습니다.
- 숫자 입력해도 문자열로 인식해 합쳐줍니다.→ 원하는 문장 출력 완료
꿀팁 하나 드리자면 보통 mysql, mariaDB는 CONCAT()쓰는데 그 외 postgreSQL, oracle 등의 dbms는 || 시호를 사용해서 보통 문자를 많이 합칩니다. (+ 기호 쓰는 것도 있습니다.)
문자 공백제거 가능
문자 데이터에 쓰잘데기 없는 좌우 공백이 있을 수 있는데 TRIM()이란 것을 써준다면 좌우 공백이 제거됩니다.
SELECT TRIM(컬럼명) FROM 테이블
REPLACE()
SELECT REPLACE('서울에사는 서울맨', '서울', '경기')
문자열 대체도 가능한데요.
REPLACE(바꿀문자, 이걸찾아서, 이걸로바꿔주셈여) 채워주면 됩니다.
위 쿼리를 날리면 ‘경기에 사는 경기맨’이 출력됩니다.
SUBSTR()
SELECT SUBSTR('abcdef', 3, 2)
원하는 문자를 뽑을 수 있습니다.
SUBSTR(문자, 몇번째부터, 몇자)인데요.
위 쿼리는 ‘cd’가 출력되겠군여.
INSERT()
SELECT INSERT('test@naver.com', 1, 4, 'hello')
문자의 일부를 다르게 교체할 수 있습니다.
INSERT(바꿀문자, 몇번째부터, 몇자를, 이걸로바꾸삼) 입니다.
위 쿼리는 ‘hello@naver.com’이 출력됩니다.
PostgreSQL은 OVERPLAY()를 씁니다.
결론
암튼 결론은 DBMS에선 문자나 숫자데이터를 원하는 입맛에 맞게 변형해서 출력할 수 있는데여 이 함수는 거의 60개에 달한다고 합니다.
이것을 몽땅다 외우는 것은 인생 낭비입니다.
“컬럼에 있던 데이터를 내 맘대로 조작해서 출력이 가능하구나” 이정도 느낌으로 가도 괜찮습니다.
어차피 우리는 구글이형이 있기때문에 ‘MySQL 문자 공백제거’ 필요할 때 이렇게 검색하는게 좋습니다.
실습
1. ‘도로명전체주소’에 있는 모든 공백을 제거해서 출력하려면 어케할까요?
SELECT REPLACE(도로명전체주소, ' ', '') FROM 강원도_관광숙박업_현황;
Good
2. 끝에 4글자만 출력하는 쿼리는?
SELECT SUBSTR(전화번호, 9, 4) FROM 고객정보
도 쓸 수 있지만
SELECT RIGHT(전화번호, 4) FROM 고객정보
RIGHT()이거쓰면 자로 맨뒤 4자리 출력됩니다.
어떻게 알았냐고요?
구글에 나와있는데요.
숫자 조작하는 SQL
GREATEST / LEAST
SELECT GREATEST(5, 3, 2, 1, 4);
SELECT LEAST(5, 3, 2, 1, 4);
여러 숫자들을 입력하면 최댓값, 최솟값을 하나씩 뽑아줍니다.
전에 했던 MAX(), MIN()은 하나의 컬럼에서 최대 최소를 뽑아주는데,
GREATEST/ LEAST 하나의 행이나 숫자 배열 안에서 최대, 최소를 뽑아줍니다.
FLOOR / CEIL
FLOOR 소수 부분 내림해서 정수로 바꿔주고
CEIL 소수부분 올림해서 정수로 바꿔줍니다.
정수말고 소수로 이루어진 데이터를 출력할때 용이하겠네욤
ROUND / TRUNCATE
SELECT ROUND(10.777, 2);
SELECT TRUNCATE(10.777, 2);
둘다 소숫점 부분을 반올림/내림할때 쓰는데요
ROUND는 입력한 자릿수까지 반올림해주고, — 10.78
TRUNCATE는 입력한 자릿수까지 내림해줍니다. — 10.77
POWER
숫자를 거듭제곱하고 싶을때
ABS
절댓값
대충 머 이런게 있습니다.
외울필요는 없고 필요할때 ‘ZION T - 꺼내먹어요’
'DI(Digital Innovation) > DataBase & SQL 뽀개기' 카테고리의 다른 글
GROUP BY 뽀개기 (0) | 2024.02.19 |
---|---|
서브쿼리 뽀개기 (0) | 2024.02.19 |
국가 권력급 집계함수로 통계내기 (0) | 2024.02.19 |
WHERE 완벽정리 (0) | 2024.02.19 |
데이터 출력하고 정렬 & 필터륑 (1) | 2024.02.07 |