728x90 Database11 [SQL] CROSS JOIN과 LEFT JOIN으로 “모든 학생 × 모든 과목” 응시 횟수 구하기 SQL 문제 중 아주 자주 등장하는 패턴이 있다.“모든 학생과 모든 과목을 기준으로, 각 학생이 과목별 시험을 몇 번 봤는가?”이 문제를 풀기 위해서는 CROSS JOIN과 LEFT JOIN, 그리고 COUNT() 함수의 동작 원리를 정확히 이해해야 한다.아래는 단계별로 쿼리 실행 흐름과 실제 예시 결과를 보여준다.🧩 0. 문제 데이터Studentsstudent_idstudent_name1Alice2Bob13John6AlexSubjectssubject_nameMathPhysicsProgrammingExaminationsstudent_idsubject_name1Math1Physics1Programming2Programming1Physics1Math13Math13Programming13Physics2Mat.. 2025. 10. 21. [SQL]전날보다 더 더웠던 날 찾기: Self Join vs WITH(CTE)로 깔끔 정복 오늘 문제 풀다가 두 가지를 새로 알았다.테이블을 자기 자신과 조인(Self Join)할 수 있다WITH 문(CTE)로 임시 테이블을 만들어 단계별로 쿼리를 짤 수 있다이 두 가지를 “전날 온도와 비교해서 더 따뜻했던 날짜의 id를 구하는 문제”로 정리해본다.문제 요약Weather(id, recordDate, temperature) 테이블이 있다.각 날짜의 온도가 전날보다 높았으면 그 날짜의 id를 반환하라.recordDate는 날짜,날짜는 중복 없음(= 하루에 한 행) 스키마 (예시)IDrecordDatetemperature12021-01-011022021-01-022532021-01-032042021-01-0430정답은 2, 4 (각각 전날보다 따뜻함)방법 1) Self Join (자기 자신과 조인).. 2025. 10. 20. [DB] MySQL 테이블 오류 및 해결: "'Incorrect key file for table' 최근에 MySQL 데이터베이스에서 'Incorrect key file for table'이라는 에러가 발생하여 해당 문제를 해결하는 과정을 공유하고자 합니다. 이 에러는 주로 테이블에 문제가 생겼을 때 발생하는데, 다양한 원인이 있을 수 있습니다. 이번에는 테이블 용량 문제로 발생한 에러에 대한 해결 방법에 대해 알아보겠습니다. 1. 에러 확인 처음에는 MySQL 테이블을 'analyze' 명령어로 분석했지만, 테이블의 상태는 'ok'로 나와 아무 문제가 없어 보였습니다. 2. 용량 확인 그런데, 에러의 원인은 테이블 용량 문제일 수 있습니다. 터미널에서 'df -H' 명령어를 사용하여 현재 서버의 용량을 확인해보세요. 여기서 문제가 발생한 테이블이 위치한 디렉토리의 용량이 부족한지 확인해야 합니다. 3.. 2024. 1. 30. [DB] Database 정규화 (1NF,2NF,3NF,BCNF) 👨💻 정규화란? 관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 정규화(Normalization)라고 한다. 데이터베이스 정규화의 목표는 이상이 있는 관계를 재구성하여 작고 잘 조직된 관계를 생성하는 것에 있다. 이를 단계별로 구분하여 정규형이 높아질수록 이상현상은 줄어들게 된다. 정규화의 목적 불필요한 데이터(data redundancy)를 제거합니다. 데이터 저장을 "논리적으로" 합니다. 정규화의 장단점 정규화의 장점 데이터베이스 변경 시 이상 현상(Anomaly)을 제거할 수 있습니다. 정규화된 데이터베이스 구조에서는 새로운 데이터 형의 추가로 인한 확장 시, 그 구조를 변경하지 않아도 되거나 일부만 변경해도 됩니다. 데이터베이스와 연동된 응용 프로그램에 최소한의 영향만을 .. 2023. 2. 7. [SQL] 삭제하기! (DELETE, TRUNCATE, DROP) 서론 서비스를 배포하기 전에 이전에 test를 했던 자료들을 db에서 지워줘야 합니다. 그 과정에서 한 번에 비우는 TRUNCATE 명령어를 알게되었고, DELETE, TRUNCATE, DROP 이 세 명령어에 대해 알아보고 차이점도 정리해 볼까 합니다. DELETE DELETE 명령어는 테이블의 내부의 행을 모두 삭제하며, WHERE절을 이용해서 개별적으로 조건에 맞는 행만 삭제할 수 있습니다. DELETE FROM 테이블명 WHERE 조건; DELETE의 특징 DELETE는 DML(데이터 조작 언어) 명령입니다. DELETE는 행 잠금을 사용하여 실행됩니다. DELETE는 WHERE 절과 함께 사용하여 특정 행을 삭제할 수 있습니다. DELETE는 삭제된 각 행에 대해 트랜잭션 로그를 기록합니다. 따.. 2023. 2. 2. [SQL] 필드명이 예약어일 경우...!! 서론 db를 읽는중에 ERROR 1064 (42000)이 발생했다... 오타도 없었고 급한건 아니니 대수럽지않게 넘겼는데 똑같은 필드명을 가진 곳에서 또 똑같이 에러가 발생했다. 가만보니 필드명이 desc...? 아... 예약어였다... 예약어란? 이미 문법적인 용도로 사용되고 있기 때문에 식별자로 사용할 수 없는 단어 MySQL 예약어 ADD ALL ALTER ANALYZE AND AS ASC ASENSITIVE BEFORE BETWEEN BIGINT BINARY BLOB BOTH BY CALL CASCADE CASE CHANGE CHAR CHARACTER CHECK COLLATE COLUMN CONDITION CONSTRAINT CONTINUE CONVERT CREATE CROSS CURRENT_DA.. 2023. 1. 13. 이전 1 2 다음 728x90