5월 18일 화요일 (7일차) - 리터럴문자열,중복제거ㅇ

<목차>
ㅇ 연결 연산자
ㅇ 리터럴 문자열
ㅇ 중복 데이터 삭제




ㅇ 연결 연산자

(현업에서 사용하진 않아서 가볍게 보자)

  • 보고서 만들 때 사용하는 명령문이야
    (실제에서는 sql+ 사용해서 보고서 만들지는 않으니까)
  • 열 또는 문자열을 다른 열에 연결 (2개의 데이터를 하나로 출력)
  • 두 개의 세로선 (||) 으로 표시



ㅇ 리터럴 문자열

  • 명령문, 테이블, 컬럼이름, 연산자를 제외한 모든 문자, 날짜, 숫자들 전부
  • 문자와 날짜는 작은따옴표 (' ') 붙이기
    • 문자에 '' 안 붙이면 alias 돼버려
    • 쌍따옴표(" ") 붙여도 alias 돼버려
  • 숫자는 ' ' 붙이지 않아 : 데이터베이스에서 테이블, 컬럼 이름이 반드시 문자로 시작(숫자로 시작하지 않아)해서 알리아스가 아니라 숫자로 바로 인식해
    • '7' 이렇게 하면 문자로 인식해버려
  • 예) 라스트 네임 || ' is a' || 잡 아이디
  • where라는 조건절에서 리터럴문자가 엄청 중요해져
    • 포인트는 작은 따옴표(' ')를 쓴다는 점

CF. 정리하면 알리아스는 쌍따옴표, 리터럴문자열은 따옴표




ㅇ 중복 데이터 삭제 : distinct

ㅇ 컬럼 1개

SELECT DISTINCT 컬럼이름
FROM 테이블이름;
  • SELECT 명령어 다음에 위치
  • 전체 문장에서 단 한 번만 사용

ㅇ 실습1 : 사원이 근무하는 부서들을 알고 싶어

SELECT department_id
FROM employees;
  • 직역 : 사원들의 부서 아이디
    • d테이블의 d_id는 우리 회사의 부서번호
      e테이블의 d_id는 현재 사원들이 근무하고 있는 부서번호
  • 의역 : 사원들이 근무하고 있는 부서번호
    • 부서 번호가 무엇무엇이 있나
  • 숫자 중복 = 하나의 부서에 여러 명 사원 근무하고 있다
  • 중복제거하면
SELECT DISTINCT department_id 
FROM employees;

12 rows selected.

  • 결과가 12행 나왔으니까 사원이 근무하는 12개 부서 존재한다?? NO
    • NULL 값도 여러 개가 있으면 DISTINCT에 중복제거 되고 1개 남아
    • NULL 값이 있어. 한 칸 비니까 11개 부서 있겠구나~해야지
    • 행 그대로 해버리면 착오 발생

ㅇ 컬럼 2개

SELECT DISTINCT 컬럼이름1, 컬럼이름2
FROM 테이블이름;
  • 앞의 컬럼들의 그룹화를 통해 중복제거
    • 첫 번째 컬럼의 데이터가 이렇다면
      10 20 10 20 10
    • 같은 것끼리 모아서 (= 그룹화) 그중 하나만 반환(return)
      10 10 10 / 20 20 => 10, 20
  • 마지막 컬럼은 그룹 내에서 중복제거

ㅇ 실습2

SELECT DISTINCT department_id, job_id
FROM employees;
  • 컬럼 단위로 보면 20,20 겹쳐서 중복제거 안 된 것처럼 보이지만,
    행 단위로 보면 중복제거 된 거야. (20, MK_MAN)과 (20, MK_REP)는 다르니까
  • 의역 : 부서별로 직업들이 무엇무엇이 있나

ㅇ 3개면??

  • 첫 번째 그룹화. 그 안에서 두 번째 그룹화. 세 번째에서 중복 제거


ㅇ 만약 pk(프라이머리 키)를 첫 번째로 두고 여러 컬럼 중복제거 한다면??

  • pk라서 각각이 하나의 그룹이 돼

ㅇ 첫 번째 컬럼이 뭐냐에 따라 그룹 개수가 달라질 수 있어
(내 생각) 그룹의 개수는 달라질 수 있지만, 중복제거의 결과는 같을 듯 - 더 고민해보자




ㅇ 76P iSQL+
인터넷으로, 마우스나 커서 이용해서 쉽게 하는 거 만들었는데
네트워크로 디비 접속하는 건 보안에 취약해

좋은 웹페이지 즐겨찾기