ms-sql에는 재귀함수와 같은 역할을 하는 문법이 존재한다. 이는 단순 쿼리에서 파생되며 단일 select, insert, update, delete 또는 merge문 실행 범위 내에서 정의됨 CTE는 비재귀적 CTE와 재귀적 CTE로 구분 할 수 있습니다. 재귀적이라는 의미는 자기 자신을 반복적으로 호출하는 것을 의미합니다. (BOM, 부서계층그룹에 해당) 비재귀적은 단순한 형태의 쿼리를 얘기하며, 복잡한 쿼리 문장을 단순화 시키는데 적합하게 사용될 수 있습니다. 기본 문법 ;WITH CTE_테이블이름(열이름) AS ( ) SELECT 열이름 FROM CTE_테이블이름; WITH 키워드 다음에는 CTE의 이름을 지정하고 그 다음에는 선택적인 열 별칭 목록을 지정합니다. 열 별칭은 CTE 내의 sele..
Temp Table 임시테이블은 말 그대로 tempdb에 임시적으로 만들어지는 table로서 특징에 따라 지역임시테이블과 전역임시테이블로 나눌 수 있습니다. 지역임시테이블은 table이 생성되는 session이 끝나면 자동으로 삭제됩니다. 하지만 보통 임시로 사용하려고 잠깐 생성하는 것 이기에 지역 임시 테이블로 많이 사용하고 지웁니다. 임시테이블을 생성하려면 table 생성시 이름 앞에 #을 추가함으로써 이 테이블이 임시테이블임을 알립니다. #이 하나면 지역임시테이블 ##이면 전역임시테이블이 됩니다. SELECT A.CUSTOMER_ID, A.CUSTOMER_NAME, B.SEQ_NO, B.AMOUNT INTO #TEMP FROM CUSTOMER A JOIN SALE_DATA B ON A.CUSTOME..
문제. 1. [order]라는 주문 테이블에서 2번이상 주문된 메뉴와 그 메뉴의 타입을 제외해라 2. 제외된 음식들 빼고 나머지 음식들의 주문 갯수를 출력. --select절에서 count하기 select menuno, name, (select count(*) from [order] where menuno = s.MENUNO) as '주문 개수' from ordersheet s where type not in (select type from ordersheet where menuno in (select menuno from [order] group by MENUNO having count(*)>1)) ; 설명 : 1. [order]에서 menuNo로 group by해서 주문된 수가 1보다 큰 메뉴번호를 ..
select로 insert 하기 1. insert into 삽입될 테이블(컬럼 나열1, 컬럼 나열2 ...) select (컬럼 나열1, 컬럼 나열2 ...) from 참고할 테이블 where 조건(조건은 없어도 됨) 위와 같이 select문으로 검색된 데이터를 첫 번째 줄에 있는 테이블에 해당 컬럼으로 넣는다. 그리고 insert into방식에서 삽입될 테이블은 반드시 미리 생성하고 사용해야 한다. INSERT INTO BACKUPROWDATA(EMPNO, NAME, MENUNO, MENUNAME, ORDERDATE, BACKUPDATE) SELECT B.EMPNO, B.NAME, C.MENUNO, C.MENUNAME, A.ORDERDATE, GETDATE() AS BACKUPDATE FROM [Ord..

HTTP 와 HTTPS HTTP는 Hypertext Transfer Protocol의 약자다. 즉 Hypertext인 HTML을 전송하기 위한 통신규약을 의미한다. HTTPS에서 마지막 S는 Over Secure Socket Layer의 약자로 Secure라는 말을 통해 알 수 있듯이 보안이 강화된 HTTP라는 것을 짐작할 수 있다. HTTP는 암호화가 되지 않은 방법으로 데이터를 전송하기 때문에 서버와 클라이언트가 주고 받는 메시지를 감청하는 것이 매우 쉽다. 그렇기 때문에 중요한 기밀 문서를 열람하는 과정에서 악의적인 감청이나 데이터의 변조등이 일어날 것을 대비한 것이 HTTPS다. HTTPS와 SSL https와 SSL를 같은 의미로 이해하고 있는 경우가 많다. 이것은 맞기도 하고 틀리기도 하다 왜..

스프링 환경에서는 특별한 설정을 하지않으면 싱글톤 레지스트리로 생성된다. 왜냐하면 매번 인스턴스를 생성할 경우에 초당 100건의 요청이 있을 때 시간 단위로만 놓고봐도 엄청난 양의 인스턴스가 생겨 과부하가 걸리기 마련이기 때문이다. 하지만 자바의 기본적인 싱글톤 패턴의 구현 방식은 여러 가지 단점이 있기 때문에, 스프링은 직접 싱글톤 형태의 오브젝트를 만들고 관리하는 기능을 제공하는데 그것이 싱글톤 레지스트리다. 싱글톤 레지스트리의 장점 스태틱 메소드와 private 생성자를 사용해야 하는 비정상적인 클래스가 아니라 평범한 자바 클래스를 싱글톤으로 활용하게 해준다는 점이다. 덕분에 싱글톤 방식으로 사용될 애플리케이션 클래스라도 public 생성자를 가질 수 있다. 싱글톤으로 만들어지기 때문에 주의할 점 ..

DAO(Data Access Object)는 DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트다. 사용자 정보를 저장할 때는 자바빈 규약을 따르는 오브젝트를 이용하면 편리하다. 먼저 사용자 정보를 저장할 User 클래스를 만든다. 자바빈은 디폴트 생성자가 있어야한다. 파라미터가 없는 디폴트 생성자는 툴이나 프레임워크에서 리플렉션을 이용해 오브젝트를 생성하기 때문이다. 그리고 자바빈이 노출하는 이름을 가진 속성을 프로퍼티라고 한다. 프로퍼티는 set으로 시작하는 수정자 메소드와 get으로 시작하는 접근자 메소드를 이용해 수정 또는 조회할 수 있다. 사용자 정보를 DB에 넣고 관리할 수 있는 DAO 클래스를 만들어보자. 사용자 정보를 관리하는 DAO이므로 UserDao라는 이름으로 ..

의존성 주입(DI) 또는 인젝션(injection) 어떤 클래스가 필요로 하는 컴포넌트를 외부에서 생성한 후, 내부에서 사용 가능하게 만들어 주는 과정 DI의 개요 의존성 주입이라고도 하며, IoC라고 하는 소프트웨어 디자인 패턴 중 하나다. 이때 IoC는 인스턴스를 제어하는 주도권이 역전된다는 의미로 사용되는데, 컴포넌트를 구성하는 인스턴스의 생성과 의존 관계의 연결 처리를 해당 소스코드가 아닌 DI컨테이너에서 대신 해주기 때문에 제어가 역전됐다고 보는 것이다. 따라서 지금까지 인스턴스를 애플리케이션에서 직접 생성해서 쓰는 방법 대신 DI 컨테이너가 만들어주는 인슽너스를 가져오는 방법을 사용할 수 있다. 이때 취득한 인스턴스가 의존하는 또 다른 인스턴스 역시 DI 컨테이너에서 관리되기 때문에 연쇄적으로..