삽질의 현장/- DataBase 26

[삽잡이::sql] 중복을 제거하라! DISTINCT

삽잡이는 중복된 데이터를 지우고 컬럼에 원하는 값들이 존재한지 알아볼 필요성이 생겼었습니다. 아래와 같은 Table에 blood_type이라는 컬럼이 있다고 가정해보겠습니다. 삽잡이는 A, B, AB, O 혈액형 모두가 해당 Table에 있는지 확인하고 싶어합니다. 오오~~ 알려줘~ 알려줘~ 이럴땐 어떻게 해야할까요??? 바로! DISTINCT 라는 키워드를 사용할 수 있습니다. 뚜렷한이라는 뜻을 가지고 있습니다. 네~ 그렇습니다. DISTINCT 키워드를 통해SELECT 문의 결과에서중복을 제거한 데이터를 뽑아낼 수 있습니다. 1SELECT DISTINCT blood_type FROM personal_records;cs 비록 간단한 예시지만,이와 같이 DISTINCT 키워드를 사용하여 중복되지 않은 결..

[삽잡이::sql] 테이블을 복사 그리고, Index의 중요성

똑같은 데이터를 가지고 테스트할 일이 있어서테이블을 복사하고자 시도했었습니다. (그냥 dump로 복사할껄...) 1CREATE TABLE NEW_테이블명 AS SELECT * FROM OLD_테이블명cs select 문 안에 들어있는 테이블의 데이터를 복사하여새로운 테이블에 붙여넣을 수 있습니다. 참고로 구조만 복사할 경우에는 LIKE 를 사용하시면 됩니다.이렇게요~! 1CREATE TABLE NEW_테이블명 LIKE OLD_테이블명cs 간단하지 않습니까? 뭐야 쉽네~ 별거 없네~ 그런데 이렇게 복사한 테이블을 사용하여테스트를 진행했을 때에는엄청난 혼란만 키웠을 뿐입니다. 예... 쿼리가... 너무 오랫동안 실행하고 있어서....찾아봤더니!!!! 기존에 Index를 탔었는데,이 복사한 Table에서는 I..

[삽잡이::sql] 다 삭제해버리겠다! DROP, DELETE, TRUNCATE TABLE

DB를 관리하며 가끔 눈에 거슬리는 데이터를 삭제하고자 할 때가 있습니다. 저장한 데이터를 삭제할 때에는? 예 그렇습니다. 바로 DELETE 문을 사용하여 삭제를 진행하게 되지요.DELETE란 단어 자체가 '삭제'를 의미하니깐요. 간단하게 DELETE문 사용법을 살펴보겠습니다. 1DELETE FROM 테이블명 WHERE 조건cs 간단하지요 하하하...물론, 조건이 없다면 테이블에 있는 데이터가 전체 삭제되겠지요. 그런데, DROP이라는 녀석도 있습니다. 12DROP DATABASE 데이터베이스명DROP TABLE 테이블명cs 테이블 자체를 날려버리는 것입니다. Db를 날릴 수 도 있습니다. 참고로 Data를 관리할 때이렇게 위험한(?) 명령어는 조심하게 써야됩니다. 조심조심 사용해요~ 그렇다면, DELE..

[삽잡이::DB] 중복을 없애고 테이블을 최소화하라! 정규화(normalization)

학부생 때는 잘 느끼지 못했는데 지금 와서 느끼는것은 Query문도 잘못 실행하면 오랫동안 기다려야하는 사실입니다. 진짜 한번 잘못 실행했다가....언제까지 하나 보자 하고 화장실을 다녀오고도 무려 10분을 더 기다렸던 기억이.... 오버같죠? 진짜입니다. 그래서 저는 이제 Query문을 실행하기전에항상 EXPLAIN 을 붙여 어떤식으로 Query문이 실행될지 살펴본답니다. Index를 타나 안타나 살펴보는건데.... 아무튼... 왜 이런 썰을 풀었을까요? 예 그렇습니다.이번 시간에는 정규화(Normalization)에 대해서 알아보려고 하기 때문입니다. 사실 위의 썰과 정규화는 뭐... 그다지 정확히! 관련이 있다고 말씀드리긴 힘든데요.... 그냥 말하고 싶었던 것이구요... 아무튼... 정신차려! 삽..

[삽잡이::DB] 데이터 모델링 과정

저는 프로그래밍 세계와 일상 세계는 다르지 않다고 생각합니다.일상 세계를 프로그래밍 세계로 옮겨 놓을 수 있지요. 현실 세계에 있는 무언가를분석하여 요구조건을 명세하고 개념적으로 설계(ER Model)를 할 수 있습니다. ER Model이란, Entity 즉, 개체들간의 Relation이라는 관계를 도식화 한 Model을 의미합니다.개체들간의 관계! 이 개체는 '사람'이 될 수 도 있고, '사물'이 될 수도 있고이 세상에 존재하는 고유하게 식별할 수 있는 무언가를 개체라고 부릅니다! 이 개체들간의 관계를 도식화하면 ER Model이라고 부르는 것이지요. 예를 들어 이런거에요 아~ 이런거구나~! 이렇게 개념적으로 설계를 한 내용으로 모델을 만들면개념적 스키마라고 부르게 됩니다. 이제 이렇게 설계한 모델을 ..

[삽잡이::sql] 데이터를 그룹핑해보자! group by

진정한 개발자가 되기위해!!! DB는 필수!!!! 그렇다는 것은 Query도 잘 작성해야겠지!?!? 예 그렇습니다.개발의 고수 삽잡이가 되기 위해!!!!이번에는GROUP BY에 대해서 살펴보았습니다 굳~ GROUP BY 구문을 사용하게 되면데이터들을 원하는 그룹으로 나눠줍니다. GROUP BY 구문에 작성된 컬럼은 기준이 되어 하나의 결과로 Groupping 시켜줍니다. 다음은 삽질의 명문 삽질고에 학생 DB입니다. 삽질고에서 사건 사고를 일으키는 학우들에게는어마무시한 벌점을 준다네요 어느날 삽질고에 교육청에서 직원이 오신다고하네요...그래서 평소 지저분했던 창고를 정리하기 위해 인력이 필요한 교장선생님은 벌점 평균이 가장 높은 반 학우들을 부르려고 하십니다. 교장 선생님은 과감하게 Qeury문을 작성하..

[삽잡이::sql] 데이터를 다른 테이블에 INSERT하자! INSERT INTO SELECT

INSERT INTO SELECT 구문은 한 테이블로부터 데이터를 복사하여 다른 테이블에 값을 Insert할 때 사용합니다. 단, 조건이 있지요.복사를 하기 위해서는 두 테이블에 존재하는 컬럼들이 같아야합니다. 123456789INSERT INTO sap_db_A SELECT * FROM sap_db_B WHERE name = "삽잡이" cs 이런식으로 sap_db_A 라는 Table에 sap_db_B Table에 있는 레코드들 중 name이 삽잡이인 레코드를 INSERT 할 수 있습니다. 물론, 모두 동일하지 않더라고 INSERT INTO SELECT 구문 사용이 가능합니다. 123456789INSERT INTO sap_db_A (idx, name, age, sex) SELECT idx, name, a..

[삽잡이::sql] 없으면 Insert 있으면 Update! DUPLICATE ON KEY UPDATE

기존에 값이 있는 레코드를 중복해서 Insert 하게 되면 어떻게 될까요!? 저는 스포츠를 좋아하니까!축구로 예를 들어봅시다. 슛~ 골은 나의 친구~ 자... 명문구단 삽질 FC 에서 '삽질'이라는 이름의 선수를 영입했습니다.포지션은 공격수이고, 아주 유능한 선수 같습니다. 이 선수가 입단하면서 자기는 에이스가 될 것이니등번호를 10번으로 받겠다고 합니다. 멋도 모르고 알겠다고 했습니다.그리고 선수 등록을 위해 DB에 등록을 시도했습니다. 그리고 느끼죠.... 우리에게 친숙한....그래 맞습니다. ERROR... 오류코드가 1062 입니다.그리고 그 아래를 보시면 Duplicate entry '10' for key 'PRIMARY' 라는 Error 발생 이유가 찍혀있습니다. 등번호는 삽질 FC에서 유일성..

[삽잡이::sql] Table의 Index를 살펴보자! SHOW INDEX

DB에서 원하는 데이터를 추출하기 위해서Query문을 작성합니다. 이 때 대용량으로 데이터를 가져온다고 생각해봅시다.여러 테이블들을 join 하고 sub로 두고 웩~ 조금이나마 빠르게 Query문을 수행하기 위해서index의 중요성을 지난번에 언급한 적이 있었습니다. 이 테이블에서의 Index 정보를 확인하겠다! 할 때에는과감하게 SHOW INDEX 을 사용하십시요 index에 대한 정보가 잘 나옵니다. SHOW INDEX returns table index information. The format resembles that of the SQLStatistics call in ODBC. This statement requires some privilege for any column in the tabl..