DB TIL(230310)

주바나·2023년 3월 10일
0

DB

목록 보기
13/14
post-thumbnail

13강


V1

  • UNSIGNED : 칼럼내에서 음수를 포함하지 않거나 혹은 수의 range를 양수쪽으로 더 넓게 가지고싶을때 사용.
    -2147483648 부터 2147483647 에서 --> 0 부터 4294967295.

  • UNIQUE :해당 컬럼에 동일한 값이 들어가지 않게함.

  • CONCAT(a,b) :두 문자열 합쳐줌
    ex) CONCAT(salary,'만원') => 50만원

  • TRUNCATE(AVG(salary),0) =>소수점 뒤에 자리 0자리 나옴 5,500.000에서 아래처럼 바뀜

  • IF(deptId=1,'홍보','기획' ) : 1이면 홍보 아니면 기획

  • SELECT IF(deptId = 1, '홍보', '기획') AS `부서명`,
    GROUP_CONCAT(`name` ORDER BY id DESC SEPARATOR ', ') AS `사원리스트`,
    CONCAT(TRUNCATE(AVG(salary), 0), '만원') AS `평균연봉`,
    CONCAT(MAX(salary), '만원') AS `최고연봉`,
    CONCAT(MIN(salary), '만원') AS `최소연봉`,
    CONCAT(COUNT(*), '명') AS `사원수`
    FROM emp
    GROUP BY deptId;
    

  • CASE WHEN THEN

V2

  • MySQL에서 group by 로 문자열을 합칠땐 GROUP_CONCAT 을 이용한다.
  1. 기본형 : GROUP_CONCAT(필드명)
  2. 구분자 변경 :GROUP_CONCAT(필드명 SEPARATOR '구분자')
  3. 중복제거 : GROUP_CONCAT(DISTINCT 필드명)
  4. 문자열 정렬 : GROUP_CONCAT(필드명 ORDER BY 필드명)
SELECT D.`name` AS '부서',
GROUP_CONCAT(E.`name`)AS '사원리스트'
FROM emp AS E 
INNER JOIN dept AS D
ON E.deptId=D.id
GROUP BY deptId;

여기서 GROUP_CONCAT 안하면 홍길동만 나오고 홍길순 안나옴

V4 (V3에서 HAVING 없이 서브쿼리로 수행)

  • 서브쿼리 :하나의 SQL 문에 포함되어 있는 또 다른 SQL 문
  • WHERE HAVING의 차이점
    WHERE : 항상 FROM 뒤에 위치 ,우선적으로 모든 필드를 조건에 둘 수 있음
    HAVING : 항상 GROUP BY 뒤에 위치 , 그룹화 되어진 새로운 테이블에 조건을 줄 수 있음.
  • UNION 규격 맞는 SELECT들 하나로 묶어서 출력해줌
  • SELECT로 뽑은 애들도 테이블로 생각해준다. 그래서 서브쿼리가 가능한것.
profile
BE -JAVA,Spring boot

0개의 댓글