SQL NULL 값 설명: IS NULL, COALESCE, NULLIF 및 피해야 할 함정
NULL은 오류 없이 실행되지만 행이 손실되거나 평균이 왜곡되는 쿼리를 사용하여 SQL에서 가장 조용한 버그 중 일부를 발생시킵니다. 테스트된 예제를 통해 NULL이 실제로 어떻게 작동하는지, 그리고 이를 안전하게 처리하는 방법을 알아보세요.
- NULL은 누락되었거나 알 수 없는 값을 의미합니다. 0도 아니고 빈 문자열도 아닙니다.
= NULL는 아무것도 일치하지 않으므로IS NULL로 테스트해 보세요.- NULL을 사용하는 대부분의 계산은 NULL을 제공하며
WHERE은 확실히 true인 행만 유지합니다. - 평균을 조용히 변경할 수 있는 건너뛰기 NULL을 집계합니다.
쿼리가 오류 없이 실행되고 합리적으로 보이는 숫자를 반환하지만 행이 누락되고 평균이 잘못되었습니다. SQL NULL 값이 원인인 경우가 많습니다. NULL은 일반적인 값처럼 동작하지 않으므로 초보자와 숙련된 개발자 모두에게 적합합니다.
이 가이드는 NULL이 어떻게 작동하는지 정확하게 보여줍니다. 우리는 SQLite 3.50에서 모든 쿼리를 실행했으며 표시된 결과는 해당 실행에서 나왔습니다. 이 동작의 대부분은 표준 SQL이며 NULL 정렬 순서, Oracle의 빈 문자열 처리 등 데이터베이스가 다른 점을 확인합니다.
NULL이란 무엇입니까?
NULL은 값이 누락되었거나 알 수 없음을 의미하는 표시입니다. 이는 일반적인 의미의 값이 아니므로 모두 다릅니다.
| 가치 | 의미 | 전화 열의 예 |
|---|---|---|
NULL |
알 수 없거나 제공되지 않음 | 우리는 번호를 모른다 |
'' |
알려진 빈 텍스트 값 | 공백으로 제출됨 |
0 |
숫자 0 | 텍스트와 관련이 없지만 금액에 대해서는 실제입니다. |
특히 금액의 차이가 중요합니다. 보너스 0은 그 사람이 아무것도 받지 못했다는 것을 의미합니다. NULL 보너스는 아직 아무도 모른다는 의미입니다.
샘플 테이블
CREATE TABLE employees (
id INT, name TEXT, phone TEXT, bonus INT, manager_id INT
);
INSERT INTO employees VALUES
(1,'Meera','555-0101',500,NULL),
(2,'Arjun',NULL,300,1),
(3,'Sara','',NULL,1),
(4,'Ravi',NULL,NULL,2);
Sara에는 전화에 대한 빈 문자열이 있는 반면 Arjun과 Ravi에는 NULL이 있습니다. 두 사람은 매우 다르게 취급됩니다.
NULL 테스트
거의 모든 사람이 처음에 저지르는 실수는 다음과 같습니다.
SELECT name FROM employees WHERE phone = NULL;
-- (no rows)
SELECT name FROM employees WHERE phone IS NULL;
-- Arjun
-- Ravi
SELECT name FROM employees WHERE phone IS NOT NULL;
-- Meera
-- Sara
첫 번째 쿼리는 유효한 SQL이며 오류가 없습니다. NULL과 비교하는 것은 결코 사실이 아니기 때문에 단순히 아무것도 반환하지 않습니다. 빈 문자열은 실제 값이므로 Sara는 IS NOT NULL 아래에 표시됩니다. 그러나 Oracle에서는 빈 문자열이 NULL로 처리되는데 이는 주목할 만한 예외입니다.
세 가지 값 논리
대부분의 프로그래밍 언어에서 조건은 true 또는 false입니다. SQL은 세 번째 결과인 unknown을 추가합니다. 값을 모르면 5인지 말할 수 없습니다. 그리고 알 수 없는 두 값이 같은지 알 수 없으므로 NULL = NULL가 참이 아닙니다. 테스트에서는 모두 NULL을 반환했습니다.
SELECT NULL = NULL, NULL <> 1, 1 + NULL, 'a' || NULL;
-- NULL | NULL | NULL | NULL
결합 조건은 신중한 규칙을 따릅니다. 다음은 실행 결과입니다. 여기서 1은 true이고 0은 false입니다.
| 표현 | 결과 | 왜? |
|---|---|---|
참과 NULL |
NULL | 알 수 없는 부분에 따라 다름 |
거짓과 NULL |
거짓 | 알려지지 않은 것이 무엇이든 거짓입니다. |
참 또는 NULL |
참 | 알려지지 않은 것이 무엇이든 사실입니다. |
거짓 또는 NULL |
NULL | 알 수 없는 부분에 따라 다름 |
NULL이 아님 |
NULL | 미지의 반대말은 미지이다 |
WHERE에서 사라지는 행
WHERE은 조건이 true인 경우에만 행을 유지합니다. 결과를 알 수 없는 행은 거짓인 행과 함께 삭제됩니다. 이는 다음과 같은 놀라운 결과를 가져옵니다.
SELECT name FROM employees WHERE phone <> '555-0101';
-- Sara
Arjun과 Ravi의 전화번호가 확실히 그 번호가 아니기 때문에 나타날 것으로 예상할 수 있습니다. 하지만 그들의 휴대폰이 알려지지 않아 결과도 알 수 없고 그들은 사라진다. 이를 포함하려면 다음과 같이 명시적으로 말하세요: WHERE phone <> '555-0101' OR phone IS NULL. 부정은 다음 중 하나에도 도움이 되지 않습니다.
SELECT name FROM employees WHERE NOT (bonus > 400);
-- Arjun
Sara와 Ravi는 보너스가 없으므로 bonus > 400에도 그 반대에도 나타나지 않습니다. 기억해야 할 핵심 사항은 조건과 그 부정이 항상 모든 행을 포함하지는 않는다는 것입니다.
COALESCE: 대체 제공
COALESCE은 목록에서 NULL이 아닌 첫 번째 값을 반환하며 모든 주요 데이터베이스에서 작동합니다.
SELECT COALESCE(NULL, NULL, 'third', 'fourth');
-- third
SELECT name, COALESCE(phone, 'no phone') FROM employees;
-- Meera | 555-0101
-- Arjun | no phone
-- Sara |
-- Ravi | no phone
빈 문자열은 NULL이 아니기 때문에 Sara는 여전히 공백으로 나타납니다. MySQL과 SQLite의 IFNULL, SQL Server의 ISNULL, Oracle의 NVL과 같은 유사한 기능이 존재합니다. COALESCE는 휴대용 선택입니다. 계산에 대한 이전 요점도 여기에 적용됩니다. bonus + 100는 보너스가 없는 사람에게 NULL을 제공하므로 누락된 보너스를 0으로 처리하는 것이 귀하의 비즈니스에 적합한 경우 COALESCE(bonus, 0) + 100을 작성하십시오.
NULLIF: 값을 NULL로 변환
NULLIF(a, b)은 두 값이 같으면 NULL을 반환하고, 그렇지 않으면 a를 반환합니다. 두 가지 용도가 특히 도움이 됩니다. 자리 표시자 값을 정리할 수 있습니다.
SELECT name, NULLIF(phone, '') FROM employees WHERE id = 3;
-- Sara | NULL
SELECT name FROM employees
WHERE COALESCE(NULLIF(phone, ''), '') = '';
-- Arjun
-- Sara
-- Ravi
두 번째 쿼리는 “누락되었거나 비어 있는” 값을 찾는 편리한 방법입니다. 또한 많은 데이터베이스에서 오류가 발생하는 0으로 나누는 것을 방지할 수도 있습니다.
SELECT total / NULLIF(quantity, 0) FROM sales;
quantity이 0이면 실패하지 않고 NULL이 됩니다. 테스트에서 SELECT 100 / NULLIF(0, 0)는 NULL을 반환했습니다.
집계 건너뛰기 NULL
NULL이 보고서에 가장 큰 피해를 주는 부분은 다음과 같습니다.
SELECT COUNT(*), COUNT(bonus), SUM(bonus), AVG(bonus),
AVG(COALESCE(bonus, 0))
FROM employees;
-- 4 | 2 | 800 | 400.0 | 200.0
| 표현 | 결과 | 의미 |
|---|---|---|
COUNT(*) |
4 | 모든 행 |
COUNT(bonus) |
2 | 보너스가 있는 행만 |
SUM(bonus) |
800 | NULL은 무시됩니다. |
AVG(bonus) |
400 | 800을 4가 아닌 2로 나눈 값 |
AVG(COALESCE(보너스, 0)) |
200 | 800을 4로 나눈 값 |
그렇다면 평균 보너스는 400인가요, 아니면 200인가요? 데이터에서 NULL이 무엇을 의미하는지에 따라 다릅니다. NULL이 “보너스가 지급되지 않음”을 의미하는 경우 200이 맞습니다. “아직 결정되지 않음”을 의미한다면 400이 맞을 수도 있습니다. 데이터베이스는 귀하를 대신하여 이러한 결정을 내릴 수 없으므로 해당 비즈니스를 아는 사람에게 질문해야 합니다.
관련 트랩: 값이 없는 SUM은 0이 아니라 NULL입니다. 보너스 없이 행만 합산하면 NULL이 되고 COUNT는 0을 반환합니다. 숫자를 기대하는 애플리케이션 코드는 이에 충돌할 수 있으므로 래핑합니다: COALESCE(SUM(bonus), 0).
팁: 보고서 합계가 이상해 보이면 COUNT(*)를 COUNT(column)과 비교하세요. 이들 사이의 간격은 해당 열에 얼마나 많은 NULL이 있는지 즉시 알려줍니다.
GROUP BY, 정렬 및 DISTINCT
비교에서 NULL은 “같지 않음”이지만 이러한 작업은 이를 하나의 그룹으로 처리합니다.
SELECT bonus, COUNT(*) FROM employees GROUP BY bonus ORDER BY bonus;
-- NULL | 2
-- 300 | 1
-- 500 | 1
SELECT DISTINCT bonus FROM employees;
-- 500, 300, NULL
그룹화에 대한 자세한 내용은 SQL GROUP BY 및 HAVING을 참조하세요. 정렬 순서는 데이터베이스가 실제로 다른 부분입니다. SQLite와 MySQL은 NULL을 가장 작은 값으로 처리하는 반면 PostgreSQL과 Oracle은 이를 가장 큰 값으로 처리합니다. 따라서 동일한 ORDER BY bonus DESC는 NULL을 하나의 마지막에 넣고 다른 것의 첫 번째를 넣을 수 있습니다. PostgreSQL, Oracle 및 최신 SQLite를 사용하면 NULLS FIRST 또는 NULLS LAST를 사용하여 이를 직접 명시할 수 있습니다.
조인
=을 사용하는 조인 조건은 NULL과 일치하지 않으므로 NULL 키가 있는 행은 내부 조인에서 제외됩니다.
SELECT e.name FROM employees e
JOIN employees m ON m.id = e.manager_id;
-- Arjun, Sara, Ravi (Meera is gone)
SELECT e.name, m.name FROM employees e
LEFT JOIN employees m ON m.id = e.manager_id;
-- Meera | NULL
-- Arjun | Meera
-- Sara | Meera
-- Ravi | Arjun
Meera에는 관리자가 없으므로 내부 조인은 해당 행을 자동으로 삭제합니다. A LEFT JOIN은 이를 유지하고 누락된 면에 대해 자체 NULL을 생성합니다. SQL 조인 설명에서 자세한 내용을 읽어보세요.
NOT IN 트랩
NOT IN 목록의 단일 NULL은 모든 결과를 지웁니다.
SELECT name FROM employees WHERE manager_id NOT IN (1);
-- Ravi
SELECT name FROM employees WHERE manager_id NOT IN (1, NULL);
-- (no rows)
두 번째 형식은 manager_id <> 1 AND manager_id <> NULL을 의미하며 마지막 부분은 결코 참이 될 수 없습니다. 이는 NULL이 눈에 띄지 않게 도착할 수 있는 하위 쿼리의 경우 특히 위험합니다. 대신 SQL 하위 쿼리 튜토리얼에 설명된 대로 NOT EXISTS를 사용하세요. 해당 행의 manager_id가 NULL이므로 첫 번째 결과에서도 Meera가 누락되었습니다.
NULL을 사용한 디자인
- 기본적으로
NOT NULL를 사용합니다. 값이 실제로 누락될 수 있는 경우에만 NULL을 허용합니다. - 합리적인 기본값을 추가합니다. 예를 들면
quantity INT NOT NULL DEFAULT 0입니다. - 마법 값을 사용하지 마십시오. 1900-01-01의 날짜 또는 “알 수 없음”을 나타내는 -1의 날짜는 계산을 손상시킵니다.
- UNIQUE 동작을 알아보세요. 대부분의 데이터베이스는
UNIQUE열에 여러 개의 NULL을 허용하며 테스트에서는 오류 없이 두 개를 삽입했습니다. SQL Server는 일반적으로 허용하므로 예외입니다. - 기본 키는 NULL일 수 없다는 점을 기억하세요. 기본 키와 외래 키 비교를 참조하세요.
- NULL로 테스트합니다. NULL이 없는 테스트 데이터는 이러한 버그를 숨깁니다. 다른 특정 사례와 마찬가지로 의도적으로 포함합니다.
마무리
NULL을 “알 수 없음”으로 처리하면 대부분의 동작이 이해되기 시작합니다. 알 수 없음에 1을 더한 것은 알 수 없는 것이며 알 수 없음은 알 수 없음과 같다는 사실이 알려지지 않았습니다. 이번 주에 귀하의 보고서 중 하나를 감사하십시오. COUNT(column)에 대해 COUNT(*)을 사용하여 Null 허용 열을 확인하고 NOT IN을 찾은 다음 각 평균에서 NULL이 무엇을 의미해야 하는지 결정합니다.
자주 묻는 질문
SQL에서 NULL은 무엇입니까?
NULL은 누락되었거나 알 수 없는 값에 대한 표시입니다. 이는 0 및 빈 문자열과 다르며 비교 시 특별한 처리가 필요합니다.
= NULL이 작동하지 않는 이유는 무엇입니까?
NULL과 비교하면 true가 아닌 알 수 없음이 제공되므로 WHERE는 행을 삭제합니다. IS NULL 또는 IS NOT NULL을 사용하여 테스트하십시오.
COALESCE와 ISNULL의 차이점은 무엇입니까?
COALESCE는 표준 SQL이며 많은 인수를 허용합니다. ISNULL은 SQL Server에만 해당되며 두 개를 사용합니다. 이식 가능한 코드의 경우 COALESCE를 선호합니다.
COUNT에 NULL 값이 포함되어 있나요?
COUNT(*)는 NULL이 있는 행을 포함하여 모든 행의 개수를 계산합니다. COUNT(column)은 해당 열이 NULL이 아닌 행만 계산하므로 더 작은 숫자가 제공될 수 있습니다.
NULL은 빈 문자열과 동일합니까?
아니요, 대부분의 데이터베이스에서는 그렇습니다. 빈 문자열은 문자가 없는 알려진 값이며, NULL은 알 수 없음을 의미합니다. Oracle은 빈 문자열을 NULL로 처리하므로 주목할만한 예외입니다.
계속 학습하세요
테스트, WordPress 또는 SEO에 도움이 필요하십니까?
우리는 팀이 더 나은 소프트웨어를 출시하고 사이트를 성장시킬 수 있도록 돕습니다. 현재 진행 중인 작업을 알려주시면 명확한 다음 단계를 제안해 드리겠습니다.
추가 가이드 테스트, AI 및 최신 개발
이 기사가 마음에 드셨나요? 주제를 선택하고 최신 튜토리얼로 바로 이동하세요.
AI 환각 설명: 언어 모델이 사물을 구성하는 이유와 이를 줄이는 방법
AI 환각은 그것이 무엇인지, 언어 모델이 환각을 생성하는 이유, 일반적인 유형, 접지 및 프롬프트를 통해 환각을 줄이는 방법, 그리고 우리가 실행한 간단한 점검에 대해 설명했습니다.
기사 읽기 →DevOps환경 변수 설명: .env 파일, 비밀 및 구성이 올바르게 완료되었습니다.
우리가 실행한 Python 예제를 통해 설명된 환경 변수: 읽기 및 설정, 모든 값이 문자열인 이유, .env 파일, 프로세스 상속, 비밀 및 유효성 검사.
기사 읽기 →소프트웨어 개발API 속도 제한 설명: 알고리즘, 헤더 및 429 오류 처리
우리가 실행한 시뮬레이션을 통해 설명된 API 속도 제한: 토큰 버킷, 고정 창, 슬라이딩 창, 429 응답, 속도 제한 헤더, 백오프를 사용한 재시도 및 테스트 제한.
기사 읽기 →테스트 자동화Python에서 조롱: unittest.mock, 패치 및 테스트를 거짓말로 만드는 실수
Unittest.mock을 사용하여 Python에서 모의, 테스트됨: 모의 및 return_value, 부작용, 이름이 사용되는 패치, 사양 및 자동 사양, 모의 날짜 및 일반적인 실수.
기사 읽기 →소프트웨어 테스트코드 커버리지 설명: 회선 커버리지와 분기 커버리지 및 100%의 실제 의미
실제 Coverage.py 실행을 통해 설명되는 코드 적용 범위: 라인, 분기 및 조건 적용 범위, 보고서 읽기, 100% 적용 범위가 여전히 버그를 놓칠 수 있는 이유 및 합리적인 대상.
기사 읽기 →데이터베이스 및 SQLSQL의 DELETE vs TRUNCATE vs DROP: 차이점, 롤백 및 사용 시기
테스트된 SQL을 통해 DELETE 대 TRUNCATE 대 DROP에 대해 설명합니다. 각각의 제거, 롤백, 트리거, ID 재설정, 속도 및 PostgreSQL, MySQL, SQL Server 및 SQLite의 차이점.
기사 읽기 →데이터베이스 및 SQLSQL 뷰 설명: 예제를 통해 함정 생성, 사용 및 방지
우리가 실행한 쿼리로 설명된 SQL 뷰: 뷰 생성, 실시간 결과, 열 숨기기, 성능, 업데이트 가능하고 구체화된 뷰, 손상된 종속성 및 모범 사례.
기사 읽기 →소프트웨어 개발TypeScript 인터페이스와 유형: 실제 차이점, 컴파일러로 테스트
TypeScript 인터페이스 대 유형, 실제 컴파일러로 확인: 둘 다 할 수 있는 것, 하나만 할 수 있는 것, 선언 병합, 확장 대 교차점 및 따라야 할 간단한 규칙.
기사 읽기 →소프트웨어 개발Python *args 및 **kwargs 설명: 명확한 예가 포함된 유연한 함수
Python *args 및 **kwargs는 우리가 실행한 코드(패킹 및 언패킹, 매개변수 순서, 키워드 전용 및 위치 전용 인수, 데코레이터 및 일반적인 오류)를 설명했습니다.
기사 읽기 →소프트웨어 개발Python Lambda 함수: 구문, 실제 사용 및 사용하지 말아야 할 경우
Python 람다 함수는 구문, 키를 사용한 정렬, 맵 및 필터, 클로저, 후기 바인딩 트랩, 일반 def가 더 나은 선택인 경우 등 우리가 실행한 코드로 설명되었습니다.
기사 읽기 →인공지능AI 에이전트란 무엇입니까? 작동 방식, 간단한 에이전트 루프를 사용하여 실행할 수 있음
AI 에이전트란 무엇입니까? 우리가 실행한 작은 Python 루프, 실제 위험 및 간단한 챗봇이 더 나은 선택일 때 에이전트 루프, 도구, 메모리 및 가드레일에 대한 일반 가이드입니다.
기사 읽기 →DevOps모니터링과 관찰 가능성: 로그, 지표, 추적을 통한 실제 차이점
모니터링과 관찰 가능성 설명: 알려진 오류와 알려지지 않은 오류, 로그, 지표 및 추적, 결제 사건 안내, 골든 신호, OpenTelemetry 및 유용한 경고.
기사 읽기 →DevOpsDocker 볼륨과 바인딩 마운트: 컨테이너 데이터를 올바른 방식으로 유지
Docker 볼륨과 바인드 마운트 설명: 컨테이너 데이터가 사라지는 이유, 명명된 볼륨, 바인드 마운트, tmpfs, Compose 예제, 백업, 권한 및 각 사용 시기.
기사 읽기 →테스트 자동화TDD와 BDD: 주요 차이점, 두 가지 방식으로 구축된 하나의 기능 및 각 사용 시기
TDD와 BDD는 두 가지 방식으로 구축된 하나의 할인 기능, 즉 우리가 실행한 코드를 사용한 적록 리팩토링, 주어진 시점 시나리오, 도구, 장단점 및 각 사용 시기를 설명합니다.
기사 읽기 →소프트웨어 테스트UAT(사용자 승인 테스트): 프로세스, 체크리스트 및 실제 사례
사용자 승인 테스트는 누가 실행하는지, QA와 어떻게 다른지, 7단계 프로세스, UAT 테스트 사례 템플릿, 체크리스트, 승인 기준 및 일반적인 실수에 대해 설명했습니다.
기사 읽기 →데이터베이스 및 SQLSQL NULL 값 설명: IS NULL, COALESCE, NULLIF 및 피해야 할 함정
우리가 실행한 쿼리를 통해 설명된 SQL NULL 값: 3개 값 논리, IS NULL, COALESCE, NULLIF, 집계, 조인 및 정렬이 NULL을 처리하는 방법 및 조용히 발생하는 버그.
기사 읽기 →데이터베이스 및 SQLSQL CASE WHEN 문: 구문, 실제 예 및 일반적인 실수
우리가 실행한 쿼리로 설명된 SQL CASE: 단순 및 검색 양식, 조건 순서, SUM이 있는 피벗, COUNT 트릭, 사용자 정의 정렬, 업데이트 및 피해야 할 NULL 트랩.
기사 읽기 →소프트웨어 개발JWT란 무엇입니까? 실제 예제로 설명되는 JSON 웹 토큰
JWT란 무엇입니까? JSON 웹 토큰은 세 부분, 즉 우리가 실행한 코드에서 구축 및 변조된 토큰, JWT 대 세션, 저장소, 새로 고침 토큰 및 보안 실수를 설명했습니다.
기사 읽기 →소프트웨어 개발JavaScript 이벤트 루프 설명: 예제가 포함된 호출 스택, 마이크로태스크 및 타이머
호출 스택, 작업 및 마이크로태스크 대기열, setTimeout 0이 즉시 실행되지 않는 이유, 차단, 기아 및 인터뷰 퀴즈 등 우리가 실행한 코드로 JavaScript 이벤트 루프를 설명했습니다.
기사 읽기 →소프트웨어 개발Python 생성기 및 수율 설명: 실제 예제로 메모리 절약
Python 생성기와 항복은 우리가 실행한 코드로 설명됩니다. 일시 중지 및 재개 방법, 측정된 메모리 절약, 파이프라인, 무한 시퀀스, 항복, 전송 및 공통 트랩.
기사 읽기 →인공지능임베딩이란 무엇입니까? 벡터와 코사인 유사성을 간단하게 설명
임베딩이란 무엇입니까? 벡터, 코사인 유사성 및 의미론적 검색에 대한 일반 언어 가이드로, 우리가 실행한 작은 예, 일반적인 용도, 모델 선택 및 알려진 한계를 제공합니다.
기사 읽기 →DevOps블루-그린 배포와 카나리아 배포: 차이점, 장단점 및 선택 방법
블루-그린 배포와 카나리아 배포에 대한 설명: 각각의 작동 방식, 비용, 위험 및 롤백, 테스트한 안정적인 사용자 버킷팅, 데이터베이스 마이그레이션, 롤링 업데이트 및 선택 방법.
기사 읽기 →테스트 자동화불안정한 테스트: 원인과 해결 방법
우리가 실행한 데모를 통해 불안정한 테스트에 대해 설명했습니다. 주요 원인, 확인 및 진단 방법, 시기, 공유 상태 및 날짜, 격리 프로세스에 대한 적절한 수정 사항.
기사 읽기 →소프트웨어 테스트부하 테스트와 스트레스 테스트 비교: 차이점, 측정항목 및 k6 예
부하 테스트와 스트레스 테스트 비교 설명: 각각의 증명, 스파이크 및 흡수 테스트, 중요한 측정항목, 평균이 잘못된 이유, k6 예 및 테스트 계획 방법.
기사 읽기 →소프트웨어 테스트테스트 케이스와 테스트 시나리오: 주요 차이점, 예 및 각각의 사용 시기
테스트 케이스와 테스트 시나리오 설명: 명확한 정의, 병렬 테이블, 시나리오에서 케이스로 가져온 하나의 비밀번호 재설정 기능, 템플릿 및 각 사용 시기.
기사 읽기 →데이터베이스 및 SQLSQL 쿼리 최적화: 타이밍에 따라 실행 계획을 읽고 느린 쿼리를 수정합니다.
백만 개의 행에서 테스트된 SQL 쿼리 최적화: 실행 계획 읽기, 올바른 인덱스 추가, 분할할 수 없는 필터 수정, 복합 인덱스 및 키 세트 페이지 매김 사용.
기사 읽기 →데이터베이스 및 SQLSQL UNION 대 UNION ALL: 테스트된 차이점, 예 및 성능
SQL UNION과 UNION ALL은 우리가 실행한 쿼리(중복, 둘 다 따르는 규칙, 실제 데이터 버그, 측정된 성능, INTERSECT 및 EXCEPT, 각각의 사용 시기)를 설명합니다.
기사 읽기 →소프트웨어 개발JavaScript Fetch API 튜토리얼: GET, POST, 오류 처리 및 시간 초과
로컬 서버에 대해 테스트된 JavaScript Fetch API 튜토리얼: GET 및 POST, 404가 발생하지 않는 이유, 재사용 가능한 도우미, 쿼리 문자열, 시간 초과, CORS 및 일반적인 실수.
기사 읽기 →소프트웨어 개발Python 파일 처리: 읽기, 쓰기, CSV, JSON 및 pathlib 예제 포함
우리가 실행한 코드로 설명된 Python 파일 처리: 개방형 모드, 대용량 파일 읽기, CSV, JSON, pathlib, 바이너리 파일, 안전한 쓰기, 오류 처리 및 일반적인 실수.
기사 읽기 →소프트웨어 개발Python 클래스 및 객체: 실제 예제가 포함된 OOP 튜토리얼
우리가 실행한 코드로 설명된 Python 클래스와 객체: __init__, 메소드, 클래스 대 인스턴스 속성, 상속, 속성, 던더 메소드, 데이터 클래스 및 일반적인 실수.
기사 읽기 →인공지능대규모 언어 모델이란 무엇입니까? LLM의 작동 방식, 과대광고 없이 설명
대규모 언어 모델이란 무엇입니까? LLM은 토큰, 임베딩, 주의, 훈련, 온도 및 컨텍스트 창, 작은 다음 단어 데모 및 실제 한계 등 일반 언어로 설명됩니다.
기사 읽기 →DevOps초보자를 위한 Linux 명령: 예제가 포함된 필수 터미널 가이드
탐색, 파일, 로그 보기, grep, 파이프, 권한, 프로세스 및 아카이브 등 작업별로 그룹화된 초보자를 위한 Linux 명령과 실용적인 로그 분석 예제가 포함되어 있습니다.
기사 읽기 →테스트 자동화셀레늄 대 극작가: 주요 차이점, 코드 비교 및 선택할 항목
Selenium과 Playwright 비교: 아키텍처, 대기, 브라우저 및 언어 지원, 디버깅, 두 도구 모두에서 동일한 테스트, 마이그레이션 조언 및 선택 방법.
기사 읽기 →소프트웨어 테스트등가 분할: 실제 예제를 통해 설명되는 테스트 설계 기법
등가 분할 설명: 유효한 파티션과 유효하지 않은 파티션을 찾는 방법, 연령, 비밀번호 및 쿠폰에 대한 작업 예제, 실행한 테스트, 경계와 쌍을 이루는 이유.
기사 읽기 →소프트웨어 개발Git merge vs rebase: 차이점, 예제, 언제 무엇을 쓸까
Git merge vs rebase를 실제 로그 출력, 비교표, rebase의 황금률, 안전한 팀 워크플로로 설명합니다.
기사 읽기 →소프트웨어 개발파이썬 리스트 컴프리헨션: 문법, 예제, 피해야 할 때
파이썬 리스트 컴프리헨션 설명: 문법, 필터링, if-else, 중첩 반복문, 실제 측정 시간, 그리고 일반 for 반복문이 더 나은 경우.
기사 읽기 →데이터베이스 및 SQL예제로 쉽게 배우는 SQL JOIN (Inner, Left, Right, Full)
샘플 테이블과 쿼리로 SQL JOIN을 단계별로 이해하세요. INNER, LEFT, RIGHT, FULL, CROSS, SELF와 흔한 실수, 성능 팁까지 정리했습니다.
기사 읽기 →