where sal > (서브쿼리가 들어가는 절)
having avg(sal) > (서브쿼리)
조건식에 명시되어야 할 값을 모를 때, 서브쿼리를 통해 찾을 수 있다.
-특정 값을 모를 때 사용하면 용이
-조인의 일부가 서브쿼리로 대체 가능하기도 함, 셀프조인은 전부 가능
-서브쿼리 먼저 실행 후 메인 쿼리가 실행됨
-그룹바이 절 제외 모든 절에 서브쿼리 사용 가능
-웨어절, 해빙절의 서브쿼리 : 조건식의 값으로 사용됨.
-개수 제한이 없다.
-연산자 우측에 괄호로 묶어준다.
-값이 대체되므로 정렬은 안해준다.
-단일연산자일 때는 단일행 서브쿼리, in 과같이 복수연산자는 다중행 서브쿼리
✔✔ 주의 서브쿼리의 결과가 하나냐 여러개냐에 따라 사용되는 연산자가 달라짐
-서브쿼리 결과가 no rows selected 일때 널값을 메인에 넘김
-조인을 대체할 수도 있다.
select last_name, salary
from employees
where department_id = (select department_id from departments where department_name='IT')
위는 부서이름이 IT인 부서의 사원과 급여 출력(조인대체)
select last_name, salary
from employees
where salary > (select salary from employees where last_name='Abel')
아벨이란 이름을 가진 사원의 급여보다 큰 급여를 받는 사원들의 이름, 급여
서브쿼리의 컬럼과 메인쿼리의 컬럼의 데이터 타입 이 무조건 같아야함 데이터의 의미가 같아야함!!!
all 은 서브쿼리 값 포함 안함
any 는 서브쿼리 값 포함
연산자 주의 :
-서브쿼리의 조건절에서 pk(기본키)처럼 고유 단일 값이 아니면 값은 중복이 있을 수 있다.
-pk는 중복이 없으므로 = equi 연산자 쓸 수 있지만 그 외는 주의를 해야한다.
-중복값이 나왔을 때 in 연산자를 쓰지만 계속 검사하기때문에 성능상 안좋기 땜에 pk가있다면 eq연산자를 권장.
변수명 규칙
-논리형 boolean : false, true만 가능
-문자형 char : 작은따옴표' '로 표현해줌 문자 하나를 의미, 큰따옴표" "는 여러개의 문자(문자열) 표현
-String 참조형 데이터 자료형 / 레퍼런스형 : 기본 자료형이 아닌 참조해서 쓸 수 있는 자료형!
연산자
-정해진 규칙에 따라 데이터를 처리하여 결과를 산출
-식 : 항 연산자 항
-이항 : 산술, 논리, 대입, 비교연산자
-단항 : 증감연산자 ++변수, 변수++
-삼항 : 항이 세개 조건?참:거짓;
-정수형, 정수형 연산시 결과값은 정수형
-변수에 실수형이 있다면 실수형으로 나옴
ex)정수형+정수형=정수형, 정수형+실수형=실수형
-덧셈에서 숫자+문자 = 문자 / 여기서 +는 연결고리임 숫자와 문자가 이어서 나옴
-대입연산자 a=b
-복합대입연산자 a = a+b 오른쪽 항에 더해서 왼쪽 항에 적용하겠다. a += b 누적 ex) +=, -=
public class ex03 {
public static void main(String[] args) {
String a = 10+7+"";
String b = 8+ "" +2;
String c = "" + 5+2; // 왼쪽에서 오른쪽으로 연산하면서 ""+5에서 ""5로 자체가 문자가 됨
System.out.println(a);
System.out.println(b);
System.out.println(c);
}
}
Scanner sc (Scanner를 간단하게 부를 별칭) = new Scanner(System.in);
임포트 작업해야됨! 경고가 뜨면 import 자동완성 ctrl shift oimport java.util.Scanner;
public class ex06 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("숫자 입력 : ");
int num = sc.nextInt(); //입력받을 정수형을 변수에 담아줌
int rslt= num%100;
int rslt2=num-rslt;
System.out.println("result : " + rslt2);
System.out.print("이름 입력 : ");
String name = sc.next();
System.out.println("입력된 이름: " + name);
}
}
ctrl shift o scanner import 자동불러오기
syso ctrl 스페이스바 <- System.out.prinln 출력 명령 자동완성...
ctrl alt ↑ ↓ 간편하게 복사 붙여넣기 할 수 있다.