본문 바로가기

Full Stack 교육 회고록

8/3 [Data Base]- 기본SQL SELECT문 작성, 데이터 제한 및 정렬 [java]- 변수와 입출력

728x90
SMALL

[ 1. 기본 SQL SELECT 문 작성]

 

[SQL SELECT 문의 기능]

SELECT 문은 데이터베이스에서 정보를 검색합니다. SELECT 문을 사용하여 다음을 수행할 수 있습니다.

- 프로젝션: SQL의 프로젝션 기능을 사용하면 테이블에서 질의 결과로 반환된 열을 사용자가 필요한 만큼 선택할 수 있습니다.

- 선택: SQL의 선택 기능을 사용하면 테이블에서 질의 결과로 반환될 행(row)을 선택할 수 있으며 다양한 조건을 사용하여 표시할 행을 제한할 수 있습니다

- 조인: SQL의 조인 기능을 사용하면 서로 다른 테이블 간에 링트를 생성하여 각 테이블에 저장된 데이터를 함께 가져올 수있습니다. 조인에 대한 내용은 다른 단원에서 자세히 설명합니다.

 

[기본 SELECT문]

SELECT *|{[DUSTINCT] column|expression [alias],...}

from table;

- select는 표시할 대상열을 지정합니다.

- from은 대상 열을 포함하는 해당 테이블을 지정합니다.

 

기본 SELECT문

가장 간단한 형태의 SELECT 문은 다음을 포함해야 합니다

- SELECT 절: 표시할 열을 지정합니다

- FROM 절: SELECT절에 나열된 열을 포함하는 테이블을 지정합니다.

 

[모든 행의 모든 열 선택]

SELECT 키워드 뒤에 별표(*)를 사용하면 테이블에 있는 데이터의 모든 열을 표시할 수 있습니다.

 

[특정 열 선택]

SELECT department_id, location_id

FROM departments;

 

- 모든 행의 특정 열 센택

  select문을 사용할 때 해당 열 이름을 쉼표로 구분하여 지정하면 테이블의 특정 열을 표시할 수 있습니다. 위의 예제는 departments테이블의 모든 부서의 번호와 위치번호를 표시합니다

 

 

[SQL문 작성]

- SQL 문은 대소문자를 구분하지 않습니다.

- SQL 문은 하나 이상의 줄에 입력할 수 있습니다.

- 키워드는 약어로 쓰거나 여러 줄에 나눠 쓸 수 없습니다.

- 절은 일반적으로 서로 다른 줄에 씁니다.

- 들여쓰기를 사용하면 SQL 문을 좀더 읽기 쉽게 작성할 수 있습니다.

 

[열 머리글 기본값]

* iSQL*Plus:

- 기본 머리글 정렬: 가운데

- 기본 머리글 표시: 대문자

 

* SQL*Plus:

- 문자 및 날짜 열 머리글: 왼쪽 정렬

- 숫자 열 머리글: 오른쪽 정렬

- 기본 머리글 표시: 대문자

 

[산술식]

산술 연산자를 사용하여 숫자 및 날짜 데이터에 대한 표현식을 작성합니다.

+ 더하기

- 빼기

* 곱하기

/ 나누기

 

[산술 연산자 사용]

 

ex) 사원의 이름과 월급여, 월급여+300을 구하시오

SQL> select last_name, salary, salary+300
       2  from employees;

 

[연산자 우선순위]

- 곱셈과 나눗셈은 덧셈과 뺄셈보다 우선순위가 높습니다.

- 우선순위가 동일한 연산자는 왼쪽에서 오른쪽으로 계산됩니다.

- 괄호는 우선적으로 계산되며 명령문을 명확히 나타내는 역할을 합니다.

 

ex) 사원의 이름과 월급여, 연봉+100인 값을 구하시오

SQL> select last_name, salary, salary*12 +100
  2  from employees;

-> 여기서 salary뒤에*를 하였는데 곱하기가 앞보다 뒤에 있는게 효율성이 좋다

참고: 괄호를 사용하면 우선순위를 보다 명확하게 나타낼 수 있습니다. 예를 들어, 슬라이드의 산술식을 (salary*12)+100으로 작성해도 결과는 동일합니다.

 

[괄호 사용]

 

ex)사원의 이름과, 월급여, 월급여에 100을 더한 연봉값을 구하여라

SQL> select last_name, salary, 12*(salary+100)
  2  from employees;

-> 괄호를 사용하면 우선순위 규칙을 무시하고 연산자의 실행 순서를 지정할 수 있습니다.

 

[널 값 정의]

- 널 값은 알 수 없는 값, 사용할 수 없는 값, 할당할 수 없는 값, 적용할 수 없는 값을 의미합니다.

- 널은 0 또는 공백과 다릅니다. 0은 숫자고 공백은 하나의 문자 입니다.

 

ex) 사원의 이름과, 회사 이름, 월급여,보너스를 구하여라

SQL>1  select last_name, job_id, salary, commission_pct
  2* from employees

 commission_pct는 보너스를 받을 수 있는 사람이 있고 보너스 받을수 없는 사람이 있는때

이때 보너스도 안받는 사람을 표시하기위해 null 값을 사용한다.

 

[산술식의 널 값]

널 값을 포함하는 산술식은 널로 평가됩니다.

 

ex)사원의 이름과 연봉과보너스를 포함한 값을 구하여라

SQL> select last_name, salary*12*commission_pct
  2  from employees;
  • 널 값(계속): 산술식에서 열의 값이 널이면 결과는 널입니다. 예를 들어, 숫자를 0으로 나누면 오류가 발생 하지만 널로 나누면 결과는 널이거나 알 수 없습니다. 

[열 별칭 정의]

- 열 머리글의 이름을 변경합니다.

- 계산식에 대한 열머리을 지정할 때 유용합니다

- 열 이름 바로 뒤에 사용합니다. 열 이름과 별칭 사이에 선택적으로 AS 키워드를 사용할 수 있습니다.

- 공백 또는 특수 문자가 있거나 대소문자를 구분할 경우 큰 따옴표를 사용합니다.

SQL>select last_name as name, commission_pct comm
 2* from employees

- 첫번째 예제는 모든 사원의 이름과 커미션 비율을 표시합니다. 예제에서는 선택 사항인 AS 키워드가 열 별칭 이름 앞에 사용되었는데 질의 결과는 AS  키워드의 사용에 관계 없이 동일 합니다. 또한 SQL 문에 열 별칭인 name 및 comm이 소문자로 되어 있지만 질의 결과에서는 열 머리글이 대문자로 표시됩니다. 이전 슬라이드에서 언급했듯이 열 머리글은 기본적으로 대문자로 표시됩니다.

SQL> select last_name "Name", salary*12 "Annual Salary"
  2  from employees;

- 두번째 예제는 모든 사원의 이름과 연봉을 표시합니다.  Annual Salary에는 공백이 포함되어 있으므로 큰 따옴표로 묶여 있습니다. 출력 결과를 보면 열 머리글이 열 별칭과 같음을 알 수 있습니다.

 

 


***중요사항***
1. code 작성, 단 실행x
2. code 분석 (해석)
3. 결과 예측
4. code 실행 
5. 결과 비교/분석

<자리수 변경 할때 사용하는 구문>
SQL> column department_id format 99999999

9->숫자값 변경

SQL> column department_name format a20

a-> 문자와 날짜 data column 수정할때만 사용
9->숫자값 변경


27 rows selected. ->27개의 부서를 나타낸다

SQL> column department_id clear
SQL> /
// 포맷하는 방법

 


* SQL 문은 대소문자를 구분하지 않습니다.
* SQL 문은 하나 이상의 줄에 입력할 수 있습니다. 

출력이 되는 열머리글은 대문자로 출력된다.

산술연산 1. 숫자=0 , 2. 문자 x, 3. 날짜, 일수 + - 가능

as 단일문
스페이스 대문자
"" 쓰여진대로 출력
"" ->알리하스

연결 연산자 사용은 이런게 있구나 하고 패쓰 -> 잘 사용 안함

 


[리터럴 문자열]

- 리터럴은 SELECT 목록에 포함된 문자, 숫자 또는 날짜입니다.

- 날짜 및 문자 리터럴 값은 짝은 따옴표로 묶어야 합니다.

- 각 문자열은 각 행(row)이 반환될 때마다 한 번씩 출력됩니다.

- 날짜 및 문자 리터럴은 반드시 작은 따옴표('  ')로 묶어야 하지만 숫자 리터럴은 묶지 않아도 됩니다.

 

[중복 행]

질의는 기본적으로 중복 행을 포함한 모든 행을 표시합니다.

--회사의 부서 번호를 구하여라--

SQL> select department_id
 * from employees;

- 특별히 표시하지 않은 한 iSQL*Plus는 중복 행을 제거하지 않은 상태로 질의 결과를 표시합니다. 위의 코드는 테이블의 모든 부서 번호를 표시하며 부서 번호가 반복되어 있음을 볼 수 있습니다

 

[중복 행 제거]

SELECT절에서 DISTINCT 키워드를 사용하여 중복 행을 제거합니다.

//회사 부서에서 null값을 포함한 값을 구하여라

SQL> select distinct department_id
  2  from employees;

 

select뒤에 사용되고 1번만 사용된다.
distinct= 중복제거 한번만 


[2. 데이터 제한 및 정렬]

 

[선택되는 행 제한]

- where 절을 사용하여 반환되는 행을 제한합니다.

- where 절은 만족해야 할 조건을 포함하며 from 절 바로 다음에 옵니다. 조건이 참일 경우, 조건을 만족하는 행이 반환 됩니다.

where 조건을 만족하는 행만 질의하도록 제한합니다.

condition 열 이름, 표현식, 상수 및 비교 연산자로 구성됩니다.

 

where절은 열 값, 리터럴 값, 산술식 또는 함수를 비교할 수 있으며 다음 세 가지 요소로 구성됩니다.

- 열 이름

- 비교 조건

- 열 이름, 상수 또는 값 목록

 

[where 절 사용]

SQL> select distinct column expresssion alias
  2  from table
  3  where condition(s);

where절은 조건절이다.
행을 제한하는 조건절

where절은 from절 뒤에 쓰인다

where은 조건을 줘서 행을 제한하는 행이다
where절은 조건식을 명시해야 한다 -> col 연산자 값

컬럼, 연산자, 값으로 이루어져 있다.

 

ex) 사원번호, 이름, 업무id 및 90 부서번호를 가진 사원을 출력하시오.

SQL> 1  select employee_id, last_name, job_id, department_id
  2  from employees
  3* where department_id =90


!!!!where 사용시 지켜야 할것!!!!!
1.조건식(column, 연산자, 값)
2. 값을 명시할때 문자/날짜 => '   '
3. 값을 명시할때는 반드시 table에 저장된 data 형식을 그대로 사용해야 한다.

코드 옆에 주석을 달아 공부한다
에러 메시지를 정리해서 만든다

 

[문자열 및 날짜]

- 문자열 및 날짜 값은 작은 따옴표로 묶습니다.

- 문자 값은 대소문자를 구분하며 날짜 값은 날짜형식을 구분 합니다.

- 기본 날짜 형식은 DD-MON-RR 입니다.

- where 절의 문자열 및 날짜는 작은 따옴표(' ')로 묶지만 숫자 상수는 작은 따옴표로 묶지 않습니다

 

ex) whalen사원의 이름, 업무, 부서이름을 출력하여라

SQL> select last_name, job_id, department_id
  2  from employees
  3  where last_name = 'Whalen';

 

예) 연봉이 150,000 이상인 사원의 이름과 연봉을 구하시오, 단 이름은 Name, 연봉은 annnsal로 출력하시오

  3 select last_name "Name", salary*12as annsal
  1 from employees
  2 where  salary*12>=150000
  //실행순서 1->2->3

[비교 조건]

=      같음

>      보다 큼

>=    크거나 같음

<       보다 작음

<=     작거나 같음

<>     같지 않음 

 

ex) 급여가 300이하인 사원의 이름과 급여를 출력하시오

SQL>  1  select last_name, salary
  2  from employees
  3* where salary <=3000

 


<오후 자바 수업>

ex01. 변수선언

package 변수;

//인코딩(한글, 영문, 한자, 일본어 -> 기계어) 방식 (UTF-8, EUC-KR) 설정
//EUC-KR: (완성형) 강-> 강
//UTF-8 : (조합형) 강 -> ㄱ ㅏ ㅇ

public class Ex01변수선언 {

	public static void main(String[] args) {
	

      // ctrl+/ or ctrl + shift+/ -> 주석 단축키
	  // 주석(코드에 영향을 미치지 않음- 코드에 대한 설명 작성)
      // 변수 : 데이터를 담을 수 있는 공간(값 변경 가능)
	  // 변수 선언(자료형 변수이름;)
	  // 자료형: 변수에 담을 자료의 형태(정수형, 실수형, 문자형, 논리형)
	  int num;
	  
	  //변수이름: 예약어는 사용 불가능
//	  int class;
	  
	  //값 할당
	  num = 3;
	  
	  //art+shift+r : 변수 일괄 변경
	  //ctrl+shift+f: 코드정렬
	  int num2 = 3;
	  num2 = 5;//새로운 값 할당
	  //ctrl + alt + 방향키(위, 아래): 코드 복사
	  //alt+방향키(위,아래) : 코드 순서 바꾸기(위,아래)
	  num2 = 5;//새로운 값 할당
	  num2 = 7;
	  
	  //상수선언 : 값 변경 불가능, final 키워드 사용
	  final int num5 = 10;
	  //num5= 12;
	  
	}

}

[타입변환(형변환)]

변수나 상수 타입을 다른 타입으로 바꾸는 것

 

1. 자동 타입변환(자동 형변환) : 타입이 일치하지 않을 때 크기가 작은 타입을 큰 타입으로 자동 변환

ex) long m =25;

 

2. 강제 타입변환(강제 형변환): 개발자가 강제로 타입 변환을 지시하는 경우

ex) int n =300;

byte b =(kbyte)n;

 

int n =300;
byte b =n; -> 바이트 타입 b에 300을 넣겠다

넘치면 overflow

 

ex02자료형

package 변수;

public class Ex02자료형 {

	public static void main(String[] args) {
	
		//1. primitive type(기본타입) : 자바 언어에 내장된 기본 유형
		//1-1. 논리형(yes/no, true/false, on/off) -> true/false
		boolean sw = true;
		boolean sw1 = false;
		
		//1-2. 문자형 (문자 하나만 표현)
		char c = '나';
		char c1 = 97; //아스키코드
		char c2 = '\uAC00'; //유니코드
		
		//1-3. 정수형(byte, short, int, long) - 자동형변환
		int num = 3; // 정수 기본형
		short num3 =1;
		
		long num2 =4;
		
		//1-4. 실수형(float, double) - 강제형변환
		double d = 10.123;
		float f = (float)10.123;
		float f1 = 10.123f;
		
		//2. reference type : 값 저장, 기능이 정의가 되어있음
		//2-1. 문자열형(String)
		String s;
		s = "Hello World!";
		
		//출력문 -> 콘솔창
		//실행 : ctrl +f11
		System.out.print(s.substring(0,5));
		System.out.println(s+"!!!!!"); // 문자열 + 연산기호 사용가능
		System.out.println(s+123);// 문자열 + 숫자 -> 문자열
		
		
	}

}

아스키코드표

https://shaeod.tistory.com/228

 

ASCII Table - 아스키 코드표

(아스키코드를 알면 C/C++이나 Java 등으로 문자열 함수를 다루거나 파일 함수를 다룰때 도움이 됩니다.) 컴퓨터는 0과 1 숫자 밖에 모르기 때문에 문자도 숫자로 기억합니다. 이때, 어떤 숫자와 어

shaeod.tistory.com

float f = (float)10.123;
float f1 = 10.123f; 
둘이 똑같은 의미

문자열을 나타낼 수 있는 자료형 string으로 표현

exception 예외처리한다
오류 볼때는 맨윗줄과 맨아래줄을 본다

 

[문자열(string)]

기본타입(Primitive Type)으로는 "Hello World" 같은 하나의 문자열을 표현할 수 없음

> 문자열을 나타낼 수 있는 자료형 String으로 표현

 

* 문자열과 + 연산이 실행되면 기본 타입의 값이 문자열로 바뀌고 두 문자열이 연결된 새로운 문자열로 바뀌고 두 문자열이 연결된 새로운 문자열이 생성

ex) "("+3+","+5+")" -> "(3,5)"

 

ex03 출력문

package 변수;

public class Ex03출력문 {

	public static void main(String[] args) {
		// 츌력문
		//\n : 개행
		System.out.print("출력하고 싶은 구문\n");
		// 출력문 자동완성 : syso +ctrl +space
		//System.out.println();
		System.out.println("츌력구문2번");
		System.out.println("출력구문3번");
		
		// 1. 오늘 점심값 : 20000원
		System.out.println(1+". 오늘 점심값 : "+20000+"원");
		
		System.out.printf("%d. 오늘 점심값 : %d %s \n ",1,20000,"원");
		System.out.println("끝");
		
        //%d -> 정수값   %s->문자열
		
	}

}

printf를 사용할때 %d 는 정수값,   %s 는 문자열

[출력]

출력: 디스플레이에 문자나 숫자 등을 나타내는 것

System.out.print(출력하고 싶은 구문)

System-> 표준 입출력 클래스

System.out-> 출력 역할 수행

 

System.out.print(출력하고 싶은 구문)

>출력하고 싶은 구문 출력

System.out.println(출력하고 싶은 구문)

>출력하고 싶은 구문 출력 후 개행

System.out.prinf("출력서식", 출력내용)

>출력하고 싶은 서식대로 출력

 

ex04.입력문

package 변수;

// import : 다른 페키지에 있는 클래스/인터페이스 등을 사용할 때 선언하는 구문
import java.util.Scanner;

public class Ex04입력문 {

	public static void main(String[] args) {
		//입력에 필요한 도구 : Systen.in
		//입력한 값을 사용할 수 있도록 해주는 도구 : Scanner
		
		//new: 도구생성
		Scanner scan = new Scanner(System.in);
		
		//기능(메소드) -> 결과값
		//입력(123) -> s 변수에 할당 (123)
		String s = scan.next();		
		String s1 = scan.next();
		System.out.println(s+s1);
		
		//정수입력
		int num = scan.nextInt();
		int num2 = scan.nextInt();
		System.out.println(num+num2);
		
        String s = sc.next();
		System.out.println(s);
		//next는 공백 기준으로 자른다 (공백 뒤에는 버리는 게 아니다)
		
		sc.nextLine();
		String s1 = sc.nextLine();
		System.out.println(s1);
		// 남겨진 구문을 출력한다
		 
	}

}

[입력]

Scanner sc =new Scanner(System.in);

System->표준 입출력 클래스

System.in -> 입력 역할 수행

Scanner -> 읽은 바이트를 문자, 정수, 실수, 불린, 문자열 등 다양한 타입으로 변환하여 리턴하는 클래스

* 입력 값을 공백 문자(' ', '\t, '\n')을 기준으로 토큰분리

 

sc.next()

>  다음 토큰을 문자열로 리턴

sc. nextInt()

> 다음 토큰은 int 타입으로 리턴

sc.nextLine()

>공백이 낀 문자열을 리턴

 

예제)

입력과 출력 클래스를 생성한 후 이름 (문자열)과 나이(정수)를 입력받고 아래와 같이 출력하시오.

(* prinfln과 printf를 모두 활용해 보시오.)

package 변수;

import java.util.Scanner;

public class ex05입력과출력 {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		
		System.out.print("이름 : ");
		String name = scan.next();
		
		System.out.print("나이 : ");
		int age = scan.nextInt();
		
		System.out.println("이름은 "+ name +"이고 나이는 "+ age+ "입니다");	
		System.out.printf("이름은 %s이고 나이는 %d입니다\n", name, age);
        //%s는 string 을 뜻하고 %d는 int age를 뜻한다.
		

	}

}

 




728x90
LIST