SQL 16

[삽잡이::sql] 두 종류의 COUNT를 한번에 얻어보자! 특정 조건 Count

Query문을 작성하며 원하는 결과가 포함된 데이터의 개수를 구하기 위해COUNT()를 사용하곤 합니다. 그런데, 예를 들어봅시다. 이와 같은 Table이 있는데,해당 Table의 전체 개수와 Age가 10대인 데이터의 개수만을 구하기 위해서는어떻게 해야할까요?? 물론, 쿼리를 두번 날릴 수 있지만,성능을 위해 한번에 처리하는 것이 좋을 것입니다.(물론, 저정도 양이라면... 이런 고민 조차가...) 1SELECT COUNT(*), COUNT(IF(age > 20, age, NULL)) FROM info_table;cs 이와 같이 전체 데이터의 개수와,IF문을 사용하여 age가 10대인 데이터의 개수를한 Query에서 동시에 구할 수 있습니다. 예... 그렇습니다.굳~

[삽잡이::sql] CASE WHEN THEN WHEN THEN ELSE END !?

case 하시면 뭐가 떠오르시나요? 삽잡이는switch ~ case 문이 떠오르군요.... 예 그렇습니다.... 저는 컴공 출신 풋내기입니다... SQL에서도 case 문이 있습니다.뭐, 사실 if문도 있는 것 보면 그다지 이제 놀랄일도 없지요. 아무튼...개인적으로는 조건이 많이 들어가는 Query문은 성능상 좋지 않을 경우들이 많다고 생각하기에 조심스럽게 사용해야한다 생각하지만... 뭐 모두 case by case니깐요~ 그러면 한번 알아봅시다~ MySQL Reference Manual에는 이렇게 나와있습니다. (출처_ MySQL Reference Manual) 뭐,,, 그런데 하나 이상의 프로그래밍 언어를 다뤄보신 경험이 있다면 그렇게 어렵지 않게 느껴지실 것입니다. CASE 문을 통해 Query에..

[삽잡이::sql]count() 와 IF() 사용 주의사항! 이라 쓰고 삽질이라 읽는다

1SELECT IF(name = '삽잡이', 'Yes', 'No') AS result FROM people_finder;cs 이와 같은 Query문을 통해 각 레코드에 있는 컬럼(name)의 값이삽잡이일 경우 Yes를 그리고 아닐 경우 No를 나타낼 수 있습니다. 해당 Query문의 결과는 아마 이와 같이 출력될 것입니다. 역시 삽잡이는 유일무이하군요... 그런데 말입니다...만약, 삽잡이가 있는 레코드를 제외한 나머지 레코드들의 수를 계산해야할 필요성이 생겼습니다. 1SELECT IF(name = '삽잡이', COUNT(*), COUNT(*)-1) AS result FROM people_finder;cs 이와 같이 Query문을 작성했지요... 그런데... 삽잡이는 분명 있는데 말입니다.계속 거짓으로 ..

[삽잡이::sql] 쿼리문에서도 조건을 걸 수 있다! IF

if란...예 그렇습니다. 만약에... 만약에 말야~ 우리~ 센치해지는 순간이군요....아무튼... 그런게 아니라... Query문에서도 조건을 걸 수 있습니다. 1SELECT IF(name = '삽잡이', 'True', 'False') FROM people_finder;cs 이런식으로 말입니다! 간단하지유~? Query문도 조건을 걸면서 날릴 수 있다니~~ 그래도 날리기전에 EXPLAIN 때려보고Index 타는지 꼭 확인해보세요~ 굳~

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

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

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

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

[삽잡이::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에서 유일성..