kh day 035
오늘은 SQL문의 제일 기초라고 할 수 있는 SELECT문을 배웠다. 자바 언어를 처음 배울 때 생각도 나고 오랜만에 재밌게 수업을 들었던 것 같다 ㅎㅎ 새로운걸 배운다는건 항상 흥미롭기에... SELCET문을 하루만에 다 끝냈는데 생각보다 진도가 느리지 않은 것 같다. 아무래도 능력단위 평가가 얼마 남지 않았기 때문에 속도가 더 빨라질 것 같다. 미리 예습을 해서 수업 속도가 빨라도 잘 따라갈 수 있게끔 대비를 해야겠다. 오후에는 자바 언어의 제네릭을 마무리하고 람다식의 기본 개념을 알아보았다. 제네릭은 생각보다 쉽다고 생각했었는데 마지막 부분인 와일드카드 타입은 한번 더 제대로 복습해야겠다고 느꼈다. 문제는 람다식! 강사님께서 람다식의 기본 개념을 설명하시면서 인터페이스에 대한 개념을 언급하셨는데, 이 부분이 아직 부족하다고 느꼈다. 주말을 이용해 인터페이스와 익명구현객체, 클래스를 비롯한 자바언어 전반을 다시 공부해야겠다.
---
SQL 언어를 가지고 만들 수 있는 문장의 종류 : 5가지!
(1) DQL - Data Query Language (조회 쿼리)
데이터 조회 -> SELECT문
(2) DML - Data Manipulation Language (조작쿼리)
INSERT UPDATE DELETE문
MERGE INSERT ALL|FIRST
(3) DDL - Data Definition Language (DB객체를 CRUD 할 때 (ex)Table) ) -> DBA
(4) DCL - Data Control Language (데이터에 대한 접근권한 제어, 사용자 계정 CRUD) -> DBA
(5) TCL - Transaction Control Language (트랜잭션 제어 언어)
---
SQL 언어의 키워드 -> 대문자로 표시 ex) SELECT, FROM
우리가 지은 이름 -> 소문자로 표시
함수(자바의 메소드) -> 소문자로 표시
SELECT 문의 기본구조와 각 절의 실행순서
Clauses - - 실행순서 -
SELECT clause (5)
FROM clause (1)
[WHERE clause] (2)
[GROUP BY clause] (3)
[HAVING clause] (4)
[ORDER BY clause] (6)
---
SELECT 문의 기본문법 구조
SELECT [DISTINCT] { * or column [AS] [alias], ... }
FROM <테이블명>
-모든 column(행)을 조회
SELECT *
FROM employees;
-salary column만 조회
SELECT salary
FROM employees;
-employee_id, last_name, hire_date, salary column을 조회
SELECT
employee_id,
last_name,
hire_date,
salary
FROM
employees;
- 산술연산자의 활용 ( +, - , *, / )
SELECT
salary, -> 기본속성
salary + 100, -> 유도속성
salary - 100, -> 유도속성
salary * 100, -> 유도속성
salary / 100, -> 유도속성
FROM employees;
DESCRIBE employees; -> 어떤 column을 가지고 있는지 보여줌
= DESC employees;
결과집합 (Result Set)
SELECT 문을 수행하여 나온 결과집합을 의미
---
자바에서 .은 객체 멤버 참조 연산자이지만
sql문에서 . 소유관계를 나타냄
sys.dual은 dual테이블의 소유자가 sys 계정이라는 뜻
SYS.DUAL table -> Dummy table (의미가 전혀 없음)
FROM절을 생략할 수 없다는 제약 때문에 등장함
SELECT절에서 FROM을 생략할 수 없기 때문에 더미 테이블을 만들어서 FROM절에 적어줌
SELECT
245 * 567
FROM
dual;

---
특정 컬럼에 alias(별칭) 만들기
SELECT
last_name AS 이름,
salary AS 월급,
salary * 12 AS 연봉
FROM
employees;
별칭에 공백이 있는 경우
알파벳 대소문자 구분하는 경우
""로 묶어준다
SELECT
last_name AS "사원 이름",
salary AS "SaLARY",
salary * 12 AS "연 봉"
FROM
employees;
----
NULL 값 이해하기
자바언어에서는 참조하는 객체의 주소가 없다는 의미
분석입장에서는, "결측치(Missing Value)"라고 함. (아예 값이 없다.)
결측치가 발생하는 경우
(1) 실험측정시, 측정이 안되는 경우
(2) 실험측정장치의 오동작
(3) 관찰로 얻어지는 경우라면, 관찰이 안된 경우
(4) 관찰자(사람)의 실수 등 다양함
SELECT
employee_id,
last_name,
job_id,
commission_pct --> 없는 사람도 많다 -> 없는 사람은 NULL값 (결측치) --> 공란으로 출력
FROM
employees;
SELECT
last_name 이름,
salary 월급,
commission_pct 수수료,
salary * 12 + commission_pct AS 연봉 -> 이 경우 수수료 없는 직원들은 연봉이 NULL임
FROM
employees;

결측치의 처리: 분석에서는, 결측치 처리가 매우 다양하고
사용방법에 따라, 통계량이 변경되기 때문에 매우 주의해서 처리함
NULL 값의 기본값 처리: NVL() 함수 사용하기
NVL(열이름, 치환값)
열이름 : NULL이 포함된 열이나 표현 값
치환값 : NULL에서 변환하고자 하는 값
결측치 처리예: 대표값(= 특성값) - 평균/중위수/최빈값/
합계/제거!/보간(interpolation)
SELECT
last_name AS 이름,
salary AS 월급,
commission_pct AS 수수료,
(salary * 12) + ((salary * 12) *nvl(commission_pct, 0)) AS 연봉 -> 이와 같이 함수를 사용해 해결
FROM
employees;

---
함수 (Function)
OOP언어의 메소드와 비슷하게, 특정 기능을 수행하는 코드 덩어리에 이름을 붙인 것
대신 OOP와 다르게 함수는 어느 객체의 소속이란 개념없이 단독적으로 존재함
y=f(x)에서 f에 해당함
---
Concatenation Operator: ||
자바에서는 or 이었지만 SQL에서는 연결 연산자임!
SELECT column1 || column2
FROM table;
(1) 문자열 + 숫자
SELECT
last_name || salary AS "이름 월급"
FROM
employees;
(2) 문자열 + 날짜
SELECT
last_name || hire_date AS "이름 날짜"
FROM
employees;
---
SELECT column || literal
FROM table;
(3) 문자열 + 리터럴(문자열)
SELECT
last_name || '사원'
FROM
employees;

Oracle 자동형변환 (promotion)
날짜 <---> 문자열 <--->숫자 // 날짜 <---> 숫자 는 안 됨
---
SELECT
last_name || '의 직무는 ' || job_id || ' 입니다.' AS "사원별 직무"
FROM
employees;
SELECT
last_name || ' 의 직업은 ' || job_id
FROM
employees
WHERE -- 1차 필터링 (행을 필터링)
last_name = 'Smith'; -- = : 동등비교연산자 (자바에서는 대입연산자)
성이 Smith인 애들만 뽑아서 조회함
FROM -> WHERE -> SELECT 순으로 실행
---
DISTINCT의 활용 - 중복제거
SELECT DISTINCT column1[, column2, ..., columnN]
FROM table;
SELECT
DISTINCT job_id
FROM
employees;
SELECT
DISTINCT last_name, first_name
FROM
employees;
---
SELECT
employee_id,
last_name,
job_id,
salary
FROM
employees
WHERE
salary >= 10000;
---
람다식
자바 8부터 함수적 프로그래밍 위해 람다식 지원
람다식(Lambda Expressions)을 언어 차원에서 제공
람다 계산법에서 사용된 식을 프로그래밍 언어에 접목
익명 함수(anonymous function)을 생성하기 위한 식
자바에서 람다식을 수용한 이유
코드가 매우 간결해진다.
컬렉션 요소(대용량 데이터)를 필터링 또는 매핑해 쉽게 집계
자바는 람다식을 함수적 인터페이스의 익명 구현 객체로 취급
람다식 → 매개변수를 가진 코드블록 → 익명 구현 객체
어떤 인터페이스를 구현할지는 대입되는 인터페이스에 달려있음
Runnable runnable = () -> { ... };
*
인터페이스 구성멤버 4가지
가 추상메소드
나 상수
다 default method
라 static method
@functionalinterface
함수적인지 아닌지는 추상메소드의 갯수로 결정
1개의 추상메소드 만을 가진 인터페이스를 functionalinterface 라고 함
*
람다식의 구현대상 -> 함수적 인터페이스!
람다식의 구현대상이 되는 함수적 인터페이스를
해당 람다식의 Target Type이라고 부른다.
'국비학원' 카테고리의 다른 글
| [국비지원] KH 정보교육원 36일차 (2/2) (0) | 2022.05.17 |
|---|---|
| [국비지원] KH 정보교육원 36일차 (1/2) (0) | 2022.05.17 |
| [국비지원] KH 정보교육원 34일차 (0) | 2022.05.13 |
| [국비지원] KH 정보교육원 33일차 (0) | 2022.05.12 |
| [국비지원] KH 정보교육원 32일차 (0) | 2022.05.11 |