본문 바로가기

웹프로그래밍/SQL

(공부중) MySQL CRUD 공부(3) - 정렬, 필드 데이터 수정/삭제


목차

  1. 데이터베이스 만들기
  2. 테이블과 필드만들기
  3. 필드에 내용 추가하기
  4. 인덱스를 기준으로 내림차순 정렬
  5. Extra - 필드 데이터의 수정과 삭제

4. 필드 오름차순/내림차순 정렬

이제 데이터베이스의 필드를 정렬해보려고 한다.

SELECT * FROM `테이블이름` ORDER BY `기준이 될 필드명` DESC;

 

구문은 SELECT ... ORDER BY ... 를 쓰면 된다.

테이블 이름에는 조회를 할 테이블을 ORDER BY 뒤차에는 어떤 필드를 기준으로 정렬할 지를 써주면 된다. 그리고 그 뒤에 내림차순 (큰 숫자부터 작은 숫자로 정렬)을 하기 위해서는 DESC를 쓰면되고, 오름차순을 하기 위해서는 ASC나 아니면 그냥 아무것도 안 적으면 된다.

 

정렬을 한다고 실제로 데이터 베이스의 값이 정렬이 되는 것이 아니고 보는 방법만 바뀌는 것이다.

 

내가 쓴 구문은 다음과 같다.

SELECT * FROM `board` ORDER BY `id` DESC;

 

여기서 *은 모든 필드를 보겠다는 것으로 특정 필드의 값을 보고 싶으면 *이 들어가는 부분에 필드의 이름을 적으면 된다.


Extra 1. 필드의 데이터 수정

진정한 CRUD를 구현 하기 위해서는 필드의 값을 바꾸는 것이 필요하다. 필드의 값을 바꾸는 것은 생각보다 간단하다.

UPDATE `테이블명` SET `필드명` = "바꿀 내용" WHERE 기준;

 

기준은 어느 필드를 바꿀지의 기준을 말한다. 여기서 중복되지 않은 값이 들어가는 필드 id 필드뿐이므로 단 하나의 값만 바꾸기 위해서는 id를 기준으로 하는 것이 좋아 보인다.

 

UPDATE `board` SET `content` = "SQL 공부중..." WHERE `id` = 1;

 

위의 구문은 board 테이블의 content 필드의 내용을 "SQL 공부중..."으로 바꾼다는 것이다.

 

이어서 WHERE 를 통해 id 필드가 1 과 동일한 곳만 바꾸겠다고 표시하였다. 기준은 여러개가 올 수도 있다. id 필드의 경우는 PRIMARY KEY로 지정하였기 때문에 동일한 값이 올 수가 없어서 기준을 여려개로 하는 것이 의미가 없지만 만약  특정 uid 필드의 특정 content 내용을 바꾸고 싶다면 AND 연산자를 쓰면 된다.

 

UPDATA `board` SET `content` = "다중 조건 쓰기" WHERE `uid` = "Hayasaka" AND `content` = "안녕?";

 

다음과 같이 쓰면 데이터베이스에서 uid가 Hayasaka 면서 content가 "안녕?" 인 모든 로우의 content가 "다중 조건 쓰기"로 수정된다.

 

AND 연산자를 몇번이나 반복해서 쓸 수 있고 이를 통해 더욱 더 정밀하게 원하는 데이터를 수정할 수 있다. 하지만 만약 단 하나의 필드 데이터만 바꾸고 싶다면 PRIMARY KEY로 지정이 되어있어 중복되는 값이 절대 생길 수 없는 필드를 기준으로 삼는 것이 가장 간단하고 확실하게 구문을 시행하는 방법이다. 위와 같이 사용하는 것은 여러 데이터베이스의 값을 바꿀때 활용하면 된다.

 

 

Extra 2. 필드의 데이터 삭제

필드의 데이터를 삭제해보자

DELETE FROM `테이블명` WHERE 조건;

 

SQL에서 데이터를 삭제하면 즉시 복구 불가능하게 삭제된다. 그러니 조건을 두번 세번 확인해서 원하는 데이터를 삭제하는 것이 맞는지 잘 확인해야한다.

 

DELETE FROM `board` WHERE `id` = 1;

 

위의 코드를 이용하여 board 테이블의 id1인 데이터를 전부 삭제하였다. 만약 특정 유저의 데이터를 전부 삭제하고 싶다면 WHERE`uid` = "Hayasaka` 와 같은 방법을 사용하여 uid가 Hayasaka인 모든 데이터를 지울 수 있다.

 

이때 데이터를 삭제해도 PRIMARY KEY의 값이 초기화 되지 않는다. 다시 말해 필드의 ROW값이 10개가 있어 id가 10까지 올라갔다고 해보자. 이때 1번을 삭제한다고 해서 나머지 데이터베이스의 id가 하나씩 줄어들지 않으며 또한 새로 로우를 추가하면 새로운 로우의 id에는 11의 숫자가 추가되고 id가 1인 로우는 id를 직접 지정해서 로우를 만들지 않는 이상 영영 추가되지 않는다.

 

만약 이 값을 바꾸고 싶으면 (1부터 순서대로 다시 id를 지정하고 싶으면) 특별한 방법을 써야한다. 다만 확실한 것은 아니지만 실무에서는 AUTO_INCREMENT로 올린 값을 초기화 시킬 일이 거의 없다고 들었다.


이상으로 SQL에서 간단하게 CRUD를 구현해보았다. 여기서 소개한 것들 외에도 SQL 도 정말 많은 기능이 있어서 이를 모두 숙달하려면 SQL을 많이 쓰는 수 밖에 없는 듯하다.