
--30번 소속 사원들 중에서 급여를 가장 많이 받는 사람보다 더 많은 급여를 받는 사람의 이름과 급여를 출력하는 쿼리문
👉 SELECT ENAME, SAL FROM EMP WHERE SAL >= (SELECT MAX(SAL) FROM EMP WHERE DEPTNO=30);
👉 SELECT ENAME, SAL FROM EMP WHERE SAL >=ALL(SELECT SAL FROM EMP WHERE DEPTNO=30);
--연봉을 3000이상 받는 사원이 소속된 부서와 동일한 부서에서 근무하는 사원들의 정보를 출력하는 쿼리문
👉 SELECT ENAME FROM EMP WHERE DEPTNO IN (SELECT DEPTNO FROM EMP WHERE SAL>=3000);
--사원들의 평균 급여보다 더 많은 급여를 받는 사원을 검색하는 쿼리문
👉 SELECT ENAME FROM EMP WHERE SAL > (SELECT AVG(SAL) FROM EMP);
DI(Dependency Injection)란 스프링이 다른 프레임워크와 차별화되어 제공하는 의존 관계 주입 기능으로, 객체를 직접 생성하는 게 아니라 외부에서 생성한 후 주입 시켜주는 방식이다.

첫번째 방법은 A객체가 B와 C객체를 New 생성자를 통해서 직접 생성하는 방법이고, 두번째 방법은 외부에서 생성 된 객체를 setter()를 통해 사용하는 방법이다.

스프링에서는 객체를 Bean이라고 부르며, 프로젝트가 실행될때 사용자가 Bean으로 관리하는 객체들의 생성과 소멸에 관련된 작업을 자동적으로 수행해주는데 객체가 생성되는 곳을 스프링에서는 Bean 컨테이너라고 부른다.
Ioc 컨테이너
IoC(Inversion of Control)란 "제어의 역전" 이라는 의미로, 말 그대로 메소드나 객체의 호출작업을 개발자가 결정하는 것이 아니라, 외부에서 결정되는 것을 의미한다.
기존에는 다음과 순서로 객체가 만들어지고 실행되었다.
하지만, 스프링에서는 다음과 같은 순서로 객체가 만들어지고 실행된다.
스프링이 모든 의존성 객체를 스프링이 실행될때 다 만들어주고 필요한곳에 주입시켜줌으로써 Bean들은 싱글턴 패턴의 특징을 가지며, 제어의 흐름을 사용자가 컨트롤 하는 것이 아니라 스프링에게 맡겨 작업을 처리하게 된다.
자바용 프로젝트 관리도구로 프로젝트의 전체적인 라이프 사이클을 관리한다.
Maven은 필요한 라이브러리를 특정 문서(pom.xml)에 정의해 놓으면 내가 사용할 라이브러리 뿐만 아니라 해당 라이브러리가 작동하는데에 필요한 다른 라이브러리들까지 관리하여 네트워크를 통해서 자동으로 다운받아준다.
프레임워크란?
프로그램의 기초를 구축할 수 있는 코드의 집합
자바 플랫폼을 위한 오픈 소스 애플리케이션
스프링은 내부적으로 별도의 API를 사용하지 않고, 일반적인 Java 코드를 이용하여 객체를 구성하는 방식 그대로 사용한다. -> 코드를 개발할 때, 개발자가 특정한 라이브러리나 컨테이너의 기술에 종속적이지 않다.
스프링에서는 'ApplicationContext'라는 존재가 필요한 객체들을 생성하고, 필요한 객체들을 주입하는 역할을 한다. 따라서 스프링을 사용하면 객체와 객체를 분리해서 생성하고, 이런 객체들을 엮는 작업을 하게 된다. (Wiring)
ApplicationContext가 관리하는 객체들을 Bean이라고 칭하고, 빈과 빈 사이의 의존 관계를 처리하는 방식으로 XML, Annotation, Java 등 다양한 방식이 사용된다.
로드 존슨