데이터 분석/DB & SQL

SELECT 쿼리의 좋은 습관

haloaround 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

 

SQL Data Types for MySQL, SQL Server, and MS Access

SQL Data Types for MySQL, SQL Server, and MS Access The data type of a column defines what value the column can hold: integer, character, money, date and time, binary, and so on. SQL Data Types Each column in a database table is required to have a name and

www.w3schools.com

 

 

데이터타입 변환 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

 

CAST - InterSystems SQL Reference - InterSystems IRIS Data Platform 2019.1

DATE: A string of the format 'yyyy-mm-dd' can be cast to DATE. This string format corresponds to ODBC date format. Value and range checking are performed; the input date value must be a valid date. Missing leading zeros in month and day fields are added. I

irisdocs.intersystems.com

 

 

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, 기획자, 사업팀 등등 이 찾아오는 수가 있다 ㅠㅠ.