[TIL] 240207

Geehyun(장지현)·2024년 2월 8일

TIL

목록 보기
29/70
post-thumbnail

Today

  • SQL 프로그래밍

    • SQL 연산자 관련 수업 진행
    • 파일로 내리기, 파일 읽기 실습진행
      • C드라이브의 경우 권한이 없어서 내부 폴더로 접근이 어려움 한다면 C:\ 자체에 폴더를 생성해야하는데 권장하지 않음 - 난...노트북이라 D드라이브가 없어서 어쩔 수 없이 C:\ 폴더 생성해서 진행
    • SELECT 기본 문법 외 수업 진행
    # 2024-02-07 실습내용
    
    # dat 파일로 내려받기
    SELECT *
    INTO OUTFILE 'C:\\mariaDB\\tbl_member.dat'
    FIELDS TERMINATED BY '||' ENCLOSED BY '"'
    FROM tbl_member;
    # FIELDS TERMINATED BY '미입력 시 ,(콤마)가 기본값으로 적용 됨 
    # ENCLOSED BY 미입력 시 ""(쌍따옴표)가 기본값으로 적용 됨
    
    
    
    #1. 등록일 : 년도, 월, 날짜, 시간
    SELECT idx AS 'No', orderNo AS '주문번호', goodsCode AS '상품코드', unitPrice AS   '단가', orderedCnt AS '주문개수', amount AS '총액', YEAR(regDate) AS '주문 년도',   MONTH(regDate) AS '주문 월', right(DATE(regDate),2) AS '주문 일', hour(TIME(regDate)) AS '주문시간'
    INTO OUTFILE 'C:\\mariaDB\\tbl_orderdetail_01.dat'
    FIELDS TERMINATED BY '||' ENCLOSED BY '"'
    FROM tbl_orderdetail
    ;
    
    #2. 상품코드로 그룹핑하여 출력 => 주문번호, 상품코드
    SELECT orderNo AS '주문번호', goodsCode AS '상품코드'
    INTO OUTFILE 'C:\\mariaDB\\tbl_orderdetail_02.dat'
    FIELDS TERMINATED BY '||' ENCLOSED BY '"'
    FROM tbl_orderdetail
    GROUP BY goodsCode
    ;
    
    #3. 상품 단가가 500~1500 사이의 주문내역만 표시
    SELECT idx AS 'No', orderNo AS '주문번호', goodsCode AS '상품코드', unitPrice AS '단가', orderedCnt AS '주문개수', amount AS '총액', YEAR(regDate) AS '주문 년도', MONTH(regDate) AS '주문 월', right(DATE(regDate),2) AS '주문 일', hour(TIME(regDate)) AS '주문시간'
    INTO OUTFILE 'C:\\mariaDB\\tbl_orderdetail_03.dat'
    FIELDS TERMINATED BY '||' ENCLOSED BY '"'
    FROM tbl_orderdetail
    WHERE unitPrice >= 500 && unitPrice <= 1500
    ;
    
    
    # 외부파일 읽어서 테이블에 넣기
    LOAD DATA LOCAL INFILE 'C:\\mariaDB\\tbl_memberAll.dat'
    INTO TABLE tbl_member
    FIELDS TERMINATED BY '||' ENCLOSED BY '"'
    ;
    # FIELDS TERMINATED BY '미입력 시 ,(콤마)가 기본값으로 적용 됨 
    # ENCLOSED BY 미입력 시 ""(쌍따옴표)가 기본값으로 적용 됨
    
    
    #1. 이름에 '홍'이 들어가지 않는 회원정보 (난 '지'로 해야겠다.)
    SELECT *
    FROM tbl_member
    WHERE NOT name LIKE '%지%'
    ;
    
    # 다음의 수식을 출력하시오.
    # 3.5 + 4.8 | 3 /2 | 0.8 * 4 | 2 - 10 | 10 / 2 의 몫 | 7 / 2 의 나머지
    select 3.5 + 4.8 AS 'No1', 3 /2 AS 'No2', 0.8 * 4 AS 'No3', 2 - 10 AS 'No4', 10 DIV 2 AS 'No5', 7 % 2 AS 'No6';
    
    # 변수 선언 및 할당 방법
    SET @ADDR = '서울 강남구 논현동';
    SET @TEL = '02-1111-1111';
    SELECT @ADDR AS addr1, @TEL AS phone;
    
    # 기본 변수 선언과 SELECT문에서 변수선언 방식
    SET @TEMP_ADDR = '', @SSN1 = '', @SSN2='';
    SELECT @TEMP_ADDR := CONCAT(addr1, addr2), @SSN1 := LEFT(jumin, 6), @SSN2 := RIGHT(jumin,7)
    FROM tbl_member;
    
    # 최소값 찾기 (LEAST)
    SELECT LEAST('B', 'A', 'C');
    SELECT LEAST(1,5,7,8);
    
    # 수치형 자료에 대한 최소/최대 값 찾기 (MIN/MAX)
    SELECT MIN(mileage) AS min_mile, MAX(mileage) AS max_mile
    FROM tbl_member;
    
    # 인덱스 지정을 위해 임시 테이블 만들기
    # CREATE TABLE 기본 구문 : CREATE TABLE 테이블명( 컬럼명 자료형(사이즈) NULL사용여부 DEFAULT 기본값)
    CREATE TABLE tbl_test (
    		idx INT NOT NULL AUTO_INCREMENT COMMENT '인덱스',
    		title_no VARCHAR(10) NOT NULL COMMENT '제목번호'COLLATE 'utf8mb4_general_ci',
    		title VARCHAR(100) NULL DEFAULT NULL COMMENT '제목' COLLATE 'utf8mb4_general_ci',
    		PRIMARY KEY (title_no) USING BTREE,
    		INDEX idx (idx) USING BTREE    #AUTO_INCREMENT 속성을 지정하기 위해서는 반드시 기본키 또는 인덱스로 추가되어있어야 함.
    		# AUTO_INCREMENT의 경우 특정 데이터를  DELETE 할 경우 삭제된 데이터의 idx 그대로 비워둔채 그 다음 번호로 매겨짐 => TRUNCATE TABLE 테이블명 할 경우 해당 테이블 초기화 됨(값도 없어짐)
    )
    COMMENT = '테스트용 테이블'
    COLLATE = 'utf8mb4_general_ci'
    ENGINE = innoDB
    ;
    
    # 임시 테이블에 값 추가
    # INSRT문 기본 구문 : INSERT INTO 테이블명 (컬럼1, 컬럼2,,,) VALUES (값1, 값2,,,);
    INSERT INTO tbl_test (title_no, title) VALUES ('0001', 'test1');
    INSERT INTO tbl_test (title_no, title) VALUES ('0002', 'test2');
    INSERT INTO tbl_test (title_no, title) VALUES ('0003', 'test3');
    INSERT INTO tbl_test (title_no, title) VALUES ('0004', 'test4');
    INSERT INTO tbl_test (title_no, title) VALUES ('0005', 'test5');
    INSERT INTO tbl_test (title_no, title) VALUES ('0006', 'test6');
    INSERT INTO tbl_test (title_no, title) VALUES ('0007', 'test7');
    INSERT INTO tbl_test (title_no, title) VALUES ('0008', 'test8');
    INSERT INTO tbl_test (title_no, title) VALUES ('0009', 'test9');
    INSERT INTO tbl_test (title_no, title) VALUES ('00010', 'test10');
    
    # 넣은 값 조회
    SELECT * FROM tbl_test;
    
    # UPDATE 기본구문 : UPDATE 테이블명 SET 컬럼1 = 값1, 컬럼2 = 값2,,,, WHERE 조건
    # UPDATE 구문 사용시 WHERE 조건절을 제대로 명시 안해주면 모든 컬럼에 대해 값이 수정될 수 있으므로 주의해야합니다.
    UPDATE tbl_test
    SET title = 'test10_test'
    WHERE title_no = '00010';
    
    # DELETE 기본구문 : DELETE FROM 테이블명 WHERE 조건절
    # 업데이트와 마찬가지로 WHERE조건을 입력안할 시 전체 데이터가 삭제될 수 있으니 주의해야합니다.
    # DELETE의 경우 단순 데이터 삭제이기 떄문에 실제 테이블 자체의 값을 전체 삭제 및 초기화를 진행하기 위해서는 TRUNCATE 문을 이용해야합니다.
    # TRUNCATE 기본구문 :  TRUNCATE TABLE 테이블명
    
    SELECT * FROM tbl_test;
    
    # MariaDB의 경우 autoCommit이 설정되어있어서, 사용자가 쿼리를 실행할 때마다 자동으로 Commit이 됩니다.
    # 해당 설정에 대해 조작할 떄는 SET AUTOCOMMIT에 대한 값을 1(autoCommint 활성화) / 0 (autoCommit 비활성화)로 설정할 수 있습ㄴ디ㅏ.
    SET AUTOCOMMIT=0;
    
    # START TRANSACTION : 트랜잭션 시작을 알리는 문장
    # ROLLBACK : 트랜잭션 시작점으로 돌아가는 문장
    # COMMIT : 트랜잭션 작업 전부 완료 후 확정하는 문장
    
    # 트랜잭션 시작
    START TRANSACTION;
    # 트랜잭션 내용 작성
    SELECT * FROM tbl_test;
    UPDATE tbl_test SET title = 'update_test' WHERE idx = 10;
    SELECT * FROM tbl_test;
    # 트랜잭션 시작시점으로 되돌리기
    ROLLBACK;
    # 트랜잭션 내용 다시 작성
    UPDATE tbl_test SET title = 'update_test' WHERE idx = 10;
    SELECT * FROM tbl_test;
    # 트랜잭션 커밋(확정)
    COMMIT;
    # 커밋이후에는 다시 롤백해도 확정 전 상태로 돌아가지지 않음
    
    # AS 키워드의 경우 결과물이라면 어디든 사용 가능
    SELECT * FROM tbl_member;
    SELECT MYTABLE.name, MYTABLE.birthday FROM (SELECT * FROM tbl_member) AS MYTABLE;

Review

  • 데이터베이스 정규화에 관해서 아직도 이해 못함....인터넷을 찾아봤으나 책에서 나온 내용과는 영 다른 얘기여서 선생님께 여쭤보니 한번 더 정리해서 수업 진행해주신다고 하심.
  • SQL 쿼리문 관련해서 좀 더 깔끔하게 짤 수 있도록 노력하는게 좋을 것 같다고 생각함

TO DO

  • JAVA 수업 다 나간거 정리 필요
    예외처리(정리중)/제네릭/컬렉션/람다식/자바IO
  • SQL 프로그래밍 수업 정리한거 Java 다 정리 후 올리기
  • 2/8 ~ 2/9일 자바 정리 완료하기
    2/10 ~ 2/12일 정보처리기사 강의 수강 완료하기
profile
블로그 이전 했습니다. 아래 블로그 아이콘(🏠) 눌러서 놀러오세요

0개의 댓글