Today I Learned

최지웅·2023년 10월 25일
0

Today I Learned

목록 보기
30/238

오늘할일

이따 봉사 끝나고 집가서
1. 데이터베이스 과제 오답_30분?
2. PPT스마일+개념 정주행_1시간 반?
3. 오전에 정리한 SQL핵싱 공부_30분?
4. 햇갈리는 몇가지 쿼리 작성해보기. 정도? EXISTS나 PROCEDURE..?_10분?
5. 시험공부 *해둔거보기?

와 봉사를 다녀오니 몸이 진짜 안좋아졌어요.. 저번주 초부터 몸이 정말 안좋았는데 대충 진통제 먹고 버티다가 지금도 진짜 안좋아진게 몸으로 느껴지는데... 오늘만 버티고 내일 시험끝나자마자 병원가서 링겔이라도 맞아야 할 듯 해요.. 위에 적어둔거 빨래 돌아갈 때 까지만이라도 최대한 해봐야지...진짜 너무 힘드네... 근데 공부하느라 여자친구랑도 잘 못놀아서 내일 밤늦게 경복궁갈거같은데... 그리고 금요일 쉅 끝나자마자 본가가면 진짜 많이 몸에 부담이 될 듯 하다... 내일 링겔만 믿고 버텨야지.. 진짜 몸이 너무 안좋네... 그래도 지금까지 버틴 나 칭찬해,, 하루만 더 고생하자.

마지막 공부 21:43시작.
3. 공부 복습 21:15완
3-1. 데이터베이스 생성 조건문
CREATE DATABASE IF NOT EXISTS univDB;

3-2. EXIST사용
SELECT 이름 FROM 학생 WHERE EXISTS (SELECT * FROM 수강 WHERE 수강.학번=학생.학번 AND 과목번호='c002');

3-3. CROSS JOIN은 FROM 학생, 수강과 동일

3-4. 데이터 삭제
DELETE FROM 과목 WHERE ~

3-5. 테이블 대체키설정
CREATE TABLE 학생2(
UNIQUE(휴대폰번호) -- 대체키 nullable하다
)

3-6. 스키마 수정
ALTER TABLE 학생 ADD|MODIFY|DROP CONSTRAINT EMC CHECK(재고량>0);

3-7. 유저생성
CREATE USER 'jimo'@'192.168.111.111' IDENTIFIED BY '1234';

3-8. 현재유저확인
SELECT user();

3-9. 뷰생성
CREATE VIEW V1_수강현황(과목번호, 수강인원수) AS SELECT~;

3-10. 권한부여
GRANT INSERT ON univDB.학생 TO 'jimo'@'192.168.111.111' WITH GRANT OPTION;

3-11. 권한철회
REVOKE INSERT, GRANT OPTION ON univDB.학생 FROM 'jimo'@'192.168.111.111'

3-12. 중복없는 인덱스 생성
CREATE UNIQUE INDEX idx_1 ON 학생(학번ASC, 과목번호);

3-13. 인덱스 제거 두가지
DROP INDEX idx_1 ON 학생;
ALTER TABLE 학생 DROP INDEX idx_1;

3-14. DATE_FORMAT내장함수
SELECT 신청날짜, DATE_FORMAT(신청날짜, '%b/%d/%y'), DATE_FORMAT(신청날짜, '%Y년%c월%e일') FROM 수강; -- Yy / cmbM / ed / a 암기.** 시험 직전

3-15. 날짜차이
SELECT SYSDATE(), NOW(), DATEDIFF(신청날짜, '2019-01-01') FROM 수강; -- 일 단위. DATE일 DIFF차이니까.alter

3-16. 프로시져
DELIMITER //
CREATE PROCEDURE InsertOrUpdateCourse(
IN CourseNo VARCHAR(4),
IN CourseName VARCHAR(20)
)
BEGIN
DECLARE Count INT;
SELECT COUNT(*) INTO Count FROM 수강 WHERE 수강.과목번호=CourseNo AND 수강.과목이름=CourseName;
IF Count=0 THEN
INSERT INTO 수강 VALUES (...);
ELSE
UPDATE 수강 SET 수강.과목이름=CourseName WHERE 수강.과목번호=CourseNo;
END IF;
END;
//
DELIMITER;
CALL InsertOrUpdateCourse('c006', '연극학개론');
DROP PROCEDURE InsertOrUpdateCourse;

  1. 과제 피드백: 문제 잘 읽고 문제에서 준 속성 그대로 쓰자 ex)컴퓨터->컴퓨터공학과 노노(21:32완)
    1-1. SELECT문 질의 계산 순서: 다 그대로인데, 조건 다 지나고 SELECT한뒤 결과 정렬
    FROM-WHERE-GROUP BY-HAVING-SELECT-ORDER BY

1-2. SQL은 대화식(콘솔), 내포식(프로그래밍언어내부), 내장식(.sql분리)으로 사용할 수 있다.

1-3. LIMIT키워드
SELECT * FROM 테이블명 LIMIT 10 OFFSET 20; 20번째부터 10개읽는다. 개수제한

1-4. ⑤ 남학생 중 나이가 최소인 학생의 학번, 이름, 나이를 검색하라.
SELECT 학번, 이름, 나이 FROM 학생 WHERE 나이 = (SELECT MIN(나이) FROM 학생 WHERE 성별=‘남’);로 풀었었는데, 그러면 같은나이 여자가 걸릴 수있으니 AND로 한번 더 성별체크

1-5. ⑦ 컴퓨터학과에 소속된 학생들의 이름과 수강한 과목이름을 검색하시오.처럼 3중첩이면 그냥 AND 조인이 나음.
그리고 제발 문제좀 잘 읽자. 연습 많이해서 예제 DB에 익숙해진건 알지만, 문제에서 보면 이미 수강테이블에 들어있는 과목번호를 과목테이블에 조인해서 가져오고 있지않냐. 알면서 틀리는건 진짜 아니니까 문제를 제대로 보고 시험보기 직전에 현재까지 봐온 모든 예제의 DB구조를 clear하고 가자.
이제 2장시작.

1-6. 인덱스의 장단점
⦁ 테이블 안의 데이터를 쉽고 빠르게 찾을 수 있도록 만든 데이터베이스 객체이다.
SQL을 실행할 때, 디스크 접근 횟수를 줄여 검색 속도를 높이기 위해 인덱스를 사용한다.
B-트리를 이용하면 모든 데이터에 대한 일정 수준의 검색 시간을 보장하는 장점이 있다.
⦁ 테이블 행이 입력되거나 수정될 때마다 인덱스가 재구성되어 데이터를 검색할 때는 효율적이지만 데이터를 추가하고 수정할 때는 인덱스 관리 때문에 시간이 더 걸린다.

1-7. 인덱스를 사용하는 것이 바람직한 경우와 그렇지 않은 경우
1) 인덱스의 사용이 바람직한 경우
-기본키와 외래키의 경우
-WHERE절 조건식에 자주 사용되는 경우
-조인 조건식에 자주 사용되는 열의 경우
-정수형, 고정길이 문자형 열의 경우
2) 인덱스의 사용이 바람직하지 않은 경우
-갱신이 빈번한 열의 경우
-집계함수, 내장함수를 적용하여 열값을 변형하는 경우
-열의 도메인이 작아 열의 선택도가 높은 경우
-범위 검색을 하는 경우
-테이블의 행 개수가 별로 없는 경우

  1. 시험공부 중요표시해둔거 보기 21:55 완
    5-1. 데이터베이스의 정의, 특성, CAP이론(분산)
    5-2. 데이터모델의 3요소(관계형데이터의 3요소)
    5-3. 카디널리티, 릴레이션 내포&외연, 릴레이션 특성
    5-4. 후보키 옳은 것과 옳지 않은 것

    5-5. 관계 데이터 모델의 제약조건 4가지
    5-6. 디비전

    5-7. 관계대수 표현 및 기호


    5-8. 경이로운 SQL

    5-9. 테이블 확인 DESC 학생;
    5-10. INSERT 시 넣은 외래키 값이 해당 테이블에 존재하지 않는다면 오류 발생한다. 즉, INSERT문의 키들이 잘못되지 않았는지 잘 보자. 우선 기본 제약조건은 ON DELETE NO ACTION이기에 다른 테이블(수강)에서 (과목)참조하는 테이블의 경우 삭제하지 못한다.
    5-11. 애매하면 한번에 하려하지 말고 나누자. 만약 SLECT MAX(), MIN()으로 하면 ()집합으로 보지 않고 테이블로 본다.
    5-12. 관계대수 순서 속지말자

    5-13. 세미조인은 자연조인으로 표현

오늘한일
데이터베이스 공부
4주차 PPT 완료 09:54
5주차 PPT 완료 11:21
6주차 PPT 완료 12:15

다림교육 봉사

SK C&C 직무체험 선발합격
이번주 중으로 다음주 교수님께 공결 문의드리기

그리고 그 디지털 인재교육 신청 29일 마감이니까 그것도 잊지말고 신청하기

profile
이제 3학년..

0개의 댓글