클라우드 컴퓨팅/aws 데이터베이스

MySQL workbench 사용하기3(feat.여러 조건 처리, case, if, join)

갑자기 내리는 비 2021. 3. 17. 18:13

여러개의 조건을 처리하는 방법을 설명하겠습니다.

 - 2개의 조건이고 범위일 경우는 beween을 이용해서 간단하게 표현이 가능합니다.

    : A >= 2004 and A <= 2015의 조건을 A between 2004 and 2015 로 바꾸어 사용하여도 똑같은 결과가 나옵니다.

 - 여러 조건이 등식 조건일 경우 in을 사용하여 간단하게 표현이 가능합니다.

    : a = 1985 and a = 2008 and a = 2010 and a = 2014 and a = 2017  를  a in (1985, 2008, 2010, 2014, 2017)로 표현할 수 있습니다.

해당 조건에 맞는 레코드가 추출된 것을 볼 수 있습니다.

between과 in 모두 앞에 not을 사용할 수 있습니다.( between의 경우 범위가 반대로 되고, in의 경우 맞지 않는 데이터를 찾습니다.)

 

case 조건식

 - 새로운 컬럼을 만들고, 조건에 맞춰 컬럼의 데이터를 만듭니다.

case

   when 조건

      then 조건이 true일 경우 입력할 데이터.

   else 모든 when 조건에 부합하지 않을 경우 입력할 데이터.

end as 컬럼명

when 뒤에 나온 조건인 stock_quantity 값이 0~50일 경우 *, 51~100일경우 **, 그 이외의 경우 *** 데이터가 들어간 것을 확인할 수 있습니다.

as를 써주지 않는다면 case부터 end까지 다 나오게됩니다. 이름을 꼭 바꿔줍시다.

 

join에 대하여 설명하겠습니다.

 관계형 데이터베이스에서 중복을 피하기위해 데이터를 쪼개서 여러 테이블로 저장합니다(정규화). 하지만 원하는 데이터를 추출하기 위해서는 다시 테이블들을 조합해야하는데 그것을 join이라고 합니다. 

 join연산자는 참조되는 속성값을 기준으로 레코드를 합쳐줍니다.

 

위의 이미지와 같은 관계를 가진 테이블을 생성합니다. 

reviewers와 series는 각각 primary key로 id를 가집니다. reviews에서 각각의 id를 참조합니다.

 

foreign key를 사용해 참조합니다.

    foreign key( 테이블에서 참조되는 속성 ) references 참조하는 테이블( 참조되는 속성 )   형식으로 입력합니다.

    참조무결성의 원칙을 지키기 위해 참조값이 삭제되면 참조하는 레코드를 삭제하는 on delete casecade를 사용할 때도 있지만 현재는 사용하지않습니다.( 현재 티비에서 방영중인 드라마가 사라져도 드라마에 대한 댓글과 평점은 사라지지 않는다는 설정입니다. )

현재 방영되는 드라마에 대한 평균 평점을 추출하였습니다.

코드에 대한 설명 : 드라마 테이블과 리뷰테이블을 join합니다. 그 후에 제목들로 group by를 해 각 드라마별로 평점이 어떻게 되는지 확인합니다.

  - from 테이블명 join 테이블명 on 참조속성 = primary key  형식으로 join합니다.

  - round 함수는 반올림하는 함수입니다.  round( 반올림 할 숫자, 소수점 자리수 ) 형식으로 사용합니다.

 

리뷰 테이블과 리뷰작성자 테이블을 join합니다. 몇개의 드라마에 평가를 했는지 안 했는지, 했다면 점수를 어떻게 주었는지 확인합니다.

  - null값을 처리하는 함수로 ifnull함수가 있습니다. ifnull( 컬럼명 , 0 ) 해당하는 컬럼의 데이터가 NULL이라면 0으로 변환합니다.

 

  - 조건이 2개일 경우 case 대신에 if 함수를 쓴다면 코드가 더 간결해집니다.

    : if( 조건식 , 조건식이 true일 경우 입력할 데이터, 조건식이 false일 경우 입력할 데이터 ) as 새 컬럼명

      case와 마찬가지로 괴랄한 컬럼이름을 보고싶지 않다면 as를 사용해줍니다.