CodeGym /행동 /All lectures for KO purposes /테이블의 데이터 변경

테이블의 데이터 변경

All lectures for KO purposes
레벨 1 , 레슨 805
사용 가능

4.1 UPDATE SET 문

테이블의 기존 레코드를 변경해야 하는 경우 연산자를 사용합니다 UPDATE.

한편으로 연산자는 열에 대한 새 값을 지정해야 하기 때문에 UPDATE연산자와 유사 합니다. INSERT반면 연산자에서는 SELECT데이터 그룹으로 즉시 작업할 수 있기 때문입니다.

중요한! 연산자의 목적은 UPDATE테이블의 한 행이 아닌 특정 조건을 만족하는 모든 행의 데이터를 변경하는 것입니다. 그리고 작은 실수를 하면 쉽게 테이블의 모든 데이터를 잃을 수 있습니다.

요청에 대한 일반 보기:

UPDATE table SET
  	column 1 = expression 1,
  	column 2 = expression 2,
  	column 3 = expression 3
WHERE condition;

모든 직원의 급여를 100만큼 인상하는 쿼리를 작성해 보겠습니다. 쿼리는 다음과 같습니다.

UPDATE employee SET
  	salary = salary+100;

그리고 이제 급여가 50,000 미만인 모든 사람에 대해서도 급여를 20% 인상할 것입니다. 요청 예시:

UPDATE employee SET
  	salary = salary*1.2
WHERE salary<50000;

물론 감독의 급여를 2 배로 늘릴 것입니다. 그 없이는 어떻게 될 수 있습니까?

UPDATE employee SET
  	salary = salary*2
WHERE id=4;

4.2 복잡한 데이터 변경 시나리오

동시에 여러 테이블의 데이터를 변경하기로 결정했거나 한 테이블의 데이터를 변경할 때 다른 테이블의 데이터로 채워야 하거나 단순히 첫 번째 테이블을 변경하는 과정에서 다른 테이블의 데이터를 어떻게든 사용하는 경우, 그러면 놀라움이 우리를 기다립니다.

직원 테이블에 존재하는 사용자 테이블의 모든 사용자의 레벨을 변경해 봅시다. 단순화를 위해 사용자의 일치를 이름으로 확인합니다.

이 쿼리를 어떻게 작성하고 싶습니까?

UPDATE user SET
  	level = 80,
WHERE user . name IN ( list of names from employee table );

이제 직원 테이블의 이름 목록을 이 쿼리에 추가해 보겠습니다.

UPDATE user SET
  	level = 80,
WHERE user.name IN (select name from employee);

흥미로운! 이름을 얻기 위한 SQL 쿼리 자체는 작업 설명보다 훨씬 짧은 것으로 밝혀졌습니다. SQL을 만든 사람들은 빵을 헛되이 먹지 않았습니다.

당신을 화나게 강요-이 접근 방식은 작동하지 않습니다. 먼저 이러한 테이블을 조인해야 합니다. 다음과 같이 표시됩니다.

UPDATE table 1, table 2 SET
  	column 1 = expression 1,
  	column 2 = expression 2,
  	column 3 = expression 3
WHERE table 1.id = table 2.ref_id;

조금 더 어렵게 만들어 봅시다. 급여가 50,000 이상인 우수한 직원에게만 레벨을 80으로 설정해야 합니다. 완전한 솔루션은 다음과 같습니다.

UPDATE user, good_employees SET
  	user.level = 80
WHERE user.name = good_employees.name;

이러한 테이블 조인은 실제로 이므로 INNER JOIN결국에는 두 번째 테이블에서 이름이 일치하는 사용자만 남게 됩니다.

그러나 우리는 어떻게든 좋은 직원을 선택해야 하므로 코드를 더 추가해 보겠습니다.

SELECT * FROM employee WHERE salary >= 50000

이제 최종 쿼리에서 이 테이블을 대체합니다.

UPDATE user,
    (SELECT * FROM employee WHERE salary >= 50000) good_emps
SET
    user.level = 80
WHERE user.name = good_emps.name;

지금 그것과 함께 살아라.

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION