1. WITH문의 필요성 이미 작성된 Mapper에 Query를 살펴보다보면 subquery를 남발하여 작성된 쿼리를 볼 수 있다. subquery를 조건식에 한두번씩 사용하는 것이 아니라, 남발하게되면 가독성이 떨어지고 재사용이 불가능하여 같은 쿼리임에도 불구하고 재사용할 수가 없어 동일한 쿼리를 또 작성해놓은 어지러운 쿼리가 탄생하게 된다. 이를 해결할 수 있는 좋은 방법으로 WITH문이 존재한다. WITH문은 SQL에서 임시 결과 집합, 보통 이를 공통 테이블식(CTE: Common table Expression)이라 부르는 것을 생성하여 다른 쿼리에서 사용 할 수 있게해주는 아주 유용한 녀석이다. 게다가 ANSI SQL 표준을 만족하는 문법이므로 거의 모든 DBMS에서 사용가능하다. 2. WITH..
SQL - COALESCE COALESCE 함수는 ANSI SQL 표준의 일부로서 대부분의 SQL DBMS에서 지원하는 함수로서 NULL값을 처리하는데 사용된다. 사용 예시 SELECT COALESCE(email, phone, '연락처 정보 없음') AS contact_info FROM contacts; 위 쿼리는 contacts라는 테이블에서 email 컬럼의 값을 먼저 확인한다. email 값이 null이 아니라면 그 값을 contact_info로 반환하고 null인 경우에는 그 다음 인자인 phone의 값을 확인하고 마찬가지로 null이 아니라면 그값을 반환하고 null인 경우 마지막값인 '연락처 정보 없음'을 반환하게 된다. COALESE 함수의 장점 - 간결성 : 여러 CASE 조건을 사용하는 ..
SQL문의 쿼리실행은 크게 Parsing, Exexcution, Fetch의 세가지 단계로 나누어 볼 수 있다. 1. Parsing(구문분석) 단계 해당 단계에서는 SQL 쿼리문을 분석하여 구문을 해석하는 단계로서 DB는 해당 쿼리가 문법적으로 올바른지 확인하고 의미를 분석하는 단계이다. 이 과정에서 쿼리의 실행 계획도 생성하고 쿼리 최적화도 이루어진다. 2. Execution(실행) 단계 Parsing이 완료되면 파싱된 쿼리를 기반으로 실제 데이터를 검색하거나 조작하는 단계이다. FROM 절에서 명시한 테이블이나 뷰에서 데이터를 가져오고 WHERE절의 조건에 따라 행( ROW)를 필터하며, GROUP BY와 집계 함수를 사용하여 데이터를 그룹화하고 집계한다. 3. Fetch (검색) 단계 Executi..
MariaDB에서 Foreign key constraint is incorrectly formed 에러가 나는 이유는 주로 다음과 같다. 1. 참조하는 테이블이 존재하지 않는 경우 외래 키 제약 조건을 만들 때 참조하는 테이블이 존재하지 않으면 해당 에러가 발생할 수 있다. 2. 참조하는 테이블 간에 데이터 타입이나 인코딩(charset), 정렬 방식, 참조하는 컬럼의 길이가 일치하지 않는 경우 발생 위 이미지에서 만약에 참조 테이블인 test.sys_id 의 테이블의 sys_id라는 컬럼의 조합이 utf8mb4_general_ci 가 아니거나 데이터 타입이 VARCHAR가 아니거나 길이가 50이 아닐 경우 발생할 수 있다. 3. 인덱스가 없는 경우 외래 키 제약 조건을 만들 때 참조하는 컬럼에 인덱스가..
https://teambtd.tistory.com/5 MySQL 접속 원리에 관한 고찰(feat. 프로젝트) 어우 솔루션에 VIEW 테이블을 가지고 있어서 이놈 저놈 오픈해 달라는 요청이 많다. 어쨋든, DB에 접근하는 방법은 다양하다. - 접속 Tool 의 활용 (PLSQL, Toad, Orange, dbeaver, HeidiSQL, SQL Developer 등등...) - teambtd.tistory.com 리눅스에 yum이나 apt로 설치하는게아니라 압축파일을 직접풀어서 mariadb를 설치하면서 실행 sock링크를 걸어줘야 한다고했는데 ln -s /apps/mariadb/tmp/mysql.sock /tmp/mysql.sock 이런식으로 심볼릭링크를 걸어주는데 ( 심볼릭링크는 바로가기와 비슷한 개념..
SQL에서 INESERT문을 작성할 때 해당 테이블에 특정 데이터가 없을 때에만 값을 집어넣는 쿼리문을 짜야할 때가 있다. 이때 자연스럽게 작성되는 문장으로 INSERT INTO TBL(col1, col2, col3) VALUSE(col1val, col2val, col3val) WHERE NOT EXISTS SELECT(없어야 할 데이터값 조회 조건) 뭐이런식으로 작성할 수 있는데 이때 VALUES를 지원하지 않는 문제가 있는것 같다. SQL - 더미 테이블 DUAL DUAL이라는 더미 테이블 즉, 가상의 테이블을 통해서 함수에 대한 쓰임을 알고 싶은데 특정 테이블을 생성하기 귀찮은 경우가 있는데 이때 DUAL테이블을 이용할 수도 있고 이 포스팅에서는 INSERT문에서 VALUES 대신에 사용하기도 한다..