본문 바로가기

전체 글

(71)
Sub Query, 중첩 서브쿼리 서브쿼리란 하나의 쿼리문 안에 또 다른 쿼리가 들어있는 모습이다. 단일 쿼리만으로 어려운 쿼리에 사용된다. 다른 테이블에서 데이터 값을 조회한 후 조건을 사용 가능. 사용시 주의 사항 서브쿼리를 괄호로 감싸서 사용한다. 서브쿼리는 단일 행 또는 복수 행 비교 연산자와 함께 사용 가능하다. 서브쿼리에서는 ORDER BY 를 사용하지 못한다. 서브쿼리 실행 후 메인 쿼리 실행 여러 서브쿼리 중첩 가능 서브쿼리가 사용가능한 구절 SELECT 절 FROM 절 WHERE 절 HAVING 절 ORDER BY 절 INSERT 문의 VALUES 절 UPDATE 문의 SET 절 서브쿼리 비교 연산자 종류 연산자 종류 사용처 단일행 연산자 =, , =, , != 단일행, 다중열 다중행 연산자 IN, NOT IN, EXIS..
SPRING MVC 통합 컨트롤러 @RequestMapping 을 잘 보면 클래스 단위가 아니라 메서드 단위에 적용된 것을 확인할 수 있다. 따라서 컨트롤러 클래스를 유연하게 하나로 통합할 수 있다. 이전에 글에서는 클래스에 @Controller 애노테이션을 이용해 스프링빈으로 만들고 메서드를 만들어 @RequestMapping 애노테이션을 적용시켰다. 이번엔 하나의 Class단위로 만들어 보자. @Controller public class StpringMemberControllerV2 { private MemberRepository memberRepository = MemberRepository.getInstance(); @RequestMapping("springmvc/v2/members/new-form") public ModelAnd..
SPRING MVC 시작하기 스프링이 제공하는 컨트롤러는 애노테이션 기반으로 동작해서, 매우 유연하고 실용적이다. 과거에는 자바 언어에 애노테이션이 없기도 했고, 스프링도 처음부터 이런 유연한 컨트롤러를 제공한 것은 아니다. @RequestMapping 스프링은 애노테이션을 활용한 매우 유연하고, 실용적인 컨트롤러를 만들었는데 이것이 바로 @RequestMapping 애노테이션을 사용하는 컨트롤러이다. 다들 한번쯤 사용해보았을 것이다. 여담이지만 과거에는 스프링 프레임워크가 MVC 부분이 약해서 스프링을 사용하더라도 MVC 웹 기술은 스트럿츠 같은 다른 프레임워크를 사용했었다. 그런데 @RequestMapping 기반의 애노테이션 컨트롤러가 등장하면서, MVC 부분도 스프링의 완승으로 끝이 났다. SPRING MVC의 @Reques..
뷰 리졸버 이번에는 뷰 리졸버에 대해서 자세히 알아보자 application.properties 에 다음 코드를 추가하자 spring.mvc.view.prefix=/WEB-INF/views/ spring.mvc.view.suffix=.jsp 스프링 부트는 InternalResourceViewResolver 라는 뷰 리졸버를 자동으로 등록하는데, 이때 application.properties 에 등록한 spring.mvc.view.prefix , spring.mvc.view.suffix 설정 정보를 사용해서 등록한다. 스프링 부트가 자동 등록하는 뷰 리졸버 (실제로는 더 많지만, 중요한 부분 위주로 설명하기 위해 일부 생략) 1순위 = BeanNameViewResolver : 빈 이름으로 뷰를 찾아서 반환한다. (예..
[SQL] 집합 연산자. UINON UNION ALL 두 개 이상의 테이블에서 조인을 사용하지 않고 연관된 데이터를 조회하는 방법 중에 또 다른 방법이 있는데 그 방법이 바로 집합 연산자(Set Operator)를 사용하는 방법이다. 종류는 아래와 같다. 집합 연산자 연산자의 의미 UNION 여러 개의 SQL문의 결과에 대한 합집합으로 결과에서 모든 중복된 행은 하나의 행으로 만든다. UNION ALL 여러 개의 SQL문의 결과에 대한 합집합으로 중복된 행도 그대로 결과로 표시된다. 즉, 단순히 결과만 합쳐놓은 것이다. 일반적으로 여러 개의 결과가 상호 배타적인(Exclusive)일 때 많이 사용한다. 개별 SQL문의 결과가 서로 중복되지 않는 경우, UNION과 결과가 동일한다. (결과의 정렬 순서에는 차이가 있을 수 있음) INTERSECT 여러 개의S..
[SQL] ORDER BY ORDER BY 절은 SQL 문장으로 조회된 데이터들을 다양한 목적에 맞게 특정 칼럼을 기준으로 정렬하여 출력 하는데 사용한다. ORDER BY 절에 칼럼(Column)명 대신에 SELECT 절에서 사용한 ALIAS 명이나 칼럼 순서를 나타내는 정수도 사용 가능 하다. 그리고 별도로 정렬 방식을 지정하지 않으면 기본적으로 오름차순이 적용 되며, SQL 문장의 제일 마지막에 위치한다. SELECT 칼럼명 [ALIAS명] FROM 테이블명 [WHERE 조건식] [GROUP BY 칼럼(Column)이나 표현식] [HAVING 그룹조건식] [ORDER BY 칼럼(Column)이나 표현식[ASC 또는 DESC]]; ※ ASC : 오름차순, DESC : 내림차순 [예제] SELECT PLAYER_NAME 선수명 ,..
[SQL] 집계함수, GROUP BY, HAVING 여러 행들의 그룹이 모여서 그룹당 단 하나의 결과를 돌려준다. 여러 행들의 그룹이 모여서 그룹당 단 하나의 결과를 돌려주는 함수 GROUP BY 절은 행들을 소그룹화 한다. 집계 함수명 ( DISTINCT 칼럼이나 표현식 ) ALL : Default 옵션이므로 생략 가능함 DISTINCT : 같은 값을 하나의 데이터로 간주할 때 사용하는 옵션임 자주 사용되는 주요 집계 함수들은 다음과 같다. 집계함수 종류 집계 함수 설명 COUNT(*) NULL 값을 포함한 행의 수 COUNT(표현식) 표현식이 NULL을 제외한 행의 SUM([DISTINCT | ALL] 표현식) 표현식이 NULL을 제외한 합계 출력 AVG([DISTINCT | ALL] 표현식) 표현식이 NULL을 제외한 평균 출력 MAX([DISTIN..
[SQL] JOIN ON, WHERE 차이 DB의 쿼리를 만들다보면 JOIN을 많이 사용하게 되는데 ON과 WHERE문으로 조건을 만들어 JOIN을 하게 된다. ON과 WHERE 둘 다 조건에 관한 함수인데 이 둘의 차이점을 알아보자. 먼저 알아야할 것은 SQL의 문법 실행 순서이다. SQL의 실행 순서를 자세히 보면 ON과 JOIN, WHERE 따로 나눠져있으며 순서도 다르다. TABLE01 TABLE02 A B A C 1 2 1 3 3 5 7 5 7 9 11 13 위와 같은 두개의 테이블이 있다고 하고 설명을 해보자. 1. ON절 하나만 사용 SELECT * FROM TABLE01 a LETF JOIN TABLE02 b ON a.A = b.A; [결과] A B A C 1 2 1 3 3 5 NULL NULL 7 9 7 5 11 13 NULL N..