Code Style Formatter와 Eclipse Text Editor 설정하기

이클립스 최초 설정이 편할 수도 있지만,
TAB 공백보다는 띄어쓰기 2칸을 쓰고,
띄어쓰기나 공백이 몇 개인지 볼수 있는게 Editor 설정 하는것이 더 편하다고 느껴짐.
워드나 문서작업 할때는 지저분해 보여서 싫었는데, 코딩할 땐 공백 문자가 보이는 것이 훨씬 보기 편하고 정리가 잘 되는거 같음.
그래서 Eclipse나 VS Code를 설치하면 제일 먼저 하는 설정중에 하나임.

CodeStyle 적용하기

Google/StyleGuide에서 첨부 파일을 받은 뒤 코드스타일을 적용 하겠음.

  1. 이클립스 상단의 Windows > Preferences로 들어감.
  2. 왼쪽 상단 검색창에서 Formatter 검색 Java > Code Style > Formatter로 들어감.
  3. Import > eclipse-java-google-style.xml 선택.
  4. Edit 창 열어서 다음과 같이 값 변경 후, 적용.
  5. JavaScript > Code Style > Formatter
  6. Import > eclipse-java-google-style.xml 선택.
  7. Edit 창 열어서 다음과 같이 설정 적용.

TEXT EDITOR 설정하기

  1. 이클립스 상단의 Windows > Preferences로 들어감.
  2. General > Editors > Text Editors 창 열기.
  3. Display tab width 2로 설정.
    • tab의 공백 사이즈가 2칸이라는 의미임.
  4. Show Print Margin 체크. Print Margin Column 값 80으로 설정.
    • 텍스트 에디터에 80자 가이드 라인을 보이게 하는 것임.
  5. Show Whitespace Characters 체크.
    • 공백 문자 표시
  6. Configure Visibility 설정 창에서 Carriage Return, Line Feed 체크 해제.
  7. Preference 창에서 indent 검색.
    • Web > CSS Files > Editor
      • Indent Using Spaces 체크
      • Indentation Size 2로 설정.
    • Web > HTML Files > Editor
      • Indent Using Spaces 체크
      • Indentation Size 2로 설정.
    • XML > XML Files > Editor
      • Indent Using Spaces 체크
      • Indentation Size 2로 설정.

확인

다 적용 후, Test.java 파일에서 ctrl + a, ctrl + shift + f -> 설정 한 대로 포메팅이 된 것을 확인할 수 있음.

728x90
반응형

'IDE' 카테고리의 다른 글

[Eclipse] 최적화 설정하기  (0) 2020.01.26
[Eclipse] eclipse.ini 파일 설정  (0) 2020.01.26
[Eclipse] 인코딩 설정  (0) 2020.01.26
[Eclipse] 테마 변경 (Windows)  (0) 2020.01.26
[Eclipse] 설치하기 (Windows)  (0) 2020.01.26

Eclipse Theme 설정

이클립스를 설치하고 실행하면 하얗고 밝은 화면을 볼 수 있음.
테마 변경으로 눈의 피로를 덜 받게 해서 조금이나마 시력 보호를 할 수 있음.
나는 moonrise라는 Eclipse 테마와 Dark Visual Studo라는 폰트 테마를 적용해서 사용하는걸 좋아함.
주의 할 점이 있는데 설정하다 꼬일 수 있으므로 workspace 백업 해두는 것을 권장함!!

 


 

Eclipse Thme 적용

  1. Help - Eclipse Marketplace 실행.
  2. moonrise를 검색하면 Color IDE Pack 이란게 뜸.
    예전엔 moonrise 테마만 따로 있었는데 패키지로 모아서 올렸나봄.
  3. Eclipse Moonrise UI Theme 만 선택해서 설치하도록 함.
  4. 동의 후, 설치. 이후 Eclipse 재시작을 함.
  5. Eclipse가 다시 시작 되면 Windows > Prefrence > General > Apperance 에서 Theme를 확인, 여러가지 버전의 Moonrise 테마가 있고, windows에 설치한다면 MoonRise (standalone)을 선택 하면 됨.
    이클립스 테마가 변경되는게 확인 되지만 이클립스를 한번 더 재시작 하라고 뜸.

 


 

Font Theme 설정

폰트 테마 역시 마켓 플레이스에서 받을 수 있지만, 나는 다음 링크의 테마가 마음에 들어서 이걸 다운받고 적용하기로 함.
LINK
이곳에 접속하면 다른 테마들도 많으니 골라서 설치 할 수도 있음.

 

Dark Visual Studio - Eclipse Color Themes

 

www.eclipsecolorthemes.org

  1. Eclipse Color Theme (EPF) 저장.
  2. Windows > Prefrence > General > Apperance > Colors and Fonts 창으로 들어감.
  3. 창 왼쪽 하단의 Import 선택, 방금 받은 파일을 지정후 finish, Eclipse 재시작.
  4. 적용된걸 확인할 수 있음.

 

728x90
반응형

'IDE' 카테고리의 다른 글

[Eclipse] 최적화 설정하기  (0) 2020.01.26
[Eclipse] eclipse.ini 파일 설정  (0) 2020.01.26
[Eclipse] 인코딩 설정  (0) 2020.01.26
[Eclipse] Code Style Formatter, Text Editor 설정하기  (0) 2020.01.26
[Eclipse] 설치하기 (Windows)  (0) 2020.01.26

Windows Eclipse 설치하기

설치

  1. 이클립스 설치 프로그램 다운로드.
  2. eclipse-inst-win64.exe 실행.
  3. Eclipse IDE for Enterprise Java Developers 선택.
  4. JVM과 설치 경로 지정
    • JVM 선택에서 JRE가 아닌 JDK 선택.
    • Installation Folder에서 적절한 경로 지정.
  5. 동의 할게 뜨면 동의 하고 설치 진행.
  6. 설치 완료 후, 실행.
  7. JAVA로 작업할 파일들이 저장될 경로 (Workspace) 지정.

 


 

설치 확인을 위한 테스트

  1. 새 프로젝트 생성.
    (ctrl + n) -> Java Project

  2. 프로젝트 이름 지정.

  3. finish.

  4. 테스트 프로젝트의 패키지 생성.
    (ctrl + n) -> package

  5. test로 패키지 이름 지정.

  6. Test.class 파일 생성.
    (ctrl + n) -> class

  7. public void main(String[] args) 체크 후 생성.

  8. 간단한 출력문 추가.

       System.out.println("HI");
  9. ctrl + f11으로 실행.

728x90
반응형

'IDE' 카테고리의 다른 글

[Eclipse] 최적화 설정하기  (0) 2020.01.26
[Eclipse] eclipse.ini 파일 설정  (0) 2020.01.26
[Eclipse] 인코딩 설정  (0) 2020.01.26
[Eclipse] Code Style Formatter, Text Editor 설정하기  (0) 2020.01.26
[Eclipse] 테마 변경 (Windows)  (0) 2020.01.26

JDK 설치하기

  1. JDK 선택
    • Oracle JDK와 OpenJDK 그리고 버젼.
      Oracle이 JDK를 년 단위 구독형 유료 라이센스로 전환하게 되면서 OracleJDK와 OpenJDK에서 선택 하게 되었음.
      알아서 선택 하겠지지만,
      기업에서 라이센스가 있다면 Oracle JDK를 설치하고,
      그게 아니라면 Open JDK를 설치하면 됨.
  2. JDK 다운로드

  3.  
  4. 설치
    일단 두 버젼 다 설치해 보도록 하겠음.
    • OracleJDK는 설치파일을 실행하면 됨.
    • OpenJDK는 압축을 푼 뒤 위치 시키고 싶은 경로에 폴더를 넣어주면 됨.
      나는 OracleJDK의 설치경로 C:\Program Files\Java\와 같은 경로에 위치 시키겠음.
  5.  
  6. 환경 변수 설정창 오픈
    제어판 -> 시스템 및 보안 -> 시스템으로 들어간 후,
    고급 시스템 설정 -> 환경변수 선택.
  7. JAVA_HOME 변수 설정
    변수 이름 : JAVA_HOME
    변수 값 : C:\Program Files\Java\jdk1.8.0_241
    값은 jdk의 bin 폴더 앞까지의 경로를 넣어줌.
  8. PATH 변수 편집
    • 새로만들기 선택 후, %JAVA_HOME%\bin를 입력해줌.
  9. JAVA 실행 및 버전 확인.
    cmd 또는 Powershell을 실행한 뒤 자바 버전을 확인해야 함.
    두 개의 명령어에 반응이 있어야 정상적인 설치가 됐고, 코딩 할 준비가 됨.
  10. java -version javac -version

 

728x90
반응형

윈도우 버전 GIT 설치하기

  1. Git 설치 파일을 다운
    git download

 

Git - Downloads

Downloads Mac OS X Windows Linux/Unix Older releases are available and the Git source repository is on GitHub. GUI Clients Git comes with built-in GUI tools (git-gui, gitk), but there are several third-party tools for users looking for a platform-specific

git-scm.com

  1. 설치 시작 NEXT

  1. NEXT

  1. NEXT

  1. NEXT

  1. NEXT

  1. NEXT

  1. NEXT

  1. NEXT

  1. NEXT

  1. 설치 진행

  1. 설치 완료

  1. git에 사용자의 이름과 이메일 설정 후 설정 확인

    git config --global user.name '사용자 이름'
    git config --global user.email '이메일 주소'
    git config --list

     

  1. github에서 repository clone

  1. clone 한 repository open

  1. 간단한 수정 후 commit 시도

  1. github login

  1. 로그인 후 commit 성공

728x90
반응형

'VCS' 카테고리의 다른 글

[GIT]  (0) 2024.04.10
[VCS] 좋은 커밋 메세지 간단 작성법  (0) 2023.07.14
[GIT] 브랜치, 커밋 간 다른 파일 목록 조회  (0) 2022.04.05
[GIT] remote branch 가져오기  (0) 2022.04.05
[TortoiseSVN] Disconnect 방법  (0) 2021.09.10

PostgreSQL Data Directory 변경하기.

Windows 기반의 로컬 서버와 테스트 서버에서 돌리는 PostgreSQL의 Data 저장경로가 C로 잡혀 있었음.
D 드라이브로 옮길 필요가 있어서 열심히 구글링 했으나,
거의 대부분의 자료가 Linux 기반이고, PostgreSQL의 버젼도 구버젼인 경우가 많아서 내가 정리 해보고자 함.

진행 환경

OS : Windows10, Windows Server 2008 R2 Standard
DB : PostgreSQL 10.10, compiled by Visual C++ build 1800, 64-bit
PostgreSQL 11.5, compiled by Visual C++ build 1914, 64-bit

진행


  1. PostgreSQL 데이터 저장경로 확인

    • SQL Shell을 실행 접속 후, show data_directory; 명령을 내리면 현재 PostgreSQL이 데이터를 저장하는 경로를 알려줌.
     Server [localhost]:
     Database [postgres]:
     Port [5432]:
     Username [postgres]:
     postgres 사용자의 암호:
     psql (10.10)
     도움말을 보려면 "help"를 입력하십시오.
    
     postgres=# show data_directory;
       data_directory
     ---------------------
     C:\Program Files\PostgreSQL\10\data
     (1개 행)
    • 경로 확인후 SQL Shell 종료.

  1. PostgreSQL 서버 종료.

    • PostgreSQL 10버전 이후의 서버 종료방법 찾기도 쉽지 않았음.

    • PowerShell을 관리자 권한으로 실행.

    • PostgreSQL의 설치 경로 하위의 scripts 경로로 들어감.

    • .\serverctl.vbs stop 명령어 실행.

       PS C:\WINDOWS\system32> cd 'C:\Program Files\PostgreSQL\10\scripts'
       PS C:\Program Files\PostgreSQL\10\scripts> .\serverctl.vbs stop
      
       Microsoft (R) Windows Script Host 버전 5.812
       Copyright (C) Microsoft Corporation. All rights reserved.
      
       postgresql-x64-10 - PostgreSQL Server 10 서비스를 멈춥니다..
       postgresql-x64-10 - PostgreSQL Server 10 서비스를 잘 멈추었습니다.

  1. 현재 데이터 저장 경로의 하위 디렉토리를 새 디렉토리로 이동함.

    • 나의 경우는 1에서 확인한 디렉토리에서 D:\dev\postgre\data로 복사.
    • 복사후, data 폴더를 우클릭 -> 속성보기 -> 보안 -> 사용권한이 잘 있는지 확인 해야 함. 일반적으로는 이상 없는듯.
      • 복사후, 이전 경로롸 새 경로의 권한이 같은지, 갖지 않다면 새 경로에 권한 추가를해 줘야 한다.
      • Windows Server 2008 R2 OS로 서버를 돌리는 경우에는 NETWORK SERVICE라는 유져의 접근이 가능해야 함.

  1. 설정 변경

    • 새로 옮긴 경로에서 postmaster.opts 파일(D:\dev\postgre\data\postmaster.opts)을
      텍스트 편집기로 열어서, 다음과 같은 내용으로 변경해줌

       C:/Program Files/PostgreSQL/10/bin/postgres.exe "-D" "D:\dev\postgre\data"

      대충 실행파일 위치와 데이터 저장 위치를 표기하는 듯.


  1. 레지스트리 변경

    • 레지스트리 편집기를 실행 후, 컴퓨터\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\postgresql-x64-10 경로까지 내려감.

    ImagePath를 선택 후 값을 변경해줌.

     "C:\Program Files\PostgreSQL\10\bin\pg_ctl.exe" runservice -N "postgresql-x64-10" -D "D:\dev\postgre\data" -w

    대충 3번과 같은 의미인듯 함.


  1. 서버 재시작.

    • 2에서 실행한 경로에서 .\serverctl.vbs start 명령을 내려주면 됨.
     PS C:\Program Files\PostgreSQL\10\scripts> .\serverctl.vbs start
     Microsoft (R) Windows Script Host 버전 5.812
     Copyright (C) Microsoft Corporation. All rights reserved.
    
     postgresql-x64-10 - PostgreSQL Server 10 서비스를 시작합니다...
     postgresql-x64-10 - PostgreSQL Server 10 서비스가 잘 시작되었습니다.
    • 새 경로에 접속 권한이 없다면 서버 시작이 되지 않으므로 꼭 권한 확인 해야 함.

  1. 경로 확인.

    • 1에서 확인한 방법으로 PostgreSQL의 데이터 저장 경로가 새 경로인지 확인.
     postgres=# show data_directory;
       data_directory
     ---------------------
     D:/dev/postgre/data
     (1개 행)

참고 자료

  • https://confluence.curvc.com/pages/viewpage.action?pageId=10092649
  • https://www.dbrnd.com/2016/08/postgresql-change-or-move-default-data-directory-in-windows-operating-system/
  • https://kugancity.tistory.com/entry/postgreSQL-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC-%EB%B3%80%EA%B2%BD
728x90
반응형

'Database' 카테고리의 다른 글

[PostgreSQL] 랜섬웨어  (0) 2020.03.03
[PostgreSQL] sysdate 쓰는법  (0) 2020.02.14
[SQL] SET OPERATOR  (0) 2019.12.27
[SQL] JOIN  (0) 2019.12.27
[SQL] GROUP  (0) 2019.12.26

 

조인 외에도 테이블 간의 데이터를 조회하는 방법이 있음.
집합 연산자는 SELECT 문을 여러개 연결하여 작성,
각 SELECT 문의 조회 결과를 하나로 합치거나 분리할 수 있음.
즉, 합집합, 교집합, 차집합과 같음.

OPERATOR DESC KIND
UNION 조회 결과의 합집합. 중복행은 1번만 출력. 합집합
UNION ALL 조회 결과의 합집합. 중복되는 행도 출력. 합집합
INTERSET 조회 결과의 교집합. 중복되는 행만 출력. 교집합
MINUS 첫 번째 조회 결과에서 두 번째 조회 결과를 뺀다. 차칩합
SELECT        열 이름
FROM          테이블 이름
집합 연산자   <---  UNION, UNION ALL, INTERSET, MINUS
SELECT        열 이름
FROM          테이블 이름
[ORDER BY     열 이름 [ASC or DESC]]
  • SELECT 문에서 기술한 열과 두 번째 SELECT 문에서 기술한 열은
    왼쪽부터 순서대로 1 : 1로 대응함,
    열 개수와 데이터 타입이 일치해야 함.
    열의 순서가 다르거나 데이터 타입이 일치하지 않으면 에러남.
  • SELECT 문에 대한 연산은 위에서 아래로 수행됨.
  • ORDER BY 절은 SELECT 문의 맨 끝에 기술함.

UNION

SELECT COUNT(*)
FROM
  (
    SELECT  department_id
    FROM    employees
    UNION
    SELECT  department_id
    FROM    departments
    ORDER BY department_id
  );

UNION ALL

SELECT COUNT(*)
FROM
  (
    SELECT  department_id
    FROM    employees
    UNION ALL
    SELECT  department_id
    FROM    departments
    ORDER BY department_id
  );

INTERSECT

SELECT COUNT(*)
FROM
  (
    SELECT  department_id
    FROM    employees
    INTERXECT
    SELECT  department_id
    FROM    departments
    ORDER BY department_id
  );

MINUS

SELECT COUNT(*)
FROM
  (
    SELECT  department_id
    FROM    departments
    MINUS
    SELECT  department_id
    FROM    employees
    ORDER BY department_id;
  );
728x90
반응형

'Database' 카테고리의 다른 글

[PostgreSQL] sysdate 쓰는법  (0) 2020.02.14
[PostgreSQL] Windows에서 Data Directory 변경하기  (0) 2020.01.09
[SQL] JOIN  (0) 2019.12.27
[SQL] GROUP  (0) 2019.12.26
[SQL] 데이터를 가공하기 위한 DB 함수들  (0) 2019.12.26

JOIN

관계형 데이터베이스에서 테이블 안에 있는 행들을 논리에 땨라 연결할 수 있도록 하는 기법.

JOIN DESC
EQUI JOIN 조건이 정확히 일치하는 경우, 결과 출력.
NON EQUI JOIN 조건이 정확히 일치하지 않는 경우, 결과 출력.
SELF JOIN 자체 테이블 내에서 조인.
OUTER JOIN 조건이 정확히 일치하지 않아도 모든 결과를 출력.
곱집합 (Cartesian Product) 가능한 모든 행을 조인.

EQUI JOIN

양쪽 테이블에서 공통적으로 존재하는 컬럼 값이 일치하는 행만 가져오는 일반적인 조인.
등호 (=) 연결 연산자를 사용해서 조건 값이 정확히 일치할 때만 행을 가져오기 때문에,
EQUI JOIN 혹은 INNER JOIN 이라고 함.
주로 PK와 FK의 관계를 이용해 조인하지만, 다양한 조건으로 조인할 수 있음.

SELECT
    A.열 이름1, B.열 이름 2
FROM
    테이블 1 A, 테이블 2 B
WHERE
    테이블 1.열 이름 = 테이블 2.열 이름
SELECT
    *
FROM
    employees A, departments B
WHERE
    A.department_id = B.department_id;
SELECT
    A.employee_id, A.department_id, B.department_name, C.location_id, C.city
FROM
    employees A, departments B, locations C
WHERE
    A.department_id = B.department_id
AND
    B.location_id = C.location_id

NON-EQUI JOIN

대상 테이블 간 동일 칼럼 없이, 다른 조건으로 조인할 때 사용.
같은 조건이 아닌 크거나 작은 경우 JOIN을 수행하는 방법.

SELECT
  A.employee_id, A.first_name, A.salary,
  B.grade
FROM
  employees A, salarygrade B
WHERE
  A.salary BETWEEN B.losalary AND B.hisalary;

HR 테이블에서는 적절한 예제가 없다.
위 예제도 salarygrade라는 테이블이 따로 필요함.
정상은 아님.


SELF JOIN

자기 자신의 테이블을 조인하는 것.

SELECT
    A.열 이름, B.열 이름
FROM
    테이블 1 A, 테이블 1 B
WHERE
    테이블 1.열 이름 1 = 테이블 1.열 이름 2
SELECT
    A.employee_id, A.first_name, A.last_name, A.manager_id,
    B.first_name|| ' ' ||B.last_name AS manager_name
FROM
    employees A, employees B
WHERE
    A.manager_id = B.employee_id
ORDER BY
    A.employee_id;

OUTER JOIN

조건을 만족하지 않는 행도 모두 출력하기 위해 사용.
조인시 값이 없는 테이블 측에 (+)연산자를 붙임.

SELECT
    A.열 이름1, B.열 이름 2
FROM
    테이블 1 A, 테이블 2 B
WHERE
    테이블 1.열 이름 = 테이블 2.열 이름(+)
SELECT
    A.employee_id, A.first_name, A.last_name,
    B.department_id, B.department_name
FROM
    employees A, departments B
WHERE
    A.department_id = B.department_id(+)
ORDER BY
    A.employee_id DESC
SELECT
    A.employee_id, A.first_name, A.last_name,
    B.department_id, B.department_name
FROM
    employees A, departments B
WHERE
    A.department_id(+) = B.department_id
ORDER BY
    A.employee_id DESC

ANSI JOIN

ANSI / ISO SQL 표준인 LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN을 지원.
ANSI JOIN이 명시적을 표형하기 때문에 더 가독성이 좋은 느낌.

INNER JOIN

그냥 묶을 때 사용.
INNER 생략 가능.

SELECT
    DISTINCT(E.department_id), D.department_id
FROM
    employees E
INNER JOIN
    departments D
ON
    E.department_id = D.department_id;

LEFT OUTER JOIN

(+) 기호 대신 명시적으로 사용.
오른쪽 테이블에 조인 시킬 값이 없는 경우 사용.

SELECT
    DISTINCT(E.department_id), D.department_id
FROM
    employees E
LEFT OUTER JOIN
    departments D
ON      
    E.department_id = D.department_id;

RIGHT OUTER JOIN

왼쪽 테이블에 조인 시킬 값이 없는 경우 사용.

SELECT
    DISTINCT(E.department_id), D.department_id
FROM
    employees E
RIGHT OUTER JOIN
    departments D
ON
    E.department_id = D.department_id;

FULL OUTER JOIN

양쪽 모두 OUTER JOIN을 걸어야 하는 경우 사용.

SELECT
    DISTINCT(E.department_id), D.department_id
FROM
    employees E
FULL OUTER JOIN
    departments D
ON
    E.department_id = D.department_id;ㅋ

cross join은 뭐지?

728x90
반응형

'Database' 카테고리의 다른 글

[PostgreSQL] Windows에서 Data Directory 변경하기  (0) 2020.01.09
[SQL] SET OPERATOR  (0) 2019.12.27
[SQL] GROUP  (0) 2019.12.26
[SQL] 데이터를 가공하기 위한 DB 함수들  (0) 2019.12.26
[SQL] 조건절 WHERE  (0) 2019.12.24

GROUP BY

한 테이블 내의 특정 컬럼을 기준으로 그룹화 하여 테이블의 행들을 그룹별로 구별해야 한다면,
GROUP BY를 이용하여 같은 값을 갖는 행끼리 그룹화할 수 있음.

  SELECT    `기준 열`, 그룹 함수( 열 이름 )     --  4
  FROM      테이블 이름                        --  1
  [WHERE    조건 식]                         --  2
  GROUP BY  열 이름                         --  3
  [ORDER BY 열 이름]                         --  5

논리 순서

  1. 테이블 접근.
  2. WHERE 조건에 맞는 데이터를 고름.
  3. 기술될 기준 열을 기준으로 같은 데이터 값끼리 그룹화.
  4. 결과를 출력.
  5. ASC 혹은 DESC로 정렬.
    • SELECT 절에 기준 열과 그룹 함수가 같이 지정되면,
      GROUP BY 절의 기준 열 이름이 반드시 기술되어야 함.
      ( SELECT 절에 그룹 함수만 기술되고, 열 이름이 기술되지 않으면,
      GROUP BY 절을 반드시 기술할 필요는 없음. )
    • WHERE 절을 사용하면 행을 그룹으로 묶기 전에 앞서 조건식이 적용됨.
    • SELECT 절에 그룹 함수를 사용하지 않아도 GROUP BY 절만으로 사용할 수 있음.
SELECT
  job_id AS 직무, SUM(salary) 직무별_총급여, AVG(salary) 직무별_평균급여
FROM
  employees
WHERE
  employee_id >= 10
GROUP BY
  job_id
ORDER BY
  직무별_총급여 DESC,
  직무별_평균급여;

그룹에 대한 그룹

SELECT
  job_id AS 대그룹,
  manager_id AS 중그룹,
  SUM(salary) 그루핑_총급여,
  AVG(salary) 그루핑_평균급여
FROM
  employees
WHERE
  employee_id >= 10
GROUP BY
  job_id,
  manager_id
ORDER BY
  그루핑_총급여 DESC,
  그루핑_평균급여;

HAVING

연산된 그룹 함수 결과에 조건 적용하기.
SELECT 절에서 WHERE로 조건을 주어주듯,
HAVING으로 GROUP BY에서 조건식을 적용할 수 있음.

  SELECT    열 이름, 그룹 함수(열 이름)  -- 5
  FROM      테이블 이름                -- 1
  [WHERE    조건식]                   -- 2
  GROUP BY  열 이름                   -- 3
  [HAVING   조건식]                   -- 4
  [ORDER BY 열 이름]                  -- 6

논리 순서

  1. 테이블 접근.
  2. WHERE 조건식에 맞는 데이터 값을 고름.
  3. 기술된 기준 열을 기준으로 같은 데이터 값끼리 그룹화.
  4. 그룹화된 값에 대해 조건식을 적용.
  5. 결과를 가져옴.
  6. ASC, DESC로 정렬.
SELECT
  job_id AS 직무,
  SUM(salary) 직무별_총급여,
  AVG(salary) 직무별_평균급여
FROM
  employees
WHERE
  employee_id >= 10
GROUP BY
  job_id
HAVING
  SUM(salary) > 30000
ORDER BY
  직무별_총급여 DESC,
  직무별_평균급여;

HAVING과 WHERE의 비교

WHERE HAVING
조건을 사용하여 결과를 제한 그룹의 결과를 제한
테이블에서 특정 조건에 부합하는 자료만을 검색 할 때 사용 그룹함수를 적용해서 나온 값 중에서 원하는 조건에 부합하는 자료만 산출할 때 사용
단순 컬럼 그룹함수

DQL의 실행 순서 재정리

  SELECT            -- 5
  FROM              -- 1
  [WHERE            -- 2
  GROUP BY          -- 3
  [HAVING           -- 4
  [ORDER BY 열 이름]  -- 6

그룹 함수를 GROUP BY와 함께 봐야 할까?

728x90
반응형

'Database' 카테고리의 다른 글

[SQL] SET OPERATOR  (0) 2019.12.27
[SQL] JOIN  (0) 2019.12.27
[SQL] 데이터를 가공하기 위한 DB 함수들  (0) 2019.12.26
[SQL] 조건절 WHERE  (0) 2019.12.24
[SQL] 데이터 조회 SELECT  (0) 2019.12.23

FUNCTION

DB에서 제공하는 미리 정의 된 기능.

  • 데이터 값을 계산하거나 조작. (단일 행 함수)
  • 열의 데이터 타입을 변환.
  • 행의 그룹에 대해 계산하거나 요약. (그룹 함수)

DUAL 테이블

쿼리문의 수행 결과가 하나의 ROW로 출력되기 위한 DUMMY 컬럼만 갖고 있음.
함수를 위한 임시 테이블 같은 개념.

단일 행 함수 : 데이터 값을 계산 혹은 조작

  • 각 행에 대해 수행.
  • 데이터 타입에 맞는 함수를 사용 해야 함.
  • 행렬로 하나의 결과를 반환.
  • SELECT, WHERE, ORDER BY 절 등에서 사용 가능.
  • 함수 속의 함수로 중첩해서 사용 가능.

단일 행 함수의 종류.

종류 DESC
문자 타입 문자를 입력받아 문자와 숫자를 반환.
숫자 타입 숫자를 입력받아 숫자를 반환.
날짜 타입 날짜 연산, 날짜 값 반환.
변환 타입 임의의 데이터 타입의 값을 다른 데이터 타입으로 변환.
일반 함수 NVL, DECODE, CASE, WHEN, 순위 함수 등.

문자 처리 함수

     
lower 소문자 반환 lower('fuck DB') = 'fuck db'
upper 대문자 반환 upper('fuck DB') = 'FUCK DB'
initcap 문자열의 첫글자 대문자, 나머지 소문자 initcap('fuck DB') = 'Fuck Db'
substr 문자를 잘라 추출 (한글1byte) substr('Welcome to Oracle',4,3) = 'com' substr('Welcome to Oracle',-4,3) = 'acl'
substrb 문자를 잘라 추출 (한글 2byte) substr('웰컴투오라클',3,4) = 투오라클, substrb('웰컴투오라클’,3,4) = 컴투
concat 문자의 값을 연결 CONCAT('fuck', ' DB')
length 문자의 길이 반환 (한글 1byte) length('오라클’) = 3
lengthb 문자의 길이 반환 (한글 2byte) lengthb('오라클’) = 6
lpad / rpad 입력 받은 문자열과 기호를 정렬하여 특정 길이의 문자열로 반환 "lpad('oracle',10,'#') = '####oracle'"
trim / ltrim / rtrim 잘라내고 남은 문자 표시 rtrim(' oracle ') = ' oracle'trim('a' from 'aaaORACLEaaa') = 'ORACLE'
convert char set으로 변환  
chr ascii 코드 값으로 변환  
ascii ascii 코드값을 문자로 반환 ascii('Oracle')
replace 문자열에서 특정문자 변경  
instr 특정 문자의 위치 반환 instr('Welcome to Oracle', 'o') = 5instr(대상,찾을글자,시작위치,몇번째발견)

숫자 처리 함수

     
round 특정 자릿수에서 반올림. ( -시 정수값도 가능) round(대상,(-)자릿수)
trunc 특정 자릿수에서 버림, 절단.( -시 정수값도 가능) trunc(대상,(-)자릿수)
ceil 올림  
floor 버림  
'' '' ''
abs 절대값 반환  
cos cosine  
exp e의 n승  
floor 소수점 아래를 자름 (버림)  
log log값 반환  
power power(man) m의 n승 반환  
sign sign(n) n<0이면 -1 n=0이면 0,n>0이면 1
sin sine값 반환  
tan tangent값 반환  
mod 입력 받은 수를 나눈 나머지값 반환. mod(대상,2) = 1 (java 에서 %)

날짜 처리 함수

날짜 연산

날짜 연산 DESC 반환값
Date + Number 날짜에 일수를 더한다. Date
Date - Number 날짜에 일수를 뺀다. Date
Date - Date 날짜에서 날짜를 뺀다. 일 수
Date + Number / 24 날짜에 시간을 더할 때는 시간을 24로 나누어서 날짜에 더한다. Date
SELECT
  TO_CHAR( SYSDATE, 'YY/MM/DD/HH24:MI' ),
  SYSDATE + 1,
  SYSDATE - 1,
  (SYSDATE + 1) - (SYSDATE - 7),
  SYSDATE + 13 / 24
FROM
  DUAL;

날짜 처리 함수

MONTH_BETWEEN 함수 외에는 모두 날짜 타입을 반환함.

     
sysdate 시스템상 현재 날짜 반환 sysdate+1 = 내일날짜
months_between 두 날짜 사이가 몇 개월인지 반환 between(date1, date2)
add_months 특정 날짜에 개월수 더함 add_months(date, number)
next_day 특정 날짜에서 최초 요일의 날짜 반환 next_day(date, 요일)sysdate, next_day(sysdate, '수')09.01.17, 09.01.21
last_day 해당 달의 마지막달 반환 last_day(sysdate) = 18.07.31
round 인자로 받은 날짜를 특정 기준으로 반올림 round(date, format)round(hiredate, month) = day < 16 = 이달.01, day > 16 = 담달.01
trunc 인자로 받은 날짜를 특정 기준으로 버림 trunc(date, format)

MONTHS_BETWEEN

두 날짜 사이의 개월 수 계산

  MONTHS_BETWEEN( 날짜, 날짜 )
SELECT
  SYSDATE, hire_date, MONTHS_BETWEEN( SYSDATE, hire_date )
FROM
  employees
WHERE
  department_id = 100;

ADD_MONTHS

월에 날짜 더하기

  ADD_MONTHS( 날짜, 숫자 )
SELECT
  hire_date,
  ADD_MONTHS( hire_date, 3),
  ADD_MONTHS( hire_date, -3)
FROM
  employees
WHERE
  department_id BETWEEN 100 AND 106; 

NEXT_DAY

돌아오는 요일의 날짜 개산하기

  NEXT_DAY( 날자, '요일' or 숫자 )
SELECT
  hire_date,
  NEXT_DAY( hire_date, 'Friday'),
  NEXT_DAY( hire_date, 6)
FROM
  employees
WHERE
  department_id BETWEEN 100 AND 106; 

LAST_DAY

돌아오는 월의 마지막 날짜 계산하기

  LAST_DAY( 날짜 )
SELECT
  hire_date,
  LAST_DAY( hire_date )
FROM
  employees
WHERE
  department_id BETWEEN 100 AND 106; 

ROUND, TRUNC

날짜를 반올림 혹은 절삭

  ROUND or TRUNC ( 날짜, 지정 값[MONTH, YEAR등] )
SELECT
  hire_date,
  ROUND( hire_date, 'MONTH' ),
  ROUND( hire_date, 'YEAR' ),
  TRUNC( hire_date, 'MONTH' ),
  TRUNC( hire_date, 'YEAR' )
FROM
  employees
WHERE
  department_id BETWEEN 100 AND 106; 

형 변환 함수

TO_DATE

날짜를 나타내는 문자열을 명시도니 날짜 형식으로 변환하는 함수

  TO_DATE( 문자열, '지정형식' )
SELECT
  TO_DATE( '20111217', 'YYYYMMDD')
FROM
  DUAL;

TO_NUMBER

숫자 타입의 문자열을 숫자 데이터 타입으로 변환하는 함수. 데이터 타입만 바뀜.

  TO_NUMBER( '숫자' )
SELECT
  TO_NUMBER('1234')
FROM
  DUAL;

TO_CHAR

숫자 값을 지정한 데이터 형식의 문자열로 변환

  TO_CHAR( 숫자 데이터 타입, '지정 형식' )
지정 형식 DESC EX RESULT
9 9로 출력 자릿수 지정 TO_CHAR( 42000, '99999999' ) ' 42000'
0 자릿수 만큼 0을 출력 TO_CHAR( 42000, '09999999' ) 00042000
$ 달러 TO_CHAR( 42000, '$9999999' ) $42000
L 지역 화폐 기호 TO_CHAR( 42000, 'L9999999' ) $42000
, 명시한 위치에 쉼표 TO_CHAR( 42000, '9,999,999' ) 43,000
. 명시한 위치에 소수점 TO_CHAR( 42000, '9999999.99' ) 42000.00

TO_CHAR

날자 값을 지정한 형식의 문자열 타입으로 면환

  TO_CHAR( 날짜 데이터 타입, '지정 형식' )
지정 형식 DESC
CC 세기
YY 연도
YEAR 문자 연도
Q 분기
MM 숫자값 월
MONTH 문자값 월
MON 문자값 약어 월
RM 로마자 월
W 년월의 주
DD 년월주의 일
DAY 요일이름
DY 요일 이름 약어

일반 함수

NVL

  NVL( 열이름, '치환 값' )

NULL 값을 치환 값으로 처리함.

SELECT
  salary * NVL( commission_pct, 1 )
FROM
  employees
ORDER BY
  commission_pct;

NVL2

  NVL2( COLUMN1, COLUMN2, COLUMN3 )

COLUMN1의 값이 NULL이면 COLUMN3를 출력 NULL이라면 COLUMN2를 출력.

DECODE

조건 논리 처리.
3항 연산과 같음.

  DECODE( 열 이름, 조건 값, 치환 값, 기본 값 )
SELECT
  first_name,
  last_name,
  department_id,
  salary as 급여,
  DECODE( department_id, 60, salary * 1.1, salary )   as 조정급여,
  DECODE( department_id, 60, '10%인상', '미인상' )    as 인상여부
FROM
  employees;
ORDER BY
  commission_pct;

CASE

복잡한 조건 논리처리 하기

CASE
  WHEN  조건 1  THEN  출력 값 1
  WHEN  조건 3  THEN  출력 값 2
  ...
  ELSE  출력 값 3
END
SELECT
  employee_id, first_name, last_name, salary,
  CASE
    WHEN salary >= 9000 THEN 'TOP'
    WHEN salary BETWEEN 6000 AND 8999 THEN 'MID'
    ELSE 'LOW'
  END AS salary_grade
FROM
  employees
WHERE
  job_id = 'IT_PROG';

RANK, DENSE_RANK, ROW_NUMBER

데이터 값에 순위 매기기

FUNC DESC EX
RANK 공동 순위를 출력하되, 공동 순위만큼 건너 뛰어 다음 순위 출력. 1, 2, 2, 4, ...
DENSE_RANK 공동 순위를 출력하되, 건너 뛰지 않고 이어서 다음 순위 출력. 1, 2, 2, 3, ...
ROW_NUMBER 공동 순위없이 순위 출력. 1, 2, 3, 4, ...
  RANK () OVER ( [PARTITION BY 열 이름] ORDER BY 열 이름)
SELECT
  employee_id, salary,
  RANK()       OVER( ORDER BY salary DESC ) AS RANK_SALARY,
  DENSE_RANK() OVER( ORDER BY salary DESC ) AS DENSE_RANK_SALARY,
  ROW_NUMBER() OVER( ORDER BY salary DESC ) AS ROW_NUMBER_SALARY
FROM
  employees;
SELECT
  A.employee_id, A.department_id, B.department_name, A.salary,
  RANK()       OVER( PARTITION BY A.department_id ORDER BY salary DESC ) AS RANK_SALARY,
  DENSE_RANK() OVER( PARTITION BY A.department_id ORDER BY salary DESC ) AS DENSE_RANK_SALARY,
  ROW_NUMBER() OVER( PARTITION BY A.department_id ORDER BY salary DESC ) AS ROW_NUMBER_SALARY
FROM
  employees A, departments B
WHERE
  A.department_id = B.department_id
ORDER BY B.department_id, A.salary DESC;

그룹 함수

집계 함수라고도 함.
단일 행 함수와 달리 여러 행에 대해 함수가 적용되어 하나의 결과를 나타내는 함수.
기준 열에 대해 같은 데이터 값 기리 그룹으로 묶고,
묶은 행의 집합에 대해 그룹 함수 연산이 필요하다면 GROUP BY 절을 이용하여 처리할 수 있음.
묶은 그룹에 대해 조건이 필요하다면 HAVING 절을 이용함.

그룹 함수의 사용법

  SELECT  그룹함수( 열 이름 )
  FROM    테이블 이름
  [WHERE 조건식]
  [ORDER BY 열 이름]

주요 그룹 함수

예제 생략

FUNC DESC EX  
count 행 개수를 셈 count(comm) NULL값도 셈
sum 합계 sum(comm)  
avg 그룹의 평균 avg(salary)  
max 그룹의 최댓값 max(salary)  
min 그룹의 최소값 min(salary)  
stddev 그룹의 표준편차    
variance 그룹의 분산    
728x90
반응형

'Database' 카테고리의 다른 글

[SQL] JOIN  (0) 2019.12.27
[SQL] GROUP  (0) 2019.12.26
[SQL] 조건절 WHERE  (0) 2019.12.24
[SQL] 데이터 조회 SELECT  (0) 2019.12.23
DB(Database)란  (0) 2019.12.23

+ Recent posts