Full Stack 교육 회고록

8/5[java]- 산술연산자,조건문 [database] - 여러테이블의 데이터 표시

순두부 호랑이 2022. 8. 5. 10:06
728x90
SMALL

[오전 JAVA 수업]

삼항연산자 예제4

농구공을 담기 위해 필요한 상자의 개수를 구하세요.

상자 하나에는 농구공이 5개 들어갈 수 있습니다.

만일 농구공이 '23'개 라면 필요한 상자의 개수는 '5'개 입니다.

 

출력값

농구공의 개수를 입력하세요 : 33

필요한 상자의 수: 7

 

농구공의 개수를 입력하세요 : 20

필요한 상자의 수 : 4

package 연산자;

import java.util.Scanner;

public class 복습파일 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("농구공의 개수를 입력하세요 : ");
		int ball =sc.nextInt();  // 입력한 농구공의 개수
		int box = (ball%5==0? ball/5: (ball/5)+1); // 농구공/5 는 박스의 수,  나머지 공을 담을 박스 +1을 해준다
		System.out.print("필요한 상자의 수 : "+box);
				
	}

}

 

p.81 연산자 우선순위(기억해야함)

높음
















->
















낮음
++(postfix) --(postfix)       증감연산자
+(양수부호) -(음수부호) ++(prefix) --(preix) ~!
형 변환 (type casting)
* / %  산술연산자
+(덧셈) -(뺄셈)              산술연산자
<<  >>  >>>>
<>   <=  >= instanceof
==  !=
& (비트 AND)
^(비트 XOR)
|(비트 OR)
&&(논리 AND)
||(논리 OR)
? : (조건)
=  +=  -=    *=    /=    %=    &=     ^=      |=     <<=   >>=     >>>=

 

package 연산자;

public class Ex07비트시프트연산자 {

	public static void main(String[] args) {
		// 비트연산 : AND(&), OR(|), XOR(^), NOT(~)
		System.out.println(3&5); //둘다 1일때만 1   -> 1
		System.out.println(3|5); //둘다 0알 때만 0   -> 7
		System.out.println(3^5); //다르면 1 같으면 0   -> 6
		System.out.println(~3); //0->1 1->0 맨앞이 1일 경우에는 음수   -> -4
		
		//시프트연산 (<< , >>)
		int a =3;
		int b =a<<2;
		System.out.println(b); //8자리 숫자 작성하고 이진법 계산 하기->12


	}

}

 

[chapter4.조건문]

[조건문]

주어진 조건을 비교/판단하여 그 조건에 만족할 경우 지정된 명령을 실행하고 만족하지 않을 경우 다음 단계의 명령을 수행하도록 하는 구문

 

 

 

[단순if문]

: if문의 조건식이 참(true)이면 if문 내부의 '실행문장'이 실행되며 거짓(false)이면 if문을 벗어남

: 조건은 1개 -> 조건은 항상 논리형(boolean:true/false)

 

if(조건식){ 

   실행문장

다음문장

* 논리형(boolean:true/false) 일반적으로 비교연산,논리연산 사용

 

Q. 정수n이 짝수인지 판별하시오(n이 짝수이면 "짝수입니다"출력)

 

    int n = 20;

    if(n%2==0){

     System.out.print("짝수입니다")

     }

     다음문장

 

Q. 정수 n1과 정수 n2 가 0보다 큰지 판별 하시오(모두 0보다 클 경우 "0보다 크다!"를 출력)

 

int n1 = 20;

int n2 = -20;

if((n1>0)&&(n2>0)){

    System.out,print("0보다크다!")

}

다음문장

 

[단순if문 예제]

1. int 타입의 변수 age를 선언하고 키보드로 값을 입력받으시오. 만약 입력받은 값이 20보다 크거나 같으면 "성인입니다"를 출력하는 프로그램을 작성하시오.

 

나이 입력: 22

성인입니다.

 

나이입력:16

 

 

package 단순if문;

import java.util.Scanner;

public class Ex01if문1 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		System.out.print("나이 입력: ");
		int age = sc.nextInt();
		
		//age가 20보다 크거나 같으면 성인입니다 문구 출력
		//-> 단순 if문
		//if(조건식 -> true/false(비교연산자, 논리연산자))
		if(age>=20) {
			System.out.println("성인입니다");
		}
	}

}

단순if문 예제2)

int 타입의 변수 num을 선언하고 키보드로 값을 입력받으시오. 만약 입력받은 값이 3의 배수이거나 5의 배수이면 "3 또는 5의 배수입니다"를 출력 하는 프로그램을 작성하시오.

package 단순if문;

import java.util.Scanner;

public class Ex02if문2 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("숫자 입력 : ");
		int a = sc.nextInt();
		
		if(a%3==0 || a%5==0) {
			System.out.println("3 또는 5의 배수입니다");
		}
	}

}

단순if문 예제3

JAVA, Python, Android점수를 각각 입력받은 후 평균이 80점 보다 높으면 "합격"을 출력하시오.

 

JAVA 점수 입력 : 89

Python 점수 입력: 93

Android 점수 입력 : 82

합격

 

JAVA 점수 입력 : 24

Python 점수 입력 : 76

Android 점수 입력 : 37

 

package 단순if문;

import java.util.Scanner;

public class Ex03if문3 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("JAVA 점수 입력 :");
		int a = sc.nextInt();
		System.out.print("Python 점수 입력 : ");
		int b = sc.nextInt();
		System.out.print("Android 점수 입력 : ");
		int c = sc.nextInt();
		
		if((a+b+c)/3 >80) {
			
			System.out.println("합격");
		}

	}

}

[if~else문]

: if문의 조건식이 참(true)이면 if문 내부의 '실행문장'이 실행 되며 거짓(false)이면 else문 내부의 '실행문장'을 실행

: 조건은 1개

if(조건식){

    실행문장1

}else{

    실행문장2

}

다음문장

 

Q. 정수 n이 홀수인지 짝수인지 판별하시오(n이 홀수이면 "홀수 입니다" 짝수이면 "짝수입니다" 출력)

int n = 20;

if(n%2==1){

    System.out.print("홀수입니다");

} else {

    System.out.print("짝수입니다");

}

다음문장

 

if_else문 예제1

JAVA, Python, Android 점수를 각각 입력받은 후 평균이 80점 보다 높거나 같으면 "합격", 낮으면 "불합격"을 출력 하시오.

 

JAVA 점수 입력 : 78

Python 점수 입력: 96

Android 점수 입력 : 99

합격

 

JAVA 점수 입력 : 34

Python 점수 입력 : 76

Android 점수 입력 : 27

불합격

package 단순if문;

import java.util.Scanner;

public class Ex03if문3 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
코드블럭 삽입		System.out.print("JAVA 점수 입력 : ");
		int a = sc.nextInt();
		System.out.print("Python 점수 입력 : ");
		int b = sc.nextInt();
		System.out.print("Android 점수 입력 : ");
		int c = sc.nextInt();
		
		if((a+b+c)/3 > 80) {//평균이 80점보다 크니?
			//평균이80보다 클 경우 (true)
			System.out.println("합격");
		}else {
			// 평균이 80보다 같거나 작은경우(false)
			System.out.println("불합격");
		}
		
	}

}

IF~else 문 예제2

친구들과 점심을 먹은 후 총 금액의 1/n을 각자 지불 하려고 합니다. 점심 총 금액과 사람 명 수를 입력받은 후 인 당 지불해야 하는 금액이 10000원 이상이면 "10000원 이상 지불" 금액이 10000원 미만이면 "10000원 미만 지불"을 출력하시오.

 

총 금액: 20000

사람명 수 : 5

10000원 미만 지불

 

총 금액: 50000

사람 명 수 : 3

10000원 이상 지불

 

 

 

Q. 정수형 변수 5개를 선언한 후 정보처리기사의 각 과목의 정답 개수를 입력받아 변수에 할당하시오. 한 과목이라도 8개 미만인 경우 "불합격입니다"를 출력하고 총 개수가 60개 이상이면 "합격입니다"를 출력 하는 프로그램을 작성하시오.

package 단순if문;
import java.util.Scanner;
public class Ex02ifelse문1 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("소프트웨어 설계 : ");
		int sw1 = sc.nextInt();
		System.out.print("소프트웨어 개발 : ");
		int sw2 = sc.nextInt();
		System.out.print("데이터베이스 구축 입력 : ");
		int db = sc.nextInt();
		System.out.print("프로그래밍 언어 활용 : ");
		int pg = sc.nextInt();
		System.out.print("정보시스템 구축 관리 : ");
		int is = sc.nextInt();
		
		int sum = sw1+sw2+db+pg+is;
		
		if((sw1>=8 && sw2>=8 && db>=8 && pg>=8 && is>=8) && sum>=60) {
			System.out.println("합격입니다.");
		}else {
			System.out.println("불합격입니다.");
		}
	}
}

 

[다중 If~else 문]

: if~else 문이 연속되는 모양

: 조건은 n개(2개이상)

*조건 중 하나라도 일치하는(true)조건을 만나면 더 이상 조건을 확인하지 않음

 

if(조건식1){

    실행문장1

}else if(조건식2){

    실행문장2

}else if(조건식3){

      ....

}else if(조건식n){

        실행문장n

}else{

      실행문장n+1

}

다음문장

 

 

Q. 정수형 변수 score를 선언하고 키보드로 값을 입력받은 후 값을 할당하시오. 입력받은 값이 90점 이상이면 "A학점입니다", 80점 이상 90점 미만인 경우는 "B학점입니다", 70점 이상 80점 미만인 경우는 "C학점입니다"를 출력하고 70점 미만인 경우는 "F학점입니다"를 출력하시오.

package 다중if문;

import java.util.Scanner;

public class ex01다중if1 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("점수 입력 : ");
		int score = sc.nextInt();
		
		if(score>=90) {//90점 이상일 경우 -> A
		    System.out.println("A학점 입니다");	
		}else if(score >=80) {
			System.out.println("B학점 입니다");
		}else if(score >=70) {
			System.out.println("c학점 입니다");
	    }else {
		System.out.println("F학점 입니다");
	}
	}
}

Q. 버스 단말기에 버스카드를 태그하려고 합니다. 현재 카드 잔액과 탑승자가 성인/청소년/어린이 인지 입력한 후 잔액이 충분한 경우에는 인사말을 출력하고 부족한 경우에는 "잔액이 부족합니다"를 출력하시오.

(성인-감사합니다(1800원)/ 청년- 반갑습니다(1500원)/어린이-안녕하세요(1000원))

package 다중if문;

import java.util.Scanner;

public class Ex02다중if2 {

	public static void main(String[] args) {
		Scanner sc =new Scanner(System.in);
		
		System.out.print("잔액 : ");
		int money = sc.nextInt();
		System.out.print("성인/청소년/어린이 : ");
		String person = sc.next();
		
		if(person.equals("성인")&&money>=1800){
			System.out.println("감사합니다");
		}else if(person.equals("청소년")&&money>=1500) {
			System.out.println("반갑습니다");			
		}else if(person.equals("어린이")&&money>=1000) {
			System.out.println("안녕하세요");
		}else {
			System.out.println("잔액이 부족합니다");
		}
		
	}

}


<오후 data base 수업>

Ex14) 30번 부서내의 모든 직업들을 유일한 값으로 출력하시오. 90번 부서 또한 포함하고, 직업을 오름차순으로 출력하시오.

SQL> 1  select distinct job_id, department_id
//distibct->중복재거
  2  from employees
  3  where department_id in(30,90)
  4* order by job_id

select 컬럼을 출력하는것

from 은 테이블 이름을 알려준다

where 조건식을 명시한다

order by 정렬을 할때 사용하는 절이다

 

[처음 접속할때]

SQL> conn hr/hr
Connected.
SQL> column last_name format a20
SQL> column department_name format a20

 

[4.여러테이블에 표시]

 

join기능 - 여러개의 테이블에서 값을 구한다

 

무결성을 보장된 행을 조합

 

조인 -> 여러개의 테이블에서 데이터를 검색 -> 조인이 발생하게 되면 조인 대상테이블을 하나의 테이블로 병합 -> 조인 테이블의 행을 하나의 행으로 조합 -> 하나의 행으로 조합을 할때 반드시 무결성이 보장된 행의 조합 -> (did=did) 무결성을 보장하기 위한 행의 조합을 위해 조건 필요 -> 조건에 맞는 행들로 조합해서 무결성 보장 -> 조인조건 -> 조인이 발생하면 반드시 n-1에 해당하는 조인조건을 where절에 명시 ( n: 조인시킬 테이블의 개수)

조인조건이 생략이 되거나 잘못 작성이 되었을시에 카디션프로덕트 현상이 발생 ->조합가능한 모든 행을 조합

 

[오라클 구문을 사용하여 테이블 조인]

조인을 사용하여 여러 테이블의 데이터를 질의합니다.

where 절에서 조인 조건을 작성합니다.

동일한 열 이름이 여러 테이블에 있는 경우 열 이름에 테이블 이름을 접두어로 붙입니다.

 

[오라클 전용 조인(8i이전)]

- 등가 조인(data 같을때),

  비등가 조인(data 다를때),

  포괄 조인outerjoin(어느 한쪽 테이블의 데이터가 더 많을때 수행), 

  자체 조인 self join-> self 한개 table을 대상으로 조인을 수행 

 

Q. 근무하는 사원의 이름과 그 사원이 근무하는 부서이름을 출력하시오.

SQL> 1  select last_name, department_name
  2  from employees, departments
  3* where employees.department_id=departments.department_id

 

1. n-1에 해당이 되는 조인조건이 되는 where 명시를 하여라

2. 조인 수행시 조인 대상 테이블의 똑같은 이름을 가진 didpartment_id column을 명시할 때는 반드시 소유주인 테이블이름을 접두어로 명시하여야 된다.

 

table 접두어 -> table full name

                         from alias

 

[등가 조인]

같은 data가 존재할때 사용 = 연산자 사용

 

where절에 pk키의 컬럼과 fp키의 컬럼이 같다는걸 

 

1. 조인 table -> 똑같은 이름 did

2. data 같다

3. pk  중복이 없다,  fk 중복이 있다, null 이 있다

 

datatype 같으면 됨 + data가 같아야 한다

pk와 fk로 연결되어있는키

sal = department_id

 

조인는 pk와 fk가 같아야 한다, 컬럼앞에 테이블 이름을 붙이자

 

 

[등가 조인으로 레코드 검색]

SQL> 1  select employees.employee_id, employees.last_name,employees.department_id, departments.department_id,departments.location_id
  2  from employees, departments
  3* where employees.department_id=departments.department_id

* select 절은 검색할 열 이름을 지정합니다.

     - employees 테이블에 있는 사원의 이름, 사원 번호 및 부서 번호 열

     - departments 테이블에 있는 부서 번호, 부서 이름 및 위치 ID 열

* from 절은 데이터베이스가 액세스할 두 테이블을 지정합니다.

      - empartments 테이블

      - departments 테이블

* where 절은 테이블 조인 방법을 지정합니다.

    employees, department_id = departments.department_id

 

[AND 연산자를 사용한 추가 검색 조건]

SQL> select last_name, employees.department_id,department_name
  2  from employees, departments
  3  where employees.department_id=departments.department_id
  4  and last_name = 'Matos';

테이블을 조인할 경우 조인뿐 아니라 고려 대상인 행을 제한하기 위해 where 절에 조건을 추가해야 하는 경우가 있습니다.

예를 들어, 사원 Matos의 부서 번호 및 부서 이름을 표시하려면 Where절에 조건을 추가해야 합니다.

 

[모호한 열 이름 자세히 지정]

- 테이블 접두어를 사용하여 여러 테이블에 있는 열 이름을 자세히 지정합니다.

- 테이블 접두어를 사용하여 성능을 개선합니다.

- 열 별칭을 사용하여 다른 테이블에 있는 동일한 이름의 열을 구별합니다.

 

[테이블 별칭 사용]

- 테이블 별칭을 사용하여 질의를 단순화합니다.

- 테이블 접두어를 사용하여 성능을 개선합니다.

SQL> select e.employee_id, e.last_name, e.department_id,d.department_id,d.location_id
  2  from employees e, departments d
  3  where e.department_id = d.department_id;

[세 개 이상의 테이블 조인]

n 개의 테이블을 조인하려면 최소 n-1 개의 조인 조건이 필요합니다. 예를 들어 세 개의 테이블을 조인하려면 최소 두 개의 조인 조건이 필요합니다.

SQL> select e.last_name, d.department_name, l.city
  2  from employees e, departments d, locations l
  3  where e.department_id = d.department_id
  4  and d.location_id = l.location_id;

[비등가 조인]

SQL> 1  select e.last_name, e.salary, j.grade_level
  2  from employees e, job_grades j
  3* where e.salary between j.lowest_sal and j.highest_sal

- 사원의 급여 등급을 계산하는데, 급여는 해당 등급의 최저 급여와 최고 급여 사이에 있어야 합니다.

이 질의가 실행되면 모든 사원이 정확히 한 번만 표시된다

- <= 및 >= 등의 다른 조건을 사용할 수 있지만 between이 가장 간단합니다. between을 사용할경우 낮은 값을 먼저 지정하고 높은 값을 나중에지정해야 합니다.

 

[포괄 조인 구문]

- 포괄 조인을 사용하면 조인 조건을 만족하지 않은 행도 볼 수 있습니다.

- 포괄 조인 연산자는 더하기 기호(+) 입니다.

- 내가 보고 싶은 쪽의 반대편에 붙인다

select tabel.column, table2.column
from tabel, table
where tabel.column(+) = table.column;
select table1.column, table2.column
from table1, table2
where table1.column = table2.column(+);
SQL>  1  select e.last_name, e.department_id, d.department_name
  2  from employees e, departments d
  3* where e.department_id(+) = d.department_id

 

[자체 조인]

테이블을 자체 조인해야 하는 경우가 있습니다. 각 사원의 관리자 이름을 찾으려면 employees테이블 자체를 조인해야 합니다. 즉 자체 조인을 수행해야 합니다.

 

ex15) 모든 사원들의 이름, 부서 이름 및 부서 번호를 출력하시오.

SQL> 1  select e.employee_id, e.last_name, d.department_name,d.department_id
  2  from employees e, departments d
  3* where e.department_id = d.department_id

16.급여가 15000 이상인 사원의 이름과 급여, 그 사원이 근무하는 부서이름을 출력하시오.

SQL> 1  select e.last_name, e.salary, d.department_name
  2  from employees e, departments d
  3 where e.department_id = d.department_id
  4* and e.salary>=15000

17. 연봉이 150000 이상인 사원의 이름과 연봉, 그 사원이 근무하는 부서이름과 부서가 위치한 지역번호를 출력하시오. 단 연봉은 AnnSal로 출력하시오

SQL>1  select e.last_name, e.salary*12 "AnnSal", d.department_name, d.location_id
  2  from employees e, departments d
  3  where e. department_id = d.department_id
  4* and salary*12>=150000

19. 회사에 근무하는 사원중 급여 등급이 4인 사원의 이름과 급여와 사원별 급여등급을 내림차순으로 정렬하여 출력하시오.

 

select e.last_name, e.salary, j.grade
from employees e. salgrade j
where e.salary Between j.losal And j.hisal
and j.grade =4
order by e.salary desc;

20. 커미션을 받는 모든 사람들의 이름, 부서 명, 지역 ID 및 도시 명을 출력하시오.

SQL> 1  select e.last_name, d.department_name, l.location_id, l.city
  2  from employees e, departments d, locations l
  3  where e.department_id = d.department_id
  4  and d.location_id = l.location_id
  5* and e.commission_pct is not null

 

21. 자신의 매니저보다 먼저 고용된 사원들의 이름 및 고용일을 출력하시오.

SQL>1  select e.last_name, e.hire_date, m.last_name, m.hire_date
  2  from employees e, employees m
  3  where e.manager_id = m.employee_id
  4* and e.hire_date < m.hire_date

 

728x90
LIST