[SQL 복습] 혼자 SQL 공부한다. – DELETE/JOIN 등등.

표지노트에 직접 손으로 써야해.. 아날로그 90년대생이지만,

다시한번! 더 쉽게 개념을 이해하려고 정리 start! DML 데이터 조작 언어

  1. INSERT 데이터 추가 2.UPDATE 데이터 수정 3.DELETE 데이터 삭제

I.INSERT 데이터를 “입력”하는 언어 1) 테이블 전체의 COL에 데이터를 추가하거나 2) 특정 COL에 데이터를 추가하거나

  1. 테이블 전체 COL에 데이터 추가 >> INSERTINTO 테이블명 VALUES (데이터 값 열기 순으로 작성)
  2. 2) 특정 COL에 데이터 추가 >> INSERTINTO 테이블명 (COL1, COL2) VALUES (COL1 데이터값, COL2 데이터값)
  3. * 자꾸 헷갈리는 부분 * INSERTINTO 테이블명인데 INSERT 테이블명이라고 써^^;;;;;;;;;;;;;;;;;;;;;;;;;;;

2. UPDATE 데이터를 “수정”하는 언어 1) 특정 COL의 데이터 전체를 수정할지 2) 특정 행(ROW) 데이터만! 수정할지

  1. 특정 COL 전체데이터 수정 >> UPDATE 테이블명SET 색상명 = 데이터
  2. 2) 특정 행 데이터 수정 > UPDATE 테이블명 SET 색상명 = 데이터 WHERE 조건
  3. 3. DELETE 데이터를 “삭제”하는 언어 >> DELETEFROM 테이블명 WHERE 조건
  4. * JOIN 할 때는 DELETE 다음에 삭제할 TABLE 이름을 적어준다.
  5. 리트코드 문제 푸는 법
  6. 1.UPDATE / WHENCASE http://leetcode.com/problems/swap-salary/(627 번)

INPUT를 보고 OUPUT를 만드는 코드를 작성 CASE??

CASEWHEN 조건 1THENVALUE_IF_조건 1_TRUEWHEN 조건 2 THENVALUE_IF_조건 2_TRUELSEVALUE_OTHER_CASESEND

규칙이 있는 데이터라고 할까, 많은 데이터를 한번에 휙 수정/삭제하고 싶다면!CASE를 쓰자.

2. DELETE / SUBQUERY https://leetcode.com/problems/delete-duplicate-emails/solution/

Write an SQL query to delete all the duplicate emails, keeping only one unique email with the smalestid. Note that you are supposed to write a DELETE statement and not a SELECTone.

INPUT 보고 OUPUT 만드는 코드 작성 (중복된 메일이라면 id가 작은 것을 선택, delete 구문 이용)

가장 쉬운 방법은 deletefrom Person whereid=3^^이지만 실제 데이터는 3가지가 아니라 300만개이기 때문에 조건을 주고 삭제해야 한다.

여기서 조건!ⓐ 중복된 메일이 없도록ⓑ 있는 경우 ID가 작은 데이터에서 추출

내 머릿속의 흐름=

  1. 중복되지 않은 것을 선택한다?- >코드 기억이 안 나.
  2. 2. 중복되는 거 삭제하기 -> join… 생각났는데 코드가 기억이 안 나.
  3. 너무 공부를 안했나 싶어서 일단 강의를 찾아봤어.

그런데 강의에서는 먼저 SUBQUERY를 이용하여 삭제하는 방법을 알려주신다.

서브 쿼리는… 아직 나는 한꺼번에 이해가 안 가고 생각을 고민해야 하는 분야. 보자마자 ‘아, 이런 데이터를 추출하는구나’라고 알고 싶지만 아직도 코드를 많이 봐야 한다.(SQLD 때도 머리가 가장 아팠던 주제)

보고나서 아… 했는데 더 쉬운 코드 쓸 수 있지 않을까? 다른 사람의 코드를 찾아봤어 (그래도 다음 강의때 join을 이용한 방법을 가르쳐줘서 부끄럽다;)

selfjoin을 이용한 코드

그러면 여기서 생각하는 거.select를 이용할 수는 없을까?

결과는 NOPE! 저 코드 실행시의 결과는 다음과 같다{“headers”: [“id”, “email”, “values”: [[1,”[email protected]”| [2,”[email protected]”| [3,”[email protected]”]} 만약 <이 아닌 <=로 작성해도 같은 결과.

사실 아직도 궁금한 점은 저렇게 코드를 돌리면 {“headers”: [“id”, “email”, “values”: [1, “[email protected]”]}만 나오는 줄 알았는데 왜… 1, 2, 3이 다 나오지?조건을 충족하는 것이 id=1인 row이고, 그 줄만 출력되어야 하는 것 아닌가?

궁금해서 일단 댓글 달아놓을게.천재 여러분께서 저의 궁금증을 해소해 주시길.

기타 쓰기

self Joinself Join의 경우 Join 컬럼의 값이 모두 같으므로 Join 조건 이외의 조건만 생각해 본다.

inner 조인 중복된 값만 추출할지 유가만 추출할지,

left 조인 delete에서 이용하시면 다른 table에 있거나 없는 값을 삭제할 것!

예를 들면

두 테이블을 이용하여 주문을 한 번도 해본 적이 없는 caster 데이터를 추출할 때는 leftjoin+delete 구문 이용

leftjoin+selete를 이용하여 주문을 한 번도 하지 않은 고객 리스트 반납

서브쿼리 날짜가 있는 테이블에서 “첫 번째 날짜” 데이터를 원한다면 subquery 절과 min(date)을 이용!

delete 구문의 중요성을 알게 된 today.

어떤 DATA를 선택하여 추출할 것인지 VS 어떤 DATA를 선택하여 삭제하고 나머지 값을 추출할 것인지

라면 당연히 전자가 코드도 예쁘지 않을까? 후자는 일을 두 번 해야겠다고 생각했지만 이번 문제를 통해 A를 선택하는 것보다 B, C를 삭제하는 것이 더 쉽다는 점을 알게 됐다.

+ 다른 사람들의 여러 코드를 보는 게 재밌어.전부 내 머릿속에 들어온다!

그러면 끝.

지적? 수정은 언제나 환영입니다. ☺

error: Content is protected !!