Fullstack-Study-241204-250625

커리큘럼(12-30/변경)

01. Java
02. git
03. Database (v)
04. Jsp [Server]

05. 미니프로젝트 (3W)
06. HTML,CSS  
07. JS

08. SpringFramework , SrpingBoot
09. React JS [Front-end]
10. 중간프로젝트 (1M)
11. Linux 명령어
12. AWS 클라우드
13. DevOps - Docker
14. App - Android
15. 최종프로젝트 (1M)

데이터베이스(DB)

관계형 데이터베이스(RDBMS)

구성요소

SQL(Structured Query Language)

엔티티 관계 모델(ER 모델)

장점

  • 조직에 대한 정보를 정확하고 자세하게 문서화
  • 정보 요구사항의 범위를 명확히 기술
  • 데이터베이스 설계를 쉽게 이해할 수 있는 표본 제공
  • 복수 응용프로그램의 통합화를 위한 효과적 프레임워크 제공

RDBMS 테이블 기본구조

RDBMS 테이블 구조

일반적 개념 모델링 DB객체
데이터집합, ralation, 관계집합 개체집합, 엔티티 테이블
튜플 레코드
속성 필드

관계형 데이터 베이스의 키(Key)

키의 속성

키의 종류

  1. 후보키(Candidate Key) 후보키 이미지
  1. 기본키(Primary Key) 기본키 이미지
  1. 대체키(Alternate Key) 대체키 이미지
  1. 슈퍼키(Super Key) 슈퍼키 이미지
  1. 외래키(Foreign Key) 외래키 이미지

SQL

DDL(Data Definition Language)

  • 예시
CREATE TABLE NEWORDERS(
    ORDERID INT,
    CUSTID INT NOT NULL,
    BOOKID INT NOT NULL,
    SALEPRICE INT DEFAULT 100000 CHECK(PRICE>1000),
    PRIMARY KEY(ORDERID),
    FOREIGN KEY(CUSTID) REFERENCES NEWCUSTOMER(CUSTID) ON DELETE CASCADE
);
ALTER TABLE [테이블명]
 [ADD 속성명 데이터타입]
 [DROP COLUMN 속성명]
 [ALTER COLUMN 속성명 데이터타입]
 [ALTER COLUMN 속성이름 <NULL/NOT NULL>]
 [ADD PRIMARY KEY(속성명)];

DROP TALBE [테이블명]

DML(Data Manipulation Language)

SELECT [속성명] FROM [테이블명]

INSERT INTO [테이블명(속성명1,속성명2,...)] VALUES(데이터1,데이터2,...)

UPDATE [테이블명] SET [속성명 = 변경할 데이터] WHERE [조건]

DELETE FROM [테이블명] WHERE [조건]

DCL(Data Control Language)

GRANT [권한] ON [테이블명] TO [사용자 이름]

REVOKE [권한] ON [테이블명] FROM [사용자이름]

TCL(트랜잭션 제어어)


DML - SELECT

SELECT [DISTINCT] {*|COLUMN [[AS] ALIAS], ...} FROM TABLE;

  • SELECT: 하나 이상의 열 나열
  • DISTINCT: 중복 제거
  • *: 모든 열 선택
  • COLUMN : 명명된 열 선택
  • AS : 열 별칭(ALIAS) 지정
  • ALIAS : 선택된 열을 다른 이름으로 변경
  • FROM TABLE : 열을 포함하는 테이블 명시

SQL 문장 작성

기본 표시 형식

연산자 우선순위

SELECT FIRST_NAME, LAST_NAME, SALARY, SALARY+SALARY*0.1 FROM EMPLOYEES;

  • 곱하기와 나누기는 더하기와 뺴기보다 우선순위가 높음
  • 같은 우선순위의 연산자는 좌측에서 우측으로 계산
  • 괄호는 강제로 계산의 우선순위를 바꾸거나 문장을 명료하게 하기 위해 사용

NULL 값

SELECT FIRST_NAME, DEPARTMENT_ID, COMMISSION_PCT FROM EMPLOYEES;

  • NULL은 이용할 수 없거나, 지정되지 않았거나, 알 수 없거나 또는 적용할 수 없는 값
  • NULL은 숫자 0이나 공백과는 다름름

ALIAS 정의

SELECT FIRST_NAME AS 이름, SALARY 급여 FROM EMPLOYEES;

  • 열 헤딩 이름 변경
  • 열 이름 바로 뒤에 별칭을 두거나 AS와 함께 쓰이기도 함
  • 공백이나 특수문자 또는 대/소문자가 있으면 이중 인용부호(" ")가 필요

문자열 붙이기

SELECT FIRST_NAME || ' ' || LAST_NAME || '''s salary is $' || salary AS "Employee Details" FROM EMPLOYEES;

  • SELECT 절에 포함된 리터럴은 문자 표현식 또는 숫자
  • 날짜와 문자 리터럴 값단일 인용부호(' ') 안에 있어야 함
  • 숫자 리터럴단일 인용부호(' ')를 사용하지 않음 ||를 이용하면 값을 연결

중복 제거

SELECT DISTINCT DEPARTMENT_ID FROM EMPLOYEES;

  • 디폴트 출력은 중복되는 행을 포함하는 모든 행
  • SELECT절에서 DISTINCT 키워드를 사용해 중복되는 행을 제거

행의 주소, 행의 번호

SELECT ROWID, ROWNUM, EMPLOYEE_ID, FIRST_NAME FROM EMPLOYEES;

  • ROWID : 데이터베이스에서 행의 주소 반환
  • ROWNUM : 쿼리에 의해 반환되는 행의 번호 출력(데이터가 조회된 순서)

데이터 제한(SELECT > WHERE)

SELECT [DISTINCT] {column1,colum2,... } FROM TABLE [WHERE CONDITIONS]

  • 예시
SELECT FIRST_NAME, JOB_ID, DEPARTMENT_ID
FROM EMPLOYEES
WHERE JOB_ID='IT_PROG';

문자 스트링과 날짜

비교 연산자

연산자 설명
= 같다
> 보다 크다
>= 보다 크거나 같다
< 보다 작다
<= 보다 작거나 같다
<> 같지 않다

BETWEEN 연산자

SELECT FIRST_NAME, SALARY
FROM EMPLOYEES
WHERE SALARY BETWEEN 10000 AND 12000;

IN 연산자

SELECT EMPLOYEE_ID, FIRST_NAME, SALARY, MANAGER_ID
FROM EMPLOYEES
WHERE MANAGER_ID IN(101,102,103);
SELECT FIRST_NAME, LAST_NAME, JOB_ID, DEPARTMENT_ID
FROM EMPLOYEES
WHERE JOB_ID IN('IT_fROG','FI_MGR','AD_VP');

LIKE 연산자

SELECT FIRST_NAME, LAST_NAME, JOB_ID, DEPARTMENT_ID
FROM EMPLOYEES
WHERE JOB_ID LIKE 'IT%';
  • 이메일의 두 번쨰 문자가 A인 모든 사원들을 조회
SELECT FIRST_NAME, EMAIL
FROM EMPLOYEES
WHERE EMAIL LIKE '_A%';

IS NULL 연산자

SEELCT FIRST_NAME, MANAGER_ID
FROM EMPLOYEES
WHERE MANAGER_ID IS NULL;

논리연산자

우선순위 연산자
1 모든 비교 연산자
2 NOT
3 AND
4 OR
  • 조건
  • JOB_ID가 IT_PROG 이거나 FI_MGR임
  • 급여가 6000 이상
SELECT FIRST_NAME, JOB_ID, SALARY
FROM EMPLOYEES
WHERE (JOB_ID='IT_PROG' OR JOB_ID='FI_MGR')
AND SALARY>=6000;

데이터 정렬 (SELECT - ORDER BY구문)

SELECT FIRST_NAME, HIRE_DATE
FROM EMPLOYEES
ORDER BY HIRE_DATE DESC;

열 별칭에 의한 정렬

SELECT FIRST_NAME, SALARY*12 AS ANNSAL
FROM EMPLOYEES
ORDERY BY ANNSAL;