[ 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를 뜻한다.
}
}
'Full Stack 교육 회고록' 카테고리의 다른 글
8/8 [data base] - 그룹 함수를 사용한 데이터 집계 [java]-다중if문 (0) | 2022.08.08 |
---|---|
8/5[java]- 산술연산자,조건문 [database] - 여러테이블의 데이터 표시 (0) | 2022.08.05 |
8/4 [JAVA]-연산자 [DATABASE]-데이터 제한 및 정렬 (0) | 2022.08.04 |
8/2 [DataBase] - 오라클 SQL 테이블 구조 [java] - 자바의 특징 (0) | 2022.08.02 |
8/1 ( 개강식, 캐글) (0) | 2022.08.01 |