본문 바로가기

Full Stack 교육 회고록

8/4 [JAVA]-연산자 [DATABASE]-데이터 제한 및 정렬

728x90
SMALL

<오전 자바 수업>

[연산자]

연산: 정해진 규칙에 따라 데이터를 처리하여 결과를 산출하는 것

식: 연산의 과정을 기술한 것

 

a++ 단한연산자

a+b 이항연산자

a?b:c 삼항연산자

 

단항 연산자: 증감연산자

이항 연산자: 대입연산자, 산술연산자, 비교연산자, 논리연산자, 비트연산자, 시프트연산자

삼항 연산자: 삼항연산자

 

산술연산자: 숫자를 연산하는 연산자

+:더하기

-: 빼기

*: 곱하기

/: 몫

%: 나머지

 

예제1)

int num1 =10;
int num2 = 7;

System.out.println(num1/num2); ->1
System.out.println(num1%num2); ->3

 

예제2)

int num1 = 10;
int num2 = 7;

float num3 = 10f; //10.0
float num4 = 7f;  //7.0

System.out.println(num1/num2); //정수,정수->1
System.out.println(num3/num4); //실수,실수->1.4285715
System.out.println(num3/num2); //실수,정수->1.4285715

 

예제3)

int num1 = 10; ->숫자
int num2 = 7;  -> 숫자

System.out.println(num1+num2); ->17
String num1="10" -> 문자열
String num2="7" -> 문자열
System.out.println(num1+num2); ->107
int num1 = 10;
String num2 = "7";
System.out.println(num1+num2); ->107

예제4)

String a= 10 + 7 + "";
String b= 8 + "" + 2;
String c= "" + 5 + 2;

System.out.println(a); ->17
System.out.println(b); ->82
System.out.println(c); ->52

* f붙으면 실수랑 10f=10.0

 

정수+실수 더하면 무조건 실수가 된다

숫자+문자 더하면 무조건 문자열이 된다

 

예제5)

num1, num2 의 더하기, 빼기, 곱하기, 나누기 결과 값을 출력하세요.

(단, 나누기 결과 값은 아래와 같은 실수로 표현하세요.)

(num1 = 7, num2 =3)

10

4

21

2.3333333

package 연산자;

public class Ex01산술연산 {

	public static void main(String[] args) {
		
		int num5 =7;
		int num6 =3;
		
		//합
		int sum = num5+num6;
		//차
		int minus = num5-num6;
		//곱
		int mul = num5*num6;
		//나누기
		double div = (double)num5/num6;
		
		System.out.println("더하기 결과 : "+ sum);
		System.out.println("뺀 결과 : " + minus);
		System.out.println("곱하기 결과 : "+ mul);
		System.out.println("나누기 결과 : "+ div);
        //정수값 2 나온다.
		System.out.printf("나누기 결과 : %.2f",div);
        //%f: 실수 %d: 정수  %s: 문자열
		//%.2f=> 실수는 소수점 2번째 짜리 까지 출력하고 싶어요
		
	}

}

 

System.out.println((float)num5/num6); -> 강제 형변환

 

%d: 정수 ex) 1,2,3,4,5,6,7

%f: 실수  ex) 1.213547

%s:  문자열

 

예제

백의 자리 아래를 버리는 코드를 작성하세요

출력값-> 결과 확인 : 400

package 연산자;

public class Ex02산술연사2 {

	public static void main(String[] args) {
		
		int num1 =456; //400   123->100
		int result = num1/100*100;
		
		System.out.println("결과 확인 : "+ result);
	}

}

예제

JAVA,Web,Android 점수를 키보드로 입력 받아 합계와 평균을 출력하세요.

출력값

JAVA 점수 입력: 25

WEB 점수 입력: 32

ANDROID 점수 입력 : 37

합계: 94

평균: 31.33

package 연산자;

import java.util.Scanner;

public class Ex03산술연사3 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("JACA 점수 입력: ");
		int javaScore = sc.nextInt();
		
		System.out.print("WEB 점수 입력: ");
		int webScore = sc.nextInt();
		
		System.out.print("ANDROID 점수 입력: ");
		int andScore = sc.nextInt();
		
		//합계
		int total = javaScore+ webScore + andScore;
		//평균
		double avg = total/3.0;
	    //3.0 -> 실수로 바뀌는것
		System.out.println("합계: " + total);
		System.out.printf("평균: %.2f\n" , avg);
		//%.2f 실수를 소수점 둘째자리까지 나타나게 하겠금 사용
				
	}

}

 

예제

초를 입력 받아 [시,분,초] 형태로 출력하세요.

초 입력: 3723

1시 2분 3초

package 연산자;

import java.util.Scanner;

public class Ex04산술연사자4 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		//1분->60초 5분->300초 10분 -> 600초, 60분->3600초
		//   /=>몫  %나머지
		System.out.print("초 입력 : ");
		int input = sc.nextInt();
		
		//시  
		int hour = input/3600;
		//->3723에서 시간을 구하기 위해 input 3600으로 나는 몫을 구하면 몫은 1이다. 
		
		//분
		int min = input%3600/60;
		//3723에서 분을 구하기 위해 input 3600으로나는 나머지에서 분을 구해야 되니까60으로 나눠서 몫을 구해준다.
		
		//초
		int sec = input%3600%60;
		//3723에서 분을 구하기 위해 sec를 3600으로 나누어 나머지를 구한다

		System.out.print(hour +"시 ");
		System.out.print(min + "분 ");
		System.out.print(sec + "초 ");
				
	}

}

 

[대입연산자]

: 연산의 결과를 담을 때 사용하는 연산자

대입연산자 예제1

int num = 29;
num -=2;  -> num=num(29)-2;
System.out.println(num); ->27

대입연산자 예제2

int num =29;
num -=2+3*4; -> num = num(29)-(2+3*4);
system.out.println(num); -> 15

[증감연산자]

: 변수에 저장된 값을 1증가 혹은 1감소해주는 연산자

증감연산자 예제1

int i = 3;
System.out.println(++i)  ->4(1증가후 출력)
System.out.println(i++) ->4(출력후 1증가)
System.out.println(i) ->5

증감연산자 예제2

int i = 5;
System.out.println(--i); ->4(1감소 후 출력)

int j = 5;
System.out.println(j--); ->5(출력 후 1감소)

증감연산자 예제3

int opr=0;
opr+=3;                     ->3
System.out.println(opr++);  ->3(출력 후 1증가)
System.out.println(opr);    ->4
System.out.println(++opr);  ->5(1증가 후 출력)
System.out.println(opr);    ->5
System.out.println(opr--);  ->5(출력 후 1감소)
System.out.println(opr;     ->4
System.out.println(--opr);  ->3(1감소 후 출력)
System.out.println(opr);    ->3

[비교연산자]

:부등호 연산, 같다/ 다르다 연산자

비교연산자 예제1

int a = 3;
int b = 10;
System.out.println(a==b); -> false
System.out.println(a!=b); -> true
System.out.println(a>b); -> false
System.out.println(a<b); -> true

[논리연산자]

: NOT, AND, OR 연산자

[논리연산자]

 

1) NOT 연산자: 명제의 반대

   !(참 명제) ->false

   !(거짓 명제) ->true

 

2) AND 연산자 : 둘 다 참일 경우에만 true

      (참 명제) && (참 명제)   -> true

      (거짓 명제) && (거짓 명제)   -> false

      (참 명제) && (거짓 명제)   -> false

      (거짓 명제) && (참 명제)   -> false

 

2) OR 연산자 : 둘 다 거짓일 경우에만  false

      (참 명제) || (참 명제)   -> true

      (거짓 명제) || (거짓 명제)   -> false

      (참 명제) || (거짓 명제)  -> true

      (거짓 명제) || (참 명제)  -> true

 

논리연산자 예제1

int a =3;
int b =10;
System.put.println(!(a>b); ->true
System.out.println((1<3)&&(4<5)); ->true
System.out.println((2<1)&&(4<5)); ->false
System.out.println((1<3)||(4<2)); ->true
System.out.println((2<1)||(4<2)); ->false

[삼항연산자]

:간단한 제어 처리

삼항연산자 예제1

int i = 3;
int j =10;
System.out.println(i==j ? "같다" : "다르다" );   -> 다르다

삼항연산자 예제2

정수를 입력받아 홀수인지 짝수인지 판별하세요.

package 연산자;

import java.util.Scanner;

public class EX05삼항연산1 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("정수 입력 :");
		int num =sc.nextInt();
		
		String result = (num%2==0)? "짝수" : "홀수";
		
		System.out.printf("%d는(은) %s입니다", num, result);

	}

}

https://www.acmicpc.net/

 

Baekjoon Online Judge

Baekjoon Online Judge 프로그래밍 문제를 풀고 온라인으로 채점받을 수 있는 곳입니다.

www.acmicpc.net

https://programmers.co.kr/

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


<오후 data base>

[전날 복습]

3 select distinct * column alias

   // colum_name을 쓰는 select list절이다 -> 보고자하는 data 소유 

    명시된 colum의 data가 결과로 출력이된다

   // 여기서 distinct는 중복제거 이고 전체 문법에서 단 한번만 사용한다

   //   * -> 모든 column  볼때 사용

  // column의 특정 column의 데이터를 보고 자할때 작성 -> 열머리글로 출력이 된다

 // alias ->출력이되는 열,  1개의 column  당 1개의 alias 사용가능

 

[alias 주는 방법]

as = 단일문장 출력

공백 = 대문자 출력

" " = 복수문장을 alias로 주고 싶을때, 대소문자구분해서 사용할때

 

1 from

여기에 table_name작성해서 처리한다

 

2 where

행을 제안하는 조건절이다

1. 조건식 명시 -> column 연산자 value

2. 값 명시 할때는 날짜 값과 문자값에 ' ' 붙여라

3. 값 명시 할때는 table에 저장된 data 형식을 그대로 사용해야 한다

 

[산술연산]

column + 산술연산

column + column

1. 숫자데이터에서 가능

2. 문자 데이터에서는 불가능

3. 날짜 데이터에서는 일수 + - 가능

null에 대한 산술연산자는 null 이다.

SQL*Plus: Release 11.2.0.2.0 Production on 목 8월 4 21:36:30 2022

Copyright (c) 1982, 2014, Oracle.  All rights reserved.

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


//  conn hr/hr 로 접속을 한다음에  column last_name format a20을 사용하여 출력문장을 깔끔하게 만들어 준다

 


[다른 비교 조건]

between...and... 두 값 사이(지정한 값 포함), 두 값 사이의 범위에서 구한다

in(set) 값 목록 중의 값과 일치, 복수 연산자, 똑같은것 여러개를 동시에 찾을때 

like 문자 패턴 일치

is null 널값

 

[between 조건 사용]

between 조건을 사용하여 값의 범위에 따라 행을 표시합니다.

SQL> select last_name, salary
  2  from employees
  3  where salary between 2500 and 3500;
  
  //사원의 이름과, 2500~3500 급여 사이를 받는 사원들을 구하여라
  // 2500은 하한, 3500은 상한

 between 범위 조건을 사용하면 값의 범위에 따라 행을 표시할 수 있으며 지정 범위에는 하한값과 상한값이 포함됩니다.

슬라이드의 select문은 employess 테이블에서 급여가 $2,500 이상이고 3,500  이하인 사원의 행을 반환합니다.

between 조건으로 지정한 값도 범위에 포함되며 하한값을 먼저 지정해야 합니다.

 

[in 조건 사용]

in 멤버 조건을 사용하면 값이 목록에 있는지 확인할 수 있습니다.

SQL> 1  select employee_id, last_name, salary, manager_id
  2  from employees
  3* where manager_id in (100,101,201)
  // 관리자의 사원 번호가 100,101,201인 모든 사원의 번호.이름. 급여, 관리자 사원 번호를 표시합니다.
  // 괄호안의 숫자는 ,로 구별해서 쭉 작성하여도 된다
SQL> 1  select employee_id, manager_id, department_id
  2  from employees
  3* where last_name in('Hartstein', 'Vargas')
  //목록에 사용되는 문자 또는 날짜는 작은 따옴표('')로 묶어야 합니다.

[like 조건사용]

- like 조건을 사용하면 유효한 검색 문자열 값인 대체 문자를 사용하여 검색할 수 있습니다

- 검색 조건은 리터럴 문자 또는 숫자를 포함할 수 있습니다

- %에는 문자가 오지 않거나 여러개 올 수 있습니다, 문장 전체 의미

- _ 에는 문자가 하나만 올 수 있습니다, 문자 하나 의미

SQL> 1  select first_name
  2  from employees
  3* where first_name like 'S%'
  
  //이름이 S로 시작하는 모든 사원의 이름을 출력합니다. 이 경우 대문자 S를 사용했으므로 소문자 s로 시작하는 이름은 반환되지 않습니다.
SQL> 1  select first_name, hire_date
  2  from employees
  3* where hire_date like '06%'
  
  //2006년에 입사한 모든 사원의 이름과 입사일을 출력하시오
  
  //6월에 입사한 사원을 찾으려면 '___06%' 이렇게 해주면 값이 출력된다(_언더바 3개)

* 이름 = '이%' -> 이름을 찾아라는 뜻이다

- 패턴 일치 문자를 결합할수 있다

ex) '%d_' 

 

[null 조건 사용]

is null 연산자를 사용하여 널 여부를 테스트 합니다.

SQL> select last_name, manager_id
  2  from employees
  3* where manager_id is null
  
  //관리자가 없는 모든 사원의 이름과 관리자를 츨력한다.

- null 조건에는 is null 조건과 is not null 조건이 있습니다.

  is null 조건은 널 여부를 테스트 합니다. 널 값은 알 수 없는 값으로서 사용, 할당 및 적용할 수 없습니다.

  널 값은 어떤 값과도 동일성 여부를 판별할 수 없으므로 = 를 사용하여 테스트할 수 없습니다.

 

[논리 조건]

AND -> 구성 요소 조건이 모두 true면 true를 반환합니다.

OR -> 구성 요소 조건 중 하나라도 true면 true를 환합니다.

NOT -> 뒤따르는 조건이 false면 true를 반환 합니다.

 

[and 연산자 사용]

and 는 조건이 모두 true여야 합니다.

SQL> 1  select employee_id, last_name, job_id, salary
  2  from employees
  3  where salary>=10000
  4* and job_id like '%MAN%'
  
  // 사번, 이름, 업무 ID에 MAN이 포함되는 급여가 10,000이상인 사원만 출력하시오

[and 진리표]

다음 표는 and로 두 표현식을 결합한 결과를 표시합니다.

and true false null
true true false null
false false false false
null null false null

 

[or 연산자 사용]

or는 조건 중 하나가 true면 됩니다.

SQL> 1  select employee_id, last_name, job_id, salary
  2  from employees
  3  where salary>=10000
  4* or job_id like '%MAN%'
  
  // 직원의 사번,직종,급여가 10000이상 이거나 직종에 MAN단어를 포함하는 사원을 출력하시오

[or 진리표]

다음 표는 or 로 두 표현식을 결합한 결과를 표시합니다.

or true false null
true true true true
false true false null
null true true null

[not 연산자 사용]

SQL> 1  select last_name, job_id
  2  from employees
  3* where job_id not in('IT_PROG', 'ST_CLERK','SA_REP')
  
  // 업무ID가 IT_PROG, ST_CLERK, SA_REP가 아닌 모든 사원의 이름과 업무ID를 표시합니다.

[우선순위 규칙]

우선순위 규칙은 표현식을 평가하고 계산하는 순서를 결정합니다. 먼저 계산할 식의 좌우에 괄호를 사용하여 기본 순서를 무시하고 우선순위를 변경할 수 있습니다.

계산 순서 연산자
1 산술 연산자
2 연결 연산자 ||
3 비교 조건
4 is[not] null,like,[not]in
5 [not] between
6 not 논리 조건
7 and 논리 조건
8 or 논리 조건

 

SQL> 1  select last_name, job_id, salary
  2  from employees
  3  where job_id= 'SA_REP'
  4  or job_id = 'AD_PRES'
  5* and salary>15000
  
  // 첫번째 조건은 업무id가 AD_PRES면서 급여가 15,000을 넘어야 한다
  // 두번째 조건은 업무ID가 SA_REP여야 합니다.
SQL> 1  select last_name, job_id, salary
  2  from employees
  3  where (job_id= 'SA_REP'
  4  or job_id = 'AD_PRES')
  5* and salary>15000
  
  // 첫번째 조건은 업무id가 AD_PRES 또는 SA_REP여야 합니다. 
  // 두번째 조건은 급여가 15,000을 넘어야 한다

[order by절]

- order by절을 사용하여 행을 정렬합니다.

   asc:오름차순, 기본값

   desc: 내림차순

- order by 절은 select 문의 가장 끝에 둡니다.

SQL> select last_name, job_id, department_id, hire_date
  2  from employees
  3  order by hire_date;
  
  // 사원이 이름, 직종,부서이름, 입사일을 입사일 순서대로 정의한다
  // asc를 붙여도 되지만 기본값이므로 작성안하여도 된다

[내림차순으로 정렬]

-기본 정렬 순서는 오름차순 입니다.

  • 숫자 값은 작은 값부터 표시됩니다. (예: 1-999)
  • 날짜 값은 이른 값부터 표시됩니다. (예: 01-jan-92 가 01-jan-95보다 먼저 표시됨)
  • 문자 값은 영문자순으로 표시됩니다(예: A가 먼저 표시되고 Z가 나중에 표시됨)
  • 널 값은 오름차순에서는 마지막에 표시되고 내림차순에서는 처음에 표시됩니다.
SQL> select last_name, job_id, department_id, hire_date
  2  from employees
  3  order by hire_date desc;
  
  // 모든 사원의 직업, 부서이름, 입사일에서 가장 최근에 입사한 사원 순으로 결과를 출력하시오

[열 별칭을 기준으로 정렬]

SQL> select employee_id, last_name, salary*12 annsal
  2  from employees
  3  order by annsal;
  
  // 사번, 이름, 연봉에서 연봉을 ANNSAL로 작성하여 출력한다.

[여러 열을 기준으로 정렬]

- order by 목록의 순서가 정렬 순서입니다.

- select 목록에 없는 열을 기준으로 정렬할 수도 있습니다.

 

//모든 사원의 이름과 급여를 표시하고 부서 번호를 기준으로 정렬한 후 급여를 기준으로 내림차순으로 결과를 정렬합니다.

SQL> 1  select last_name, department_id salary
  2  from employees
  3* order by department_id, salary desc

[SQL 연습문제]

1. 연봉이120000 이상되는 사원들의 이름 및 연봉을 출력하시요.

SQL> select last_name, salary*12
  2  from employees
  3  where salary*12>=120000;

2. 사원번호가 176인 사원의 이름과 부서 번호를 출력하시오.

SQL> select last_name, department_id
  2  from employees
  3  where employee_id=176;

3. 연봉이 150,000 에서 200,000의 범위 이외인 사원들의 이름 및 연봉을 출력하시오. 단 연봉은 AnnSal로 출력하시오

SQL> 1  select last_name, salary*12 "AnnSal"
  2  from employees
  3  where salary*12 not between 150000 and 200000;

4. 2003/01/01 일부터 2005/05/30 일 사이에 고용된 사원들의 이름, 사번, 고용일자를 출력하시오. 고용일자를 역순으로 정렬하시오.

SQL>  1  select last_name, employee_id, hire_date
  2  from employees
  3  where hire_date between '03/01/01' and '05/05/30'
  4* order by hire_date desc

5. 20번 및 50번 부서에서 근무하는 모든 사원들의 이름 및 부서 번호를 알파벳순으로 출력하시오

SQL> 1  select last_name, department_id
  2  from employees
  3  where department_id in (20,50)
  4* order by department_id asc;
  
  //asc는 기본값 오름차순이므로 생략 가능

6. 20번 및 50번 부서에 근무하며, 연봉이 200,000 ~ 250000 사이인 사원들의 이름 및 연봉을 출력하시오

SQL> 1  select last_name, salary*12
  2  from employees
  3  where department_id in (20,50)
  4* and salary*12 between 200000 and 250000

7. 2006년도에 고용된 모든 사람들의 이름 및 고용일을 조회한다

SQL>1  select last_name, hire_date
  2  from employees
  3* where hire_date like '06%'

8. 매니저가 없는 사람들의 이름 및 업무를 출력하시오.

SQL> select last_name, job_id
  2  from employees
  3  where manager_id is null;

9. 매니저가 있는 사람들의 이름 및 업무, 매니저번호를 조회한다.

SQL> select last_name, job_id, manager_id
  2  from employees
  3  where manager_id is not null;

10. 커미션을 받는 모든 사원들의 이름, 연봉 및 커미션을 출력하시오.

      - 연봉을 역순으로 정렬하고, 연봉은 ANNSAL로 출력하시오/

 

SQL> select last_name, salary*12 as ANNSAL, commission_pct
from employees
where commission_pct is not null
order by ANNSAL desc;

11. 이름의 네번째 글자가 a인 사원의 이름을 조회하시오

SQL> 1  select last_name
  2  from employees
  3* where last_name like '___a%'

12. 이름에 a 및 e 글자가 있는 사원의 이름을 조회하시오

SQL> select last_name
  2  from employees
  3  where last_name like '%a%' and last_name like '%e%';

13. 급여가 2500,3500,7000이 아니며 직업이 SA_REP나 ST_CLERK인 사원의 이름과, 급여, 직업을 출력하시오

SQL>1  select last_name, salary, job_id
  2  from employees
  3  where  salary not in(2500,3500,7000)
  4* and job_id in ('SA_REP', 'ST_CLERK')
728x90
LIST