SQL Day 5 CRUD、ウィンドウ関数、トランザクション


復習Day 4


いつ
  • union節を書きますか?
  • union節の条件は?
  • サブクエリを使用する必要がある場合?
  • 派生テーブルをCTEに変換する構文構造を考えてみましょう.
  • csvファイルをMySQLテーブルに変換する方法
  • 1.今日学んだこと


    CRUD(作成、クエリー、変更、削除)について学習しました.最後に,ゲーム時の保存,最後の保存ポイントへの復帰など,より使いやすいウィンドウ関数を学習した.

    2.わかりにくい部分


    1)対象


    自動コミットが有効になっている場合、各文は自動的にコミットされます.無効な場合は、コミット前にrollbackを使用してデータを復元できます.

    a)START TRANSACTION,SAVEPOINT(中間記憶起点の作成)


    自動コミットがアクティブなときにトランザクションを開始します.やった場合は一時的に無効になります.rollbackまたはcommitを実行する前に、すべての文を組み合わせて「保存」(commit)、「リカバリ」(rollback)で処理できます.中間貯蔵の開始点を確立することもできます.(savepoint)中間記憶起点aに戻りたい場合は、ROLLBACK TO SAVEPOINT a」を使用します.そのまま反映しても大丈夫なら、「COMMIT」でTrack Sectionを終了すればいいです.
    select @@autocommit; #기본이 활성화 상태
    set autocommit = 0; #비활성화
    set autocommit = 1; #활성화
    
    start transaction;
    delete from emp_tran1
    	where emp_no >= 1006;
    update emp_tran1
    	set salary = 0
        where salary is null;
        
    rollback; -- 여기까지 다시 자동커밋 활성화 
    
    -- savepoint 활용
    start transaction;
    savepoint a; 
    
    delete from emp_tran1
    	where salary is null;
        
    savepoint b;    
    
    delete from emp_tran1
    	where emp_name = '브래드피트'
        order by emp_no
        limit 1;
     rollback to savepoint b; -- b전까지로 이동 

    3.覚えておきたい部分


    1)差別、


    A)デフォルトフォーマットの作成、変更、削除


    a) CREATE

  • を生成する場合、PK設定には2つの方法があります.
  • のカラムにデータを入力するときにinsert文を使用します.
  • create table 테이블명(
    	컬럼명1 컬럼타입 not null(null 값 허용하지 않는 경우) primary key -- option 1,
        컬럼명2 varchar(30) (기본이 null값 허용이다),
        컬럼명3 date,
        primary key(pk로 쓸 컬럼명) --option2
    );
    
    -- INSERT 문으로 데이터 입력
    -- 단일문 입력
    insert into 테이블명(컬럼명1,컬럼명2) -- 모든 컬럼에 맞춰 입력시 컬러명은 생략가능
    			values(1001, '티모시살라메','2022-04-08', 2200);
    -- 여러문 입력
    insert into 테이블명 values
    			(1007, '엠마 왓슨','2022-04-01', 2200),
                (1008, '레오나르도 디카프리오','2022-04-05', 3300),
                (1009, '호아킨 피닉스','2022-04-05', 4400);
    -- 다른 테이블을 조건에 맞게 입력
    insert into 테이블1 (컬럼1,컬럼2)
    select 컬럼1,컬럼2 -- 다 넣을 거면 위 컬럼명은 생량 select절에는 *
    from 테이블2
    where emp_no in (1001, 1002); -- 조건
    
    -- 변형하여 입력하기
    insert into 테이블1 (컬럼1,컬럼2)
    select emp_no + 10 ,컬럼2  -- 사번을 10씩 더해서 입력한다
    from 테이블2
    where emp_no > 1011; 

    b) ALTER, UPDATE


    select文なしで変更すると、MySQLでエラーが発生します.
    個別の設定で使用できますが、データを保護するためにマッピングします.
  • Edit→Preferences→SQL Editor→セキュリティ更新チェック無効
  • -- PK 설정
    alter table 테이블명
    add constraint primary key (컬럼명);
    -- FK 설정
    alter table 테이블명
    add foreign key(컬럼명1) references 부모 테이블명1(컬럼명3),
    add foreign key(컬러명2) references 부모 테이블명2(컬럼명4);
    
    -- 기존 데이터 수정
    update 테이블1 a
    	set a.컬럼1 = '값1'
        	a.컬럼2 = '값2'
    	where 조건;
        
    -- 기존 데이터 있으면 수정 없으면 새로 만듦
    insert into 테이블1
    	select *
    	from 테이블2 a
    	where 조건
    	on duplicate key update 컬럼1 = a.컬럼2;
        
    -- NULL 값 처리
    update 테이블1 a, 테이블2 b
    	set b.컬럼1 = ifnull(b.컬럼1, 0);

    C) DELETE

    -- 단일 테이블 삭제
    drop table  테이블1;
    
    -- 다중 테이블 삭제
    delete a, b
    	from(using) 테이블1 a, 테이블2 b
    	where a.pk컬럼1 = b.pk컬럼2;

    2)よく使われているようで、


    A)温德乌相关数

    --기본 형태
    SELECT
    	함수 over (PARTITION BY 묶을 컬럼1 ORDER BY 1) 별칭
        #묶을 필요 없다면 파티션없이 순서만 나타내도 된다)
        from 테이블1
    NameDescriptionROW NUMBER()ウィンドウでは、CUME DIST()積算分布がRANK()ウィンドウに戻る順にDENSE RANK()積算順序が戻り(通常のRANKとの違いは共通順序処理が異なる)、共通順序が同じ行とみなされます.例えば、3位が共通である場合、RANKは1、2、3、3、および5位を返し、DENSE RANKは1、2、3、3、および4を返す.PERCENT RANK()パーセントは(上位)LAG(基準列、1(デフォルト)、ない場合は入力値(nullデフォルト)が現在のlowの真上(デフォルト)、1以外のN値を返す場合はN値の上のlow値を返します.LEAD(標準列、1(デフォルト)、ない場合はインポート値(空デフォルト)、現在の最小値の直下(デフォルト)、指定範囲内、最初の最小値はFIRST VALUE()、指定範囲内、最後の最小値はNTH VALUE(列名、n)、N番目の最小値は

    B)ビュー


    a)作成、使用、修正、削除

  • CTEや派生テーブルと似ていますが、違いがあればSELETEセクションから離れていても、1つのオブジェクトのようにいつでもロードできます.
  • create (or replace) view 새 테이블명 as
    	select * from 테이블1 where 조건;
      
    -- 뷰 수정하기
    alter view 뷰로 만든 테이블명 as
    	select * from 테이블1 where 조건;
        
    -- 뷰 삭제하기
    drop view 뷰로 만든 테이블명;