-
SELECT 쿼리의 좋은 습관데이터 분석/DB & SQL 2019. 5. 5. 12:54
쿼리의 대부분은 SELECT 조회 쿼리이다.
요새는 기획자들도 Hue 를 통해 DB 에 접근하고 SELECT 쿼리를 실행하기도 한다. 나 같은 초심자를 위해 SELECT 쿼리를 작성할 때의 좋은 습관과 주의사항을 정리해보았다.
SELECT 문을 위한 좋은 습관 - 쿼리문에 따라 성능이 좌지우지 된다.
쿼리문에 따라 성능이 좌지우지 된다. 심지어 아주 가끔은 잘못 쓰면 DB가 사망하는 경우가 가끔 있다.
--- 위보다는 아래처럼 SELECT * FROM easy_drinks; SELECT drink_name, main, second FROM easy_drinks; --- 전체 필드를 보고 싶다면, 행을 줄여서 SELECT * FROM easy_drinks limit 10; --- WHERE 조건은 다음 라인에 SELECT drink_name, main, second FROM easy_drinks WHERE main = 'soda';
데이터타입 DataType : 숫자는 작은 따옴표를 안 쓰고, 나머지는 작은 따옴표를 쓴다.
숫자 Numeric : INT, DEC
문자열 String : CHAR, VARCHAR, BLOB
날짜시분초 Dates : DATE, DATETIME, TIMESTAMP
더 자세한 DataType: https://www.w3schools.com/sql/sql_datatypes.asp
데이터타입 변환 Cast 와 Convert
가끔 숫자를 나타내는 필드인데, 문자열 string 으로 저장하는 경우가 있다. 이럴 때는 cast 가 필요하다.
--- 해당 필드 또는 값의 문자열을 INT 로 형변환 해주세요. CAST ('100' AS INT) CAST (amount AS INT) --- 이렇게 소수점 값을 정수형으로 변환하면 시스템에 따라 100 으로 소수점을 자르기도 하고, NULL 로 실패를 알리기도 한다. CAST ('100.32' AS INT) --- CONVERT 도 있다. CONVERT(INT, 25.65); 25 CONVERT(datetime, '2017-08-25'); 2017-08-25 00:00:00.000
Cast 를 잘못하면 데이터를 왜곡하기도 하고, NULL 로 표시하기도 한다.
어플리케이션마다 데이터타입 변환이 실패했을 때 제공되는 결과값이 다를 수 있다. 주의!Cast 에 대한 자세한 글: https://irisdocs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=RSQL_cast
NULL 처리
NULL 은 0 이나 '' 가 아니다. NULL 은 연산이 불가하다. 즉, 연산을 방해하는 존재이다. COALESCE 는 NULL 에 대해서 어떤값으로 치환해서 연산할 지를 정의해주는 함수이다. 또는 ISNULL 함수도 쓸 수 있다. 첫번째 인자가 NULL 이면 두번째 인자로 치환한다.
--- exp 가 NULL 이면 arg1 으로 치환한다. COALESCE (exp, arg1); ISNULL (exp, arg1); SELECT COALESCE (amount, 0); SELECT COALESCE (email, 'none'); SELECT ISNULL (amount, 0); SELECT ISNULL (email, 'none');
※ COALESCE 코알레스 (Co-al-lesce ) 저걸 써놓고 못 읽어서, 찾아본 발음
마지막, DB 에 접근하기 전 마음가짐
절대 DB 쿼리 질의해놓고 자리를 비우지 말자. 쿼리가 지나치게 오래 걸리면, 중단시키자. 그리고 쿼리를 검토하기도 전에 ; 를 써놓지 말자. (가끔 WHERE 절 안넣고 엔터 눌러서 고생하지 않으려면) 데이터를 다루는 일은 조심해야한다.
절대 방심하지 말자. 잘못하면 DBA, 기획자, 사업팀 등등 이 찾아오는 수가 있다 ㅠㅠ.
'데이터 분석 > DB & SQL' 카테고리의 다른 글
[data.world] 비개발 직군을 위한 데이터 솔루션 (0) 2020.04.18 HackerRank Mysql 문제풀이 - Binary Tree Nodes (0) 2019.12.15 hackerrank mysql Occupations 문제풀이 (0) 2019.12.15 서브쿼리 Sub Query - 상관쿼리와 비상관쿼리 (0) 2019.05.12 DB 와 SQL 공부를 시작하며 - DB와 엑셀 비교 (0) 2019.05.05