SELECT 쿼리의 좋은 습관
쿼리의 대부분은 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, 기획자, 사업팀 등등 이 찾아오는 수가 있다 ㅠㅠ.