UPDATE

  1. UPDATE (테이블명) SET (칼럼) = 대입값 WHERE (특정칼럼 조건) 의 형식이다.
    DML(S, U, I, D) 중 하나이며, U,I,D는 INSERT INTO (테이블) VALUE ()처럼, 테이블명이 먼저나오지만 결국 칼럼을 조작한다.
    numeric(자리수,소수점자리수) 데이터로 integer로 표현할 수 없는 decimal point(소수점)을 표시한다
    .
    UPDATE로 칼럼값을 바꿀 때는, WHERE에 primary key인 id 같은 것으로 검색하자.
    cf) ALTER는 PRIMARY KEY를 주는 등의 테이블 자체 수정을 한다. UPDATE로 칼럼 값을 바꾼다.
    또한, UPDATE와 DELETE는 반드시 WHERE를 달아줘야 전체 데이터를 보호할 수 있다.

DELETE

  • DML(S,U,I,D)정리
    SELECT 칼럼 FROM 테이블
    UPDATE 테이블 SET 칼럼=값 WHERE 조건
    INSERT INTO 테이블 VALUES ( , , )
    DELETE FROM 테이블 WHERE 조건
  1. DELETE는 위험하기 때문에 SELECT 먼저 하고, DELETE로 수정하라고 배웠다.

  2. 하지만 SQL은 똑똑하기 때문에 아래와 같이 알려준다.
    item 테이블의 id = 4는 purchases테이블에서 fk_purchase_item 칼럼으로 foreign key로 작용하고 있기 때문에 에러가 난다

  3. 해당 테이블을 조회해보자.

  4. 맨 처음 purchases테이블을 생성할 때, 아래와 같이 pk, fk를 넣어줬었다.

    ALTER TABLE "public"."purchases" ADD CONSTRAINT "fk_purchase_item" FOREIGN KEY ("item_id") **REFERENCES "public"."items" ("id") ON UPDATE NO ACTION ON DELETE NO ACTION NOT DEFERRABLE INITIALLY IMMEDIATE;

  5. 그럼 items 테이블의 id = 4를 지우려면, 먼저 그 것을 foreign key로 걸어둔 purchases 테이블의 id = 4를 삭제해줘야한다.


Wildcard for filtering unknowns : LIKE 'wildcard';

여기서는 필드 전체가 아니라 필드의 일부분에 근거해서 필터링 하는 방법을 배워보자.
WHERE 칼럼명 IN ('', '');의 경우에는 해당 값 전체가 있어야한다.
여기서는
WHERE 칼럼명 **LIKE '패턴'**;을 이용해 정규표현식처럼 값 일부로 추출할 수 있다.

  1. customers 테이블의 last_name칼럼에는 t가 들어가는 사람이 2명 있다.
    LIKE 칼럼 '%';에서 %는 모든 문자가 줄지어 나타남(any character)을 의미.
  1. LIKE 칼럼명 '___'; 언더스코어는 갯수만큼 문자열수를 가지는 값(single character)을 필터링한다
    _ 4개

    _ 5개
  1. %를 응용하면,** 중간에 특정문자가 끼여있는 것을 추출**할 수 있다
    예를 들어 %t%
  1. 또 응용하여, %t_모든문자로 시작하다가 t+1개의 문자로 끝나는 것을 추출할 수 있다.


+ Recent posts