오늘보다 더 나은 내일의 나에게_

비전공자의 IoT 국비 교육 수강일지 Day_06 본문

비전공자의 코딩일지

비전공자의 IoT 국비 교육 수강일지 Day_06

chan_96 2021. 12. 27. 18:24
728x90

실습 예제

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

     -유일한 값 => 중복제거(DISTINCT)

14번 문제

 

JOIN

여러 테이블에서 테이블에서 데이터를 검색

-내부적으로 하나의 테이블로 병합 작업 진행

-테이블들이 가지고 있는 행을 하나로 조합

-행을 조합할 때 무결성이 보장이 되어야 한다.

-무결성을 보장하기 위해서 ex(d_id = d_id) 조건이 필요

-조건이 조인 조건이라 표현

-조인을 수행하기 위해서는 조인 조건이 필요하며, 조인 조건을 통해서 하나의 행으로 조합을 할 때 무결성을 보장

-조인이 일어나면 반드시 n-1개 만의 조인 조건이 WHERE 절에 명시됨(n-1 => 조인 table의 개수)

- FROM절에 AS 별칭을 사용해서 SELECT절에 테이블명을 별칭으로 간략히 사용!!

 

 

**조인 조건 주의사항**

*N-1조 인 조건 WHERE절에 반드시 명시

*똑같은 이름을 가진 COLUMN이 명시되었을 때 => 반드시 소유주의 TABLE 이름을, 접두어로 명시

*SELECT절에서 COLUMN명 앞에 테이블 이름을 적어주는 게 성능상 좋다

*컬럼의 소유주의 TABLE의 접두어를 앞에 작성!

 

 

카티시안 곱(Cartesian Product) => 조인 조건을 생략한 경우, 조인 조건이 부적합 경우
-카티시안 곱이 생성되지 않도록 하려면 WHERE절에 항상 유효한 조인 조건을 포함시켜야 한다!

 

EX(2829(EMPLOYEES X DEPARTMENT) = 107(EMPLOYEES) X 27(DEPARTMENT))

 

등가 조인(Equi)  같은 DATA 존재할 때 사용(주로 사용되는 JOIN)
비등가 조인(Non_Equi) 다른 DATA가 존재할 때 사용
포괄 조인(Outer) 어느 한쪽의 TALBE에 DATA가 많을 때 수행
자체 조인(Self) 1개의 TABLE을 가지고 JOIN(등가 , 비등가, 포괄조인을 사용)

등가 조인

=> 테이블에 같은 DATA가 존재할 때 사용

- PK, FK 존재할 때 (PK, FK 같은 값)

 

EX) 회사에 근무하는 사원의 번호와 이름과 그 사원이 근무하는 부서의 이름과 지역번호를 출력

 

 

조인에서 일반조건이 있을 때 WHERE절에서 AND 조건으로 추가해야 한다
(JOIN조건을 먼저 작성하는 게 좋다)

예제

 

**세 개 이상의 TABLE JOIN**

=> N-1개의 조건이 필요

예제

 

포괄 조인(OUTER)

-어느 한쪽 테이블의 테이블의 데이터가 많을 때 사용

-데이터가 적은 테이블 끝에 (+) 표시 추가! / (NULL 값 행 삽입)

예제

비등가 조인

-데이터가 전혀 다를 때 수행하는 조인

 


자체 조인(SELF)

자체 참조 => 한 테이블 내에서 한 칼럼이 다른 칼럼을 참조

-첫 번째 행은 무조건 NULL

-한 개의 테이블을 두 개의 가상 테이블로 만들어 별칭을 두어 사용!


더보기
더보기

 

EX) 사원의 번호, 이름과 그 사원을 관리하는 관리자 번호 관리자 이름을 출력

 

15. 모든 사원들의 이름, 부서 이름 및 부서 번호를 출력

 

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

 

18. 업무에 MAN이 포함이 되며, 급여가 2500이상인 사원에 대하여 사원번호, 사원 이름, 업무, 급여, 부서명을 출력하고, 급여를 많이 받는 순서대로 출력

**포함(%, _) => LIKE
**내림차순 => DESC
19. Toronto에 근무하는 사원의 이름과 급여, 부서이름과 도시명을  출력(LOCATION테이블 CITY 컬럼)

=> N-1 조건이 필요(3개의 테이블의 조인이어서 2개의 조건이 필요!)

 



그룹 함수를 사용한 데이터 집계

그룹 함수란.. => 그룹 함수는 행 집합에 작용하여 그룹 당 하나의 결과를 생성

AVG 평균(숫자 데이터만 사용가능!)
COUNT 행의 수 반환/ 형식(* 전체를 출력할수도있고, 컬럼이 올수도있다)
* => 행으로 인식해서 행의 개수를 반환
MAX 최대값
MIN 최소값
STDDEV  
SUM 총 합(숫자 데이터만 사용가능!)
VARIANCE  

 

함수의 첫 번째 값으로 ALL(기본값)/DISTICNT이다.
기본적으로 ALL이 기본값이기 때문에 중복제거하지 않고 출력

**그룹 함수는 NULL 값 무시**

예제


더보기
더보기
AVG, SUM 예제_ 급여의 평균과, 급여의 합계 예제

 

DATE 타입에서 MIN 오래된 날짜 값(아스키코드 값으로)

 

MIN, MAX 예제

 

COUNT => 출력이 되는 행의 개수를 반환
*를 사용COUNT 예제
컬럼을 사용한 COUNT

 

**그룹 함수는 NULL 값 무시**

NVL함수를 같이 사용한다!!!(NULL값을 대체)


데이터 그룹 생성  GROUP BY

=> 그룹화되지 않은 COLUMN을 그룹화시켜준다

     그룹 함수가 SELECT 절에 사용이 됐을 때 GROUP BY절에 명시를 해줘야 한다!

      SELECT절에 GROUP 절을 구분할 컬럼을 명시하는 게 좋다

      WHERE절과 ORDER BY 절 사이에 위치!

 

HAVING 절 => 그룹에 대한 조건(GROUP BY절에서 사용!) / (일반 행의 조건 주면 X)
=> HAVING 절은 WHERE 절과 ORDER BY 절 사이에 위치!!

WHERE 절 => 행의 조건(그룹에 대한 조건을 주면 X)

 

예제

더보기
더보기
GROUP BY 예제1
GROUP BY 예제2

 

HAVING 절 => 그룹에 대한 조건


오류 내용 정리

더보기
더보기

ERROR at line 1:
ORA-00918: column ambiguously defined

동일한 열 이름이 조인되는 개별 테이블 둘 이상에 존재한다.

SQL에 사용할 열을 결정할 수 있는 충분한 정보가 포함되어 있지 않다.

 

SELECT절에서 2개의 TABLE에 있는 속해있는 COLUMN 때문에 ERROR발생!!

 

해결방법 => COLUMN명 앞에 TABLE명 작성

ERROR_column ambiguously defined

 

ERROR at line 1:

ORA-00937: not a single-group group function

=> 단일 그룹 함수가 아니다!

 

해결방법

-SELECT 절에 그룹 함수가 오면 SELECT 절의 나머지 컬럼은 GROUP BY절에 기술

-SELECT 절에 그룹함수가 오거나 GROUP BY 절 이하에 기술된 컬럼이 오면 나머지 컬럼은 SELECT 절 뒤에 올 수 없다.


자바 특징

1. 호환성 - 자바는 JVM 위에서 돌아가기 때문에 OS의 종류에 상관없이 실행
2. 객체지향적 - 객체들을 결합해서 하나의 프로그램을 만듦
3. 메모리 자동 관리 - 개발자가 직접 메모리에 접근할 수 없도록 설계, 가비지 컬렉터
4. 다양한 애플리케이션 개발 - 다양한 운영체제에서 실행되는 프로그램 다양한 프로그램(콘솔, 윈도우 어플리케이션, 웹 어플리케이션, 모바일) 개발 가능
5. 멀티스레드 구현 가능 - 하나의 프로그램이 동시에 여러 작업 처리, 대용량 작업 빨리 처리
6. 동적 로딩 지원 - 객체가 필요한 시점에 동적 로딩해서 객체 생성
7. 오픈소스 라이브러리가 풍부 - 자바는 오픈소스 언어, 참고할 수 있는 오픈소스가 풍부

JDK(Java Development Kit) - 개발을 위해 필요한 도구들을 포함

JDK = JRE + Development Tools(디버깅 도구)

 

JRE(Java Runtime Environment) - 컴파일된 자바 프로그램을 실행시킬 수 있는 자바 환경

JRE = JVM + Library Classes(Ex_ I/O(입출력), AWT)

 

JVM(Java Virtual Machine) - 자바 바이트코드(.class)를 실행 코드로 변환하여 실행

 

IDE(Integrated Development Environment) - 소스 코드 편집, 컴파일, 디버깅을 한꺼번에 할 수 있는 소프트웨어 통합 개발 환경


프로그램의 구조

-패키지
--클래스
----메소드
------main() 메소드
--------주석문
--------변수선언
--------출력문

변수(variable)

-사전적 의미로는 "변화를 줄 수 있는" 또는 "변할 수 있는 수"
-프로그래밍에서는 데이터를 담을 수 있는 공간

=> 변수 선언
=> 변수에 값 할당
// 자료형 변수명 =(대입연산자) 값
int a = 3;

상수(constant)

-사전적 의미로는 "불변하는" 또는 "변하지 않는 수"
-프로그래밍에서는 데이터를 담을 수 있는 공간
-한 번 넣으면 변하지 않는 수를 넣는 데 사용
// final 자료형 변수명 = 값
final int b = 3;​

 

변수명 사용 규칙

-대소문자가 구분되며 길이에 제한이 없다

 (int num; 과 int Num;은 서로 다르다)

-숫자로 시작할 수 없다.

 (int 1a; 허용 x)

-특수문자는 '_'와 '$'만 허용

-한글을 사용할 수 있음(권장되는 사용방법 x)

 

 

변수명 네이밍 규칙

-헝가리안 표기법(Hungarian case)
=> 변수의 자료형을 변수 명의 접두어로 붙이는 방식(int intNum; or int iNum)

-카멜 표기법(Camel case)
=> 단어와 단어 사이를 대문자로 구분하는 표기법(int myNumber;)

-파스칼 표기법(Pascal case)
=>모든 단어의 첫 글자만 대문자로 나타내고 나머지는 소문자로 나타내는 표기법

-언더바 표기법(Snake case)
=> 변수명 단어 사이에 _를 이용해서 구분하는 방법

 

 

728x90
Comments