[IT국비지원] 개발자 교육 26일 차 : DB(2023.08.31)fit.구디아카데미,김지훈 강사님

Nicole Gold·2023년 8월 31일
0

K-digital training

목록 보기
27/60

이하 구디아카데미 김지훈 강사님의 수업자료와 강의 내용 정리, 실습한 내용을 정리함

벌써 목요일이라니 시간 참 빠르다(⊙o⊙)(⊙ˍ⊙)(⊙o⊙)(⊙o⊙)

SELETE

특정 조건의 데이터 조회

  • select [컬럼 이름] from [테이블명] where [조건]
    • AND 조건 : select [컬럼 이름] from [테이블명] where [조건] and [조건]
    • OR 조건 : select [컬럼 이름] from [테이블명] where [조건] or [조건]
    • BETWEEN AND : select [컬럼 이름] from [테이블명] where [조건 대상] between [조건] and [조건]

중복 제거

  • SELECT DISTINCT [컬럼] FROM [테이블];
  • 두 개 이상의 컬럼에 사용하면 제대로 작동하지 않는다. 하나의 컬럼에만 사용하는 것이 좋다.

IN

  • select * from [테이블명] where [family_name in('김','이','박');] <조건

is null / not null

  • select *from [테이블명] where [commission is null;] <조건
  • select *from [테이블명] where [commission is not null;] < 조건

LIKE

  • WHERE [컬럼명] LIKE '%[문자열]%'
    • ze% : ze 로 시작되는...
    • %com : com 으로 끝나는...
    • %se% : se를 포함하는...
    • %s%e% : s 와 e를 포함하는...

ORDER BY

  • 오름차순(ASC) 내림차순(DESC)
  • order by 는 where 조건 뒤에 붙는다.
  • ex) select*from [테이블명] order by [컬럼명] asc / desc

GROUP BY

  • SELECT [컬럼] FROM [테이블 이름] GROUP BY[그루핑할 컬럼]
  • ex) select depart_no,sum(salary)as 합계 from employees group by depart_no;
    • depart_no 컬럼과 sum(salary)를 합계로 표시한 컬럼을 가져옴 / employees 라는 테이블의 / depart_no 를 그루핑해서
  • ex2) select depart_no,sum(salary)as 합계, avg(commission)as 인센평균 from employees group by depart_no;
    • depart_no 컬럼과 sum(salary)를 합계로 표시한 컬럼과, 인센평균이라고 표시된 커미션의 평균값을 가져옴 / employees 라는 테이블의 / depart_no 를 그루핑해서

HAVING

  • GROUP BY 결과로부터 특정 조건을 만족하는 값을 추출할 경우 사용
  • ex) select depart_no,sum(salary)as 합계 from employees group by depart_no having sum(salary)>=100000000 order by 합계 desc;
    • 부서별 급여 합계가 1000만 원 이상이고 합계가 높은 순으로 정렬



TRANSACTION

  • Transaction 은 data Base 에서 사용되는 (원래는 쪼갤 수 있는데) 쪼갤 수 없는 업무처리의 단위이다.
  • All or Nothing, 하나의 작업 내부의 과정이 잘못되면 전부 취소되어야 한다.

commit / rollback / autocommit




CONSTRAINT

  • 제약 조건은 컬럼에 데이터를 넣을 경우 특정한 조건을 만족시켜야 할 경우 사용한다.

PRIMARY KEY : 기본키(PK)

  • 테이블 생성 시 함께 생성하는 방식이 가장 많이 사용됨.
  • 만들어진 테이블에 넣기 :
    ATTER TABLE [테이블명] ADD CONSTRAINT [제약조건종류] (적용 필드);
    • ex) alter table pk_test add constraint primary key(first_col);
    • pk_test 테이블을 수정함 / 제약 조건을 넣는 / first_col 에 primary key 라는

duplicate

  • 만약 해당 pk 가 없으면 insert 하고 없으면 upsert
  • ex) insert into employees (emp_no, first_name, family_name, email, mobile, salary) values (112, '태근', '김', 'email@naver.con', '0101241234',5000000) on duplicate key update first_name='태곤', family_name='박', salary=500000;
    • 임플로이 테이블에 값을 넣음 col (emp_no, first_name, family_name, email, mobile, salary) 들이고 값은 (112, '태근', '김', 'email@naver.con', '0101241234',5000000) 임.
      근데 중복되면 업데이트 해줘 (first_name='태곤', family_name='박', salary=500000;) 로.

복합키 : 16개까지 가능

NOT NULL 제약 조건

  • 컬럼 속성으로 취급된다.
  • ALTER TABLE [테이블명] MODIFY [컬럼명 데이터타입(사이즈) NOT NULL]
  • ex) alter table pk_test modify column second_col varchar(4) not null;
    • pk_test 테이블 수정 / 문자 길이가 4인 second_col 컬럼 의 속성 변경 / 공백을 허용하지 않도록

제약 조건 삭제

  • ALTER TABLE [테이블명] DROP[ [제약조건종류];
  • ex) alter table pk_two_test drop primary key;
    • pk_two_test 를 수정해 / primary key 삭제하도록



Relation

  • RDBMS 의 R 은 Relation 의 약자이다.

  • 그래서 테이블 간에 부모 자식 관계 설정을 할 수 있다.
    0 : 0개
    | : 1개
    ㅌ: 1 개 이상

  • 이때 연결되는 선은 실선과 점선에 따라 의미가 달라진다.

  • 실선 : 부모의 primary key 를 자식이 primary key 로 사용 ( O ) 식별 관계

  • 점선 : 부모의 primary key 를 자식이 primary key 로 사용 ( X ) 비 식별 관계

  • 아래 내용에서 학생 테이블은 과목과 동아리 테이블의 부모 테이블이 된다.


참조 제약 조건(참조키, 외래키)

  • FOREIGN KEY (FK)

만들면서 설정 가능

  • 최조 컬럼 설정 시 막줄에 추가 foreign key(컬럼 이름) references [참조해올 테이블 명](컬럼 이름)

만들어진 테이블에 추가

  • ALTER TABLE [테이블 이름] ADD CONSTRAINT [제약조건 타입](적용컬럼) REFERENCES [테이블명(가져올컬럼)]
  • ex) alter table child_table add constraint foreign key (user_id)
    references parent_teable(user_id);
    • child_table 테이블을 수정해 / 제약조건을 추가하도록 / user_id 라는 컬럼에 foreign key 걸도록 / 이 user_id 라는 컬럼은 parent_teable의 user_id 컬럼에서 가져옴

엔티티 관계도

연계참조 무결성 제약조건

  • 참조되는 테이블은 논리적으로 오류가 있으면 안 됨

  • 그래서 부모 테이블의 내용이 삭제될 경우 참조하는 자식 테이블의 데이터를 지움

  • ON DELETE CASCADE

  • supplier 라는 테이블 생성
    supplier_id 라는 int 컬럼이 있고 PK 임
    supplier_name 라는 문자 컬럼이 있음 not null 제약이 있음
    phone 이라는 문자 컬럼이 있음

  • products 라는 테이블 생성
    product_id int 컬럼이 있고 PK 임
    procuct_price 라는 int 컬럼이 있음
    supplier_id 라는 int 컬럼이 있음
    supplier_id는 외래키임 / supplier 의 supplier_id 컬럼에서 가져옴
    얘는 종속 삭제됨(supplier에 있는 애가 삭제되면 같이 삭제됨)

  • delete from supplier where supplier_id = '1';
    지워라/ supplier 테이블의 / supplier_id 라는 행의 첫 번째 행에서

    • 첫 번째 행 값이 지워진다.
  • 이 경우 자식 테이블의 supplier_id 1번도 지워진다.

  • 없는 부모의 아이디를 이용해서 넣을 경우

  • insert into products (product_id,supplier_id,procuct_price)
    values(1115,4,7000);

    • 값을 넣어라 products 테이블에 / product_id, supplier_id, procuct_price 행의 값이 각각 1115,4,7000로.
    • 이 경우 supplier_id 4가 없다는 오류가 떨어진다.

유니크 제약 조건

  • UNIQUE : 중복을 허용하지 않는 제약조건

  • UNIQUE + NOT NULL = PRIMARY KEY

  • UNIQUE 는 NULL 을 허용한다.

  • UNIQUE 는 여러 개 사용 가능하다.

  • ALTER TABLE [테이블 이름] ADD CONSTRAINT [제약조건 종류](적용 컬럼)

    • alter table supplier add constraint unique(supplier_name);
    • supplier 라는 테이블을 수정한다 / 제약조건 추가 / supplier_name 이라는 컬럼에 유니크라는
  • 동일한 supplier_name 을 넣으려고 할 시 오류 발생 Duplicate entry '박영수' for key 'supplier_name'

Check 제약조건

  • 조건에 맞지 않으면 데이터 입력을 하지 않는다.
  • 현재는 거의 사용하지 않는다.
  • ALTER TABLE [테이블 이름] ADD CONSTRAINT 제약조건종류;
  • alter table products add constraint check(procuct_price between 5000 and 10000);
    • products 라는 테이블을 수정한다 / 체크라는 제약조건을 추가하도록 / procuct_price 컬럼 값은 5000에서 10000 사이이다.
    • 범위 밖의 값을 넣으려고 하면 CONSTRAINT CONSTRAINT_1failed forgdj70.products`` 와 같이 constraint 오류 발생
  • 제약 조건 확인 : select * from information_schema.TABLE_CONSTRAINTS where table_name='products';



Sub Query

  • 서브쿼리는 '쿼리 안의 쿼리' 라는 뜻이다.
  • 서브쿼리는 사전에 추출된 내용에서 재검색 하거나, 검색된 내용을 가상 컬럼을 만들어 추가 할 수 있다.
  • 즉, 서브쿼리를 사용하는 이유는 가져온 데이터를 재정제 하기 위함이라 볼 수 있다.

  1. DB 정의와 기능에 대해 설명하시오.
    데이터를 영구적으로 저장할 수 있는 저장소로, 서로 다른 시스템 간에 데이터를 공유할 수 있다.

  2. user에 권한부여 시 ALL PRIVILEGES, GRANT OPTION 의미는?
    모든 권한 부여, 권한 부여 제외

  3. DDL/DCL/DML 을 간략하게 설명하시오.

  • DDL : 데이터 정의어 - 구조를 정의하는 구문으로 CREATE, ALTER, DROP 등이 있다.
  • DLC : 데이터 제어어 - GRANT, REVOK 등이 있다.
  • DML : 데이터 조작어 - 데이터를 취급하는 구문으로 SELECT, INSERT, UPDATE 등이 있다.
  1. ALTER 와 UPDATE 의 차이점은?
    ALTER 는 데이터 구조를 수정하는 것이고 UPDATE 는 데이터 자체를 수정하는 것

  2. TABLE 에서 컬럼이란 무엇인가?
    관계형 데이터베이스 테이블에서 특정한 단순 자료형의 일련의 데이터값과 테이블에서의 각 열을 말한다. 컬럼은 열이 어떻게 구성되어야 할지에 대한 구조를 제공한다.(각각의 열에 위치한 정보)

  3. order by 에서 오름차순과 내림차순의 특징을 설명하시오.
    오름차순은 아래로 내려갈수록 값이 커지도록 정렬, 내림차순은 내려갈수록 값이 커지도록 정렬한다.

  4. autocommit이란 무엇인가?
    자동 커밋. 커밋이란 실행쿼리를 확정 짓는 명령어인데, 이것을 자동으로 수행하게 함.

  5. 식별/비식별관계를 설명하시오
    식별 관계는 부모의 primary key 를 자식이 primary key 로 사용하는 것이고
    비식별 관계는 부모의 primary key 를 자식이 primary key 로 사용하지 않는다.(그냥 가져다 쓰기만 함)

  6. 기본키와 외래키에 대해 설명하시오
    기본키 : primary key 로, 고유한 값을 가져야 하고 null을 허용하지 않음
    외래키 : 다른 데이터테이블의 primary key 를 참조해서 가져온 키

  7. 이미 만들어진 테이블에 기본키를 추가하기 전 반드시 확인해야하는 부분은?
    해당 테이블의 기본키를 설정하고자 하는 컬럼에 중복 값이 있는지 확인

  8. 외래키를 복합키로 사용하는 것을 권장하지 않는 이유는?
    insert 나 update 에 제한을 주기 때문

  9. transaction 속성 4가지는 무엇이며 그중 원자성의 특징을 설명해 보자

  • 원자성 (Atomicity) : 트랜잭션이 데이터베이스에 모두 반영되든가, 아니면 전혀 반영되지 않아야 한다는 것. 쪼갤 수 없는 업무 단위. 내부적으로는 여러 작업이나, 외부에서는 하나의 작업으로 보이기 때문.
  • 일관성 (Consistency) : 트랜잭션의 작업 처리 결과가 항상 일관성이 있어야 한다는 것
  • 독립성 (Isolation) : 독립성은 둘 이상의 트랜잭션이 동시에 실행되고 있을 경우 어떤 하나의 트랜잭션이라도, 다른 트랜잭션의 연산에 끼어들 수 없다는 것
  • 지속성 (Durability) : 트랜잭션이 성공적으로 완료됬을 경우, 결과는 영구적으로 반영되어야 한다는 것
  1. 부모 데이터를 지우면 자식 데이터도 함께 지워지는 제약 조건은?
    on delete cascade

  2. UNIQUE 제약 조건을 설명하시오.
    중복을 허용하지 않는 제약 조건. null 은 허용하며 여러 개 사용 가능하다.

  3. NOT NULL 제약 조건 설명해보자.
    null 을 허용하지 않는다.

  4. CHECK 제약 조건을 설명 해보자.
    체크(조건)에 해당되지 않는 것은 데이터에 반영하지 않는다.


profile
JAVA 개발자로 가는 길

0개의 댓글

관련 채용 정보