MSSQL ?

Microsoft SQL Server의 약어로,

마이크로소프트에서 개발한 관계형 데이터 베이스 관리 시스템(RDBMS) 입니다.

 

Query ?

문의하다, 질문하다.

데이터베이스에 정보를 요청하는 일.

DB에서 원하는 조건에 맞는 데이터를 조작할 수 있는 SQL 문장의 집합

= 질의문


Employees Table

 

VacationRequests Table

 

 

 

WITH

일시적인 서브쿼리를 생성하는 방법

 

서브쿼리

WITH 절 뒤에 정의하며, 이 서브쿼리 결과를 참조 할 수 있습니다.

→ 공통 테이블 식(Common Table Expression, CTE)라고도 부릅니다.

 

코드의 가독성을 높이고, 중복을 줄일 수 있습니다.

 

WITH 절과 함께 서브 쿼리 사용 예시

임시 테이블 1개

start_date 1월1일 ~ 1월31일 내에 있는 요청 리스트

 

CTE : jan_vacation 임시 테이블에 휴가 정보 저장(1월 start)

JOIN : Employees와 jan_vacation을 employee_id와 request_id로 연결

SELECT : 직원의 이름과 휴가 기간 및 유형 출력

 

 

임시 테이블 2개

CTE : janS_vacation 임시 테이블에 start_date가 1월인 데이터,

janE_vacation 임시 테이블에 end_date가 1월인 데이터를 저장

JOIN : employee_id, request_id를 기준으로 연결

SELECT : 직원의 이름, 휴가 기간(start/end), 유형 출력

 

 

 

ROLLUP

그룹 함수로 집계된 데이터에서 소계, 합계를 쉽게 구하기 위함

 

ROLLUP(dept_name, vacation_type) : 그룹화 된 결과에 누적된 합을 추가

  • dept_name과 vacation_type으로 그룹화
  • 그룹 컬럼으로 지정된 컬럼에 대하여 소계와 합계 집계

++NULL이 아닌, ‘소계, 합계’ 로 label 표시

CASE+GROUPING

GROUPING(dept_name)이 1이면(isNull), ‘합계’ 출력

→ NULL을 반환하는 부서 합계를 의미

GROUPING(vacation_type)이 1이면, ‘소계’ 출력

→ vacation_type 별로 각각의 합계를 의미

 

++GROUPING

생성된 NULL값을 구별할 때 사용

NULL은 그룹화된 label을 나타내므로, 이를 실질적인 값으로 교체하거나 지정할 때 유용

 

++IIF

삼항 연산자 형태로 사용, 조건식에 따라 두 값 중 하나를 반환

CASE 말고 IIF 사용해도 같은 결과 도출

 

 

 

PARTITION BY

어떤 항목을 기준으로 테이블을 분리하여 순위나 순서를 나타낼 때 사용

 

WITH 절로 vacation_count 라는 임시 테이블 생성

++RANK()

SQL 윈도우 함수로, 기준에 따라 순위를 매김

++OVER

윈도우 함수가 동작할 범위를 지정

+++ORDER BY COUNT(*) DESC

각 부서에 해당되는 행의 수를 센 뒤, 가장 많이 사용한(큰 수) 것 부터 순위를 매기겠다는 의미

 

PARTITION BY dept_name

dept_name 별로 나누고, 그 안에서 순위를 정함

 

 

 

MERGE

변경할 테이블에 데이터가 존재하는지 체크하고,

UPDATE, DELETE, INSERT를 한번에 작업이 가능.

 

MERGE INTO 변경할 테이블

USING 비교할 테이블 | 서브 쿼리

ON 조건문

WHEN MATCHED THEN

조건을 만족할 경우

UPDATE

DELETE

WHEN NOT MATCHED THEN

조건을 만족하지 않을 경우

INSERT

 

테이블을 비교하여, 조건에 해당될 때 UPDATE 되도록

 

 

 

++추가 쿼리 연습

고급 SQL 쿼리 연습 문제 (10개)

 

1. 직원과 부서 정보 결합 (INNER JOIN)

 

2. 각 부서별 직원 수 조회 (GROUP BY, HAVING)

 

3. 프로젝트에 참여한 직원 조회 (INNER JOIN)

 

4. 특정 프로젝트에 참여한 직원들의 급여 평균 (JOIN, GROUP BY)

5. 급여가 평균 급여 이상인 직원 조회 (WITH, SUBQUERY)

6. 프로젝트별 직원의 참여 순위 (PARTITION BY, RANK)

7. 모든 직원의 급여 합계와 각 직원의 급여 비율 (ROLLUP)

8. 부서별 직원 리스트와 해당 프로젝트 이름 조회 (JOIN, WITH)

9. Project Beta에 참여하지 않은 직원 조회 (NOT IN)

10. 가장 오래된 직원부터 최근 입사한 직원 순으로 급여 조회 (PARTITION BY)

원래 게시글

네이버 블로그에 작성된 글을 tistory로 옮기겠습니다!

 


 

[STS 다운로드 및 JDK 다운로드]

구글창에 sts다운로드 검색

 

 
                                                 밑으로 내려서 sts3버전 다운로드 누르기 (파란색 글씨)
 

파일 다운로드 클릭

 

 

 

다운로드 한 압축 파일 이름을 sts-bundle로 변경하고

Program Files에서 압축 풀기

 

Program Files > Java > scripts 파일 생성

 

 

 

 

 

 


 

 

 

JDK 11버전 다운로드 필요

https://www.oracle.com/kr/java/technologies/javase/jdk11-archive-downloads.html

 

 


 

[환경 변수 설정]

 

 

 

Win > 시스템 환경 변수 편집 > 환경 변수 > 시스템 변수 > JAVA_HOME 편집 >

변수 값 jdk11로 변경

 

 

 

path 편집 > 새로 만들기 >C:\Program Files\Java\scripts > 확인

 

 


 

 

[java11, 17 bat 파일 생성하기]

 

 

배경화면에 메모장으로 bat 파일 생성 후 scripts로 옮기기

 

 

 

@echo off

set JAVA_HOME=경로

set Path=%JAVA_HOME%\bin;%Path%

echo Java 버전 activated.

java -version

 

옮긴 후 cmd 켜서 java11입력 해보고 java17입력해보고 버전 확인하기

 

 

 

 

 

STS 구성 설정(.ini) 파일 수정

 

vmargs 위에 -vm ~ 붙여넣기

(vmargs 보다 위에 작성되어야 함 안그러면 오류남)

 

 

-vm

C:/Program Files/Java/jdk-11/bin/javaw.exe

 

 

jdk-11 > bin > javaw.exe 파일의 경로

 


 

[lombok 다운로드]

https://projectlombok.org/download

 
 
구글창에 lombok 다운로드 검색
 

 

 

 

 

 

1.18.2 버전 다운로드

 

1.18.2버전 다운로드 후 더블클릭으로 설치하려고 하면

권한이 없어서 안된다고 뜸

해결 방법 ->

관리자 모드로 cmd 키고

cd 파일 위치(jar파일)

java -jar lombok-버전.jar

입력 후 설치 진행

 

 

 

완료가 되면,

 

 

 

sts-3.9.17.RELEASE 폴더에 lombok 생성

 

 

STS ini 파일에 마지막 줄 자동으로 추가 됨

 


 

+ [파일 import하는 방법]

 

 

 

import >

 

 

 

Existing Projects into Workspace >

 

 

 

 

파일 경로에 맞게 Browse

 


+ 외부 라이브러리 참조 (Maven 저장소)

Ctrl + F 라이브러리 이름

-> 검색 결과 없을 때

 

 

구글창에 maven repository 검색

 

 

 

https://mvnrepository.com/

없는 라이브러리 이름 검색 후

 

 

제일 많은 다운로드 수, 최신 파일 다운로드 추천

 

 

 

 

 

 

pom.xml에 </dependencies> 태그 안에

복사해서 추가

 

 

 

 

메이븐 업데이트 실행

 

 

 

 


 

+ 검색 방법

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

원래 게시글

네이버 블로그에 작성된 글을 tistory로 옮기겠습니다!

 


 

[개념 익히기]

DAO 란?

Data Access Object ;DAO

DB의 데이터에 접근하기 위한 객체

+

싱글톤 패턴

: 한개의 인스턴스로만 작성할 수 있도록 클래스 설계 (메모리 효율)

1. 생성자 private

2. 인스턴스 생성 private

3. (외부에서 사용 못하게) getter만 생성

DTO 란?

Data Transfer Object ; DTO

계층간(Controller, View ...) 데이터 교환을 위한 Java Bean

+

getter / setter / toString()

 

 

VO 란?

Value Object ; VO

Read-Only의 속성을 가진 오브젝트 (getter 기능만 존재)

 
 

util > DBManager.java

 

DAO를 작성하다보면, 공통적인 부분이 존재한다.

예를 들면,

DAO에서 DB연결을 관리하는 부분인 Connection

+ getConnection()메소드에서 DB를 연결하는 코드가 작성 됨

그리고 DAO의 메소드 내에서

반복적인 부분이 있습니다.

  1. 네트워크를 통해 DB와 연결을 맺는 단계(Connection)
  2. DB에 보낼 SQL을 작성하고 전송하는 단계(Statement)
  3. DB가 보낸 결과를 받아서 처리하는 단계(ResultSet)
  4. DB와 연결을 종료하는 단계(.close())

로 진행되는데,

바로 .close()부분이 반복됩니다.

결과값을 rs에 셋팅하거나, executeUpdate()를 통해 int값을 반환하면

rs를 닫거나 안닫는 2가지의 상황이 생기게 됩니다.

그래서,

같은 이름(close)의 파라미터가 수가 다른 2개의 메소드를 생성하면 됩니다.

DBManager를 생성했으니 적용해볼게요.
 
 

 

먼저 DAO에서

 

 

DBManager를 import 해줍니다.

그리고 DAO 내에서는

 
 
 

DBManager의 메소드 getConnection()을 호출해줍니다.

DAO의 각 메소드 내에서는 파라미터에 맞게

 

이와 같이 사용하면 됩니다.

 

원래 게시글

네이버 블로그에 작성된 게시글을 tistory로 옮기겠습니다!

 


 

 

앗농하세용

오늘은!!

이클립스에서 웹 개발 프로젝트 생성하는 방법 +

톰캣 연결하는 방법을 정리해보았습니다.

이클립스를 실행시킨 후

 

 

 

파일 저장할 workspace 생성 후, Browse하기

저는 두번째 워크스페이스라서 이름을 webworkspace2로 했습니다.

 

 

 

 

File > New > Dynamic Web Project

클릭 하여 프로젝트 생성

 

프로젝트 이름 설정하고, New Runtime 클릭

 

 

 

Apache > v9.0 선택 후 Next >

 

 

Browse 눌러서

 

 

 

 

파일 위치

 

 

 

jdk-17 선택

 

이렇게 뜨면 됩니다.

그리고 next를 누르면

 

 

 

이게 떠요

한번 더 누르면

 

Finish!

 

 


 

 

[Server 설정]

 

 

Window > Show View > Servers

를 누르면,

 

이렇게 뜹니다.

하단에 Servers 에 뜬 링크를 클릭합니다

 

Apache>9.0 선택하고

Next>

 

 

이 창이 뜰 때 example01을 더블 클릭하면(혹은 Add>)

 

 

오른쪽에 로드 됩니다.

그 후 Finish

 

 

하면 이렇게 Servers 가 생깁니다.

 

 

 

더블 클릭하면

 

 

이게 뜹니다.

Ports에서 PortNumber를 변경해줍니다.

뒷 자리만(일의자리) 변경해주면 편리해요.

그리고 밑에 Modules를 눌러줍니다.

 

 

 

이 경로를 수정해줍니다.

옆에 Edit를 누르면

 

 

 

이 창이 뜨는데 Path를 /만 남기고 지워줍니다.

 

 


 

 

테스트를 위한 jsp 파일 생성

 

 

간단하게 작성 후 Run버튼을 누르면 이 창이 뜹니다.

저는 그냥 매번 귀찮아서 밑에 체크하고 Finish 누릅니다.

 

 

화면이 잘 뜹니다.

 

 


 

추가로 한글 깨짐 현상 해결 방법을 알려드릴게요.

Window > Preferences

 

 

 

Content Types를 검색한 뒤

저는 관련 파일 웬만한거 다 Default encoding을

UTF-8로 변경해주었어요.

 

CssJsp도 검색해서 Encoding 선택을 UTF-8로 해줍니다

 

 

 

이렇게 UTF-8로 바뀐걸 볼 수 있어요.

원래 게시글

네이버 블로그에 작성된 게시글을 tistory로 옮기겠습니다!

 


 

JDBC(Java Database Connectivity)

Eclipse에서 사용 가능하도록 DB를 연결하는 과정을 설명하도록 하겠습니당

 

https://dev.mysql.com/downloads/connector/j/

 

검색창에 mysql jdbc download를 검색하거나,

이 링크에 들어가서 다운로드를 진행합니다.

 

 

 

Platform Independent 를 선택하면

 

 

 

 

다운로드 항목이 두 개가 뜨는데, 밑에 압축된 파일다운로드 해줍니다

No thanks, just start my download. 를 눌러서 다운로드 진행해주고,

 

 

다운로드 된 파일 압축을 풀어주면 파일이 생성됩니다.

 

 

 

 

파일을 눌러보면 mysql-connecotr-j-버전 의 Jar file이 있습니다.

이 파일을 복사하여,

 

 

src > main > webapp > WEB-INF > lib 파일에 붙여넣어 줍니다.

 

 

 

이클립스를 실행해서 project explorer를 보면 파일이 있는 것을 볼 수 있습니다.

 

 

 

project explorer에서 Servers > Tomcat > server.xml을 눌러서

 

 

맨 밑에 Context 태그를 확인합니다.

webstudy뒤에 /를 지우고

태그를 닫아주는 </Context>를 쓰고

Context 태그 사이에

 

 

 

<Resource auth="Container" driverClassName="com.mysql.cj.jdbc.Driver" maxIdle="30" maxTotal="100" maxWaitMillis="10000" name="jdbc/TestDB" password="비밀번호" type="javax.sql.DataSource" url="jdbc:mysql://localhost:호스트/스키마" username="유저이름"/>

를 작성해줍니다.

비밀번호와 호스트 번호, 스키마 명, 유저이름은

본인 프로젝트에 맞게 작성해주면 됩니다.

 

 

 

 

이렇게 작성되면 연결 완료입니다!

 

 

 


+ JDBC 프로그램 작성 순서 정리

원래 게시글

네이버 블로그에 작성된 게시글을 tistory로 옮기겠습니다!

 


 

오늘은 외부 라이브러리 참조하는 방법에 대해 설명하려고 합니다.

https://mvnrepository.com/

이 링크를 들어간 뒤에,

 

 

검색창에 "JSTL"을 검색합니다

 

 

 

 

두번째 JSTL을 선택

 

 

 

들어가서 1.2.x 누르기

 

 

 

 

jar(404KB) 누르기

 

 

 

 

다운로드 확인

 

 

 

이클립스 Project Explorer에서

src / main / webapp / WEB-INF / lib 에 파일을 붙여넣기

 

 

하거나,

 

라이브러리를 참조해야하는 jsp 파일 상단에 아래 태그 사용하기

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

(그대로 복사 붙여넣기 하면 됩니다)

원래 게시글

네이버 블로그에 게시된 글을 tistory로 옮기려고 합니다.

 


 

쿄쿄..

잠시 객체지향2 파트는 아직 정리가 덜 되어서..

mysql 다운로드 방법

먼저 정리해보도록 하겠습니댜..

검색창에 <mysql 다운로드> 라고 검색부터 합니다.

 

제일 첫번째 링크를 클릭하고 쿠키 허용

https://dev.mysql.com/downloads/installer/

 

Windows (x86, 32-bit), MSI Installer (285.3M) 를 다운로드 합니다.

로그인 하라는 화면이 뜨지만,

No thanks, just start my download. 를 누릅니다.

다운로드 된 파일을 실행시킵니다.

 

Full, Custom 둘중에 하나 선택하는데

저는 Full 선택하였습니다.

 

 

 

 

Execute 하면 사진과 같이 다운로드 되다가

마지막에 초록색 체크 표시가 다 뜨면 Next를 누릅니다.

 

 

 

별 다른 설정 없이 Next 누릅니다

 

 

 

비밀번호를 설정하고, Next를 누릅니다

 

 

Workbench에서

Local instance 누르고 비밀번호 입력하면

끝입니다!! 간단하죠?

 

 


 

 

 

간단한 예제 하나 해볼게요!

 

 

 

회원 테이블을 만들거예요.

 

 

"shop" 스키마를 생성해줍니다.

 

 

 

shop 스키마 안에, 테이블을 생성해줍니다.

 

 

예제처럼 memberTBL 테이블을 생성할게요.

 

 

 

NN = Not Null

공백을 허용하지 않는다는 의미

PK = Primary Key

기본 값(중복X)

예제에 맞게 체크해줍니다.

Apply를 누르면,

이렇게 생성됩니다.

 

 

 

테이블 > membertbl -> Cloumns

 

원래 게시글

네이버에 등록된 글을 tistory로 옮겨볼게요!


 

안녕하세용

오늘은 객체지향에 대해서 정리해보려고 합니다

객체지향 언어를 사용하는 이유는

 

1. 코드의 재사용성이 높다.

2. 코드의 관리가 용이하다.

3. 신뢰성이 높은 프로그래밍을

가능하게 한다.

 

이 3가지 이유 때문인 걸 알고 있어야 합니다.

그 전까지는 우리가

절차적 언어를 사용하여 프로그래밍을 했다면, 

조립을 하듯, 필요한 순간에

필요한 부품을 사용하여 만드는 것 처럼

프로그래밍을 하는 게 

객체지향 프로그래밍이라고 생각하면 좋을 것 같아요.

 


<클래스>

- 객체를 정의해 놓은 것

- 객체의 설계도, 또는 틀

ex) 붕어빵 기계, TV 설계도

-> 객체를 생성하는 데 사용

<객체 ; 인스턴스>

클래스에 정의된 내용대로 메모리에 생성된 것

ex) 붕어빵, TV

[객체의 구성 요소]

- 속성(멤버 변수 / 붕어빵 길이, 크기)

- 기능(메소드 / 붕어빵 뒤집기, 붕어빵 반죽 짜기)

두 종류의 구성 요소로 이루어져 있습니다.

이 두 가지를 합쳐서 멤버(속성/기능)라고 합니다.

인스턴스화

클래스 ------------> 객체(인스턴스)

; (붕어빵)객체는 (붕어빵 기계)클래스의 인스턴스

<인스턴스의 생성 / 사용>

클래스명 (참조)변수명 = new 클래스명();

 

 

 

 

 

<변수>

 

선언 위치에 따른 변수 종류

 

[인스턴스 변수]

- 독립적인 저장 공간을 가짐

- 서로 다른 값 가질 수 있음

[클래스 변수]

- 변수 앞에 static 붙임

- 공통된 저장 공간을 공유

- 모든 인스턴스들이 공통적인 값을 유지해야 하는 경우 사용(붕어빵 사이즈)

[지역 변수]

- 메소드 내에서만 사용 가능(임시)

<메소드 선언>

반환타입   메서드이름    ( 매개변수(입력) )  {

(지역변수)

return   반환타입 ;

}

// 반환타입 없는 것 = void – return;

[인스턴스 메소드]

- 객체를 생성해야만 호출 가능

[클래스 메소드]

- 메소드 앞에 static

- 객체를 생성하지 않고

" 클래스이름.메소드이름(매개변수) "로 호출 가능

- 인스턴스 변수를 사용하기 위해서 객체 생성 필요

<오버로딩>

- 한 클래스 내에 같은 이름의 메소드 여러개

- 메소드 이름이 같아야 함

- 매개변수의 개수 도는 타입이 달라야 함

ex)

붕어빵(더큰, 피자){

}

붕어빵(팥){

}

<생성자>

- 인스턴스 초기화 메소드

+ 인스턴스 초기화는 인스턴스 변수들을 초기화하는 과정

- 클래스 이름과 같아야 함

- 리턴 값이 없음

- 객체 생성 할 때, new 뒤에 오는

"클래스이름()"이 생성자

+

매개변수가 없는 생성자는 기본(default) 생성자

: 생성하지 않아도 자동으로 생김

만일, 생성자에서 다른 생성자를 호출 하려면

- 첫째 줄에 this() 혹은this(매개변수)

<변수 초기화>

 

클래스가 무조건 인스턴스보다 먼저 초기화 진행

static {

//클래스 초기화 블록

}

{

//인스턴스 초기화 블록

}

 


예시

(제가 그냥 아무 내용 없이 한거니까 모양만 보세요,,)

main
 

class

원래 게시글

네이버 블로그에 작성된 글을 tistory로 옮겨볼게요!

 


 

안녕하세요!

제가 오늘은 메소드 사용 없이

배열 늘리는 방법에 대해 설명하려 합니다.

이 방법을 제가 사용해 본 적이 없었어서

까먹을까봐 설명을 해보려고 해요..🙊

순서는!

1. 배열을 새로 생성

2. 값을 복사

3. 참조 변수 변경

좀 더 추가해보자면,

1. 늘리고 싶은 길이의 배열 생성

2. 원래 배열에서 새로운 배열로 값 복사(for문)

3. 새로운 참조 변수->원래 참조 변수 주소 변경


예시로 볼게요.

int[5] -> int[10]

5개의 값을 더 저장하려고 해볼게요

중요한건, 결과적으로 배열을 출력할땐

배열의 이름이 같다는 거예요.

길이는 늘어났지만!

1. 새로운 배열 생성하기

먼저 배열을 선언해줍니다.

원래 배열의

참조 변수는 exam,

새로운 배열은 nexam

 

주소도 먼저 확인 해줄게요.

둘의 주소가 다릅니다.

 

일단, 배열에 값을 저장할게요.

exam배열의 길이는 처음 선언한대로 5

그리고, 10~50까지의 수를 저장했습니다.

2. 새로운 배열에 원래 배열 값 복사하기

 

이렇게 하면

nexam[0] ~[4]에

exam[0] ~ [4]의

값이 저장되었죠.

 

이렇게 저장이 돼요.

3. 참조 변수 변경

배열 exam[] 과 nexam[]의 참조변수는

각각 exam 과 nexam이에요.

exam변수를 호출했을때 nexam의

주소 값을 호출해야 하니까

nexam의 주소 값을 exam에 넣어줄게요.

 

exam = nexam

하면 주소가 같아져요.

그럼 exam을 호출해도 nexam이 나오겠죠!

 


<결과>

exam[]을 출력하면

원래 5개의 배열이 아닌

늘어난 10개의 배열이 출력됩니다!!

메소드를 사용하면 더 편리할 수도 있겠지만

이 방법도 알아두면 좋을 것 같아요

그럼 앗뇽!

원래 게시글

네이버 블로그에 있는 게시글을 tistory로 옮겨볼게요!


 

 

안녕하세용

오늘은 주석 처리에 대해 알아보고

블록 주석 오류 해결법에 대해 알아보겠습니다!

주석 처리 단축키는 기본적으로

Ctrl + /

입니다. (한줄)

근데 저는 보통 //을 직접 입력해 주는 편이에요.

차이가 있다면,

26번줄은 직접 입력한 것,

27번줄은 단축키를 사용한 모습입니다.

한번에 여러 줄을 주석처리 해줄 땐

Ctrl + Shift + /

해제

Ctrl + Shift + \

 


근데 여기에서 한가지 문제점이 있는데요!

블록 주석 처리 했을 때

한줄씩 되는 오류가 있었어요.

 

 

이럴때 해결 방법은, 상단 툴

Window -> Preferences 를 누르고

검색 창에 Formatter를 입력해요.

그러면 여러개가 뜨는데 그 중

Java / Code Style / Formatter를 누르고

 

New를 누릅니다.

 

누르면 Profile name이 비어있을 텐데요

Formatter를 입력하고

Comments를 확장한뒤,

Enable block comment formatting

체크 해제 해줍니다!

그러면 지금처럼 블록 주석처리가 깔끔하게 돼요!

+ Recent posts