데이터 무결성 검증을 위한 SQL Test 작성법
·
SQL
데이터 무결성(Data Integrity)은 데이터가 정확하고 일관되게 유지되는 것을 보장하는 개념이다.데이터 무결성이 깨지면 잘못된 정보가 시스템에 반영될 수 있어 비즈니스 의사결정에 큰 영향을 미칠 수 있다.1. 데이터 무결성이란?데이터 무결성은 크게 다음과 같은 네 가지 유형으로 분류된다.1.1 엔터티 무결성(Entity Integrity)각 행(row)의 기본 키(Primary Key, PK)는 반드시 고유해야 한다.예제 : users 테이블에서 중복된 id 값이 있는지 확인SELECT id, COUNT(*) FROM users GROUP BY id HAVING COUNT(*) > 1;테스트 목적 : 기본 키 id의 중복 여부 검증오류 발생 시 영향 : 중복된 키로 인해 참조 무결성이 깨질 수 있..
DB 쿼리가 느릴 때 확인해야 할 것
·
SQL
실무에서 쿼리 속도가 느릴 때 가장 먼저 확인해야 하는 것 중 하나는 인덱스입니다.이 글에서는 인덱스가 무엇인지, 실제 실무에서 어떻게 활용할 수 있는지, 정리해 보겠습니다.인덱스란?인덱스(INDEX) : 데이터베어스 테이블의 특정 컬럼에 대한 검색 속도를 높이는 자료구조 입니다.우리가 도서관에서 책의 목차를 활용해서 빠르게 찾듯이 특정 데이터를 빠르게 찾도록 도와주는 역할을 합니다.인덱스가 없는 경우SELECT * FROM users WHERE email = 'test@example.com';email 컬럼에 인덱스가 없다면 전체 테이블을 훑는 Full Table Scan 발생테이블이 수십만 건 이상이면 성능이 급격히 저하됨인덱스가 있는 경우CREATE INDEX idx_users_email ON us..
SQL에서 WHERE 1=1을 사용하는 이유는?
·
SQL
SQL 쿼리를 보다 보면 WHERE 1=1을 사용하는 경우를 종종 볼 수 있습니다.예를 들어, 다음 두 쿼리는 같은 결과를 반환합니다.SELECT * FROM user;SELECT * FROM user WHERE 1=1;그렇다면 굳이, WHERE 1=1을 추가하는 이유는 무엇일까요?WHERE 1=1을 사용하는 이유1. 동적 쿼리를 쉽게 조합하기 위해WHERE 1=1을 사용하면 동적으로 조건을 추가할 때 불필요한 WHERE 처리 로직을 줄일 수 있습니다.예를 들어, Python에서 검색 필터를 추가하는 코드가 있다고 가정을 하겠습니다.query = "SELECT * FROM user WHERE 1=1"if username: query += f" AND username = '{username}' "if..
[SQL] IN 과 JOIN의 대한 궁금중
·
SQL
실무에서 query문을 짜면서 구글링을 하다가 흥미로운 질문을 발견해 퇴근 후 집에와서 찾아봤습니다. 위 이미지를 보게되면 JOIN과 IN절은 만일 컬럼이 유니크하지 않다면 다른 결과값을 나온다고 설명합니다.그래서 IN절과 WHERE이 같은 결과값을 같기 위해서는 JOIN에 DISTINCT를 사용해서 중복 제거 후 사용해야한다는 겁니다. 그래서 직접 궁금해서 query문을 적어 진행해보았습니다. CREATE TABLE IF NOT EXISTS a ( col INT, data VARCHAR(50));CREATE TABLE IF NOT EXISTS b ( col INT);INSERT INTO a (col, data) VALUES(1, 'A'),(2, 'B')..
[SQL] Date Format 함수 (formatting parameter)
·
SQL
Format Description %j n번째 일(100, 365) %H Hour 시(00, 01, 24) 24시간 형태 %h Hour 시 (01, 02, 12) 12시간 형태 %T hh:mm:ss %S, %s Second 초 %p AP, PM %w Day Of Week (0, 1, 2) 0부터 일요일 %U Week 주(시작: 일요일) %u Week 주(시작: 월요일) %M Month 월(Janeary, February etc...) %m Month 월(01, 02, 03) %W Day of Week 요일 (Sunday, Monday etc...) %D Month 월 (1st, 2dn, 3rd) %Y Year 연도(1990, 2010, 2021) %y Year 연도(90, 10, 21) %a Day of..
[MYSQL] 함수 만들기 (FUNCTION)
·
SQL
쿼리문법 함수 만들기 CREATE FUNCTION [함수이름] ([입력값 이름][데이터 타입],...) RETURNS [결과값 데이터 타입] BEGIN DECLARE [임시값 이름][데이터타입]; SET [임시값 이름]=[입력값 이름]; QUERY; RETURN 결과 값 END 함수 지우기 DROP FUNCTION [함수 이름]; MYSQL Workbench에서 함수를 처음 생성하기 전에 SET GLOBAL log_bin_trust_function_creators = 1; 위 명령어를 사용해서 권한을 생성한 후 함수를 사용하셔야 합니다! 또한 DELIMITER // 함수의 시작 정의 CREATE FUNCTION [함수이름] ([입력값 이름][데이터 타입],...) RETURNS [결과값 데이터 타입] B..
[MYSQL] 자주 사용하는 날짜형 함수 정리
·
SQL
NOW NOW() 현재 날짜와 시간 반환 SELECT NOW(); CURRENT_DATE CURRENT_DATE() 현재 날짜 반환 SELECT CURRENT_DATE(); CURRENT_TIME CURRENT_TIME() 현재 시간 반환 SELECT CURRENT_TIME(); YEAR YEAR(날짜) 날짜의 연도 반환 SELECT YEAR(NOW()); MONTH MONTH(날짜) 날짜의 월 반환 SELECT MONTH(NOW()); MONTHNAME MONTHNAME() 날짜의 월을 영어로 반환 SELECT MONTHNAME(NOW()); DAYNAME DAYNAME(날짜) 날짜의 요일을 영어로 반환 SELECT DAYNAME(NOW()); DAYOFMONTH DAYOFMONTH(날짜) 날짜의 일 ..
[MYSQL] 자주 사용하는 숫자형 함수
·
SQL
ABS ABS(숫자) 숫자의 절대 값 반환 SELECT ABS(columns_name) FROM use_table; - 다만 ABS를 사용할 때 FLOAT 타입이며면 입력 값의 근사치를 저장 후 보여줍니다. CEILING CEILING(숫자) 숫자를 정수로 올림해서 반환 SELECT CEILING(column_name) FROM use_table; FLOOR FLOOR(숫자) 숫자를 정수로 내림해서 반환 SELECT FLOOR(column_name) FROM use_table; ROUND ROUND(숫자, 자릿수) 숫자를 소수점 자릿수까지 반올리해서 반환 만일 자릿수를 0 입력 시 소수점 없이 정수만 반환 SELECT ROUND(column_name, 1) FROM use_table; TRUNCATE T..
[MYSQL] 자주 사용하는 문자형 함수
·
SQL
LOCATE - LOCATE("A", "ABC") - "ABC"에서 "A"는 몇번째에 위체해 있는지 검색해 위치 반환 - 문자가 여러 개라면 가장 먼저 찾은 문자의 위치를 반환 - 만약 찾는 문자가 없다면 0을 반환 SELECT *, LOCATE('a', `name`) FROM Artist; SUBSTRING - SUBSTRING("ABC", 2) - "ABC"에서 2번재 문자부터 반환 - 만약 입력한 숫자가 문자열의 길이보다 크다면 아무것도 반환하지 않음 SELECT *, SUBSTRING(`name`, 5) FROM Artist; RIGHT - RIGHT("ABC", 1) - "ABC"에서 오른쪽에서 1번째 문자까지 반환 SELECT *, RIGHT(`name`, 1) FROM Artist; LEFT..