Day 39:)top-n、分析関数、階層型クエリー、ユーザー作成


TOP-Nクエリー

select [rownum,] 컬럼1, 컬럼2
from (select 컬럼1, 컬럼1
      from 테이블
      order by 분석대상컬럼)
where rownum 연산자 n      

-- rownum: 각 행마다 순번 할당(1부터 시작)
-- select(subquery): 바깥 select과 컬럼이 같거나 많아야함
-- order by(subquery): 바깥 쿼리에 위치시 rownum 사용 불가. 순위 기준이 됨
		       asc(오름차순): 하위 n위까지
      		       desc(내림차순): 상위 n위까지
-- where: 결과가 n개만큼 출력됨.
	  ex) rownum <= 5   -- 5위까지 출력
  • は、必要な特定のレベル(昇順および降順で配列可能)
  • にデータを抽出する.
  • 、rownum、
  • を使用
  • は、
  • を重畳することができる.
    -- 가장 최근에 입사한 순서로 5~10번째에 해당하는 사원의 사원번호와 입사일을 조회하시오
    select employee_id, hire_date
    from (select *
          from (select *
                from employees
                order by hire_date desc)
          where rownum <= 10		-- 최근 입사한 1~10번째 사원의 정보를 추출
          order by hire_date asc)		-- 오름차순정렬(늦->빠)
    where rownum <= 6			-- 1~10위 중 10위부터 6위까지 정렬됨
    order by hire_date desc;		-- 최종 내림차순 정렬(빠->늦)

    ぶんせきかんすう

    select 분석함수 over([partition by 컬럼][order by 컬럼])
    from 테이블명
  • テーブルデータを解析し、結果を返す関数
  • 行間の比較演算

    種類


    ランキング関数


    rank

  • 同じ値が同じ順序exを有する)1位、2位、3位、5位
  • .
  • 特定データランキングクエリ
  • select rank('확인할데이터') within group (order by 컬럼명)
    from 테이블
    -- 컬럼명으로 정렬 시, '확인할데이터'의 순위를 반환
    -- 확인할 데이터는 반드시 컬럼명에 속해있어야함
    -- 확인할 데이터:'smith', 컬럼:salary -> 조회불가
  • 総ランキング照会
  • select rank() over (order by 컬럼명) rank
    form 테이블
    -- rank컬럼이 생성되며 순위를 출력함
    グループ別クエリー
  • select rank() over (partition by department_id
    					order by salary)
    from 테이블
    -- 테이블 내의 salary 순위를 department_no별로 나누어 출력함

    dense_rank

  • 同じ値は同じ順序を持つが、順位は連続ex)1、2、3、3、4
  • row_number

  • 同一値に対して一意の順位を付与し、重複順位なし
  • 値が重複している場合、rowidは小さい値より優先されます.
  • rowidは変更可能なので、ユニークな列を追加する必要があります.
    ランキングは
  • のままでなければなりません

    集約関数

  • sum, min, max, avg, count
  • 次のリンクの複数行関数
  • を参照してください.
    https://velog.io/@yoonee1126/Day34-%EB%82%B4%EC%9E%A5%ED%95%A8%EC%88%98
  • 階層型クエリー

    select [level],		-- 최상위로부터 몇번째 행인지 숫자로 나타냄
    			-- 최상위 1부터 순서대로 2,3을 반환
    	컬럼1, 컬럼2
    from 테이블
    where [조건식]
    start with 조건식	-- 계층검색 시작지점(최상위계층)을 지정함
    connect by prior 조건식	-- 연결조건 지정
    			-- subquery 사용불가
                
  • 上下垂直関係ツリー型
  • より頻繁に使用する
  • 子->親
  • connect by prior
  • 相互接続BY PRIOR子列=親列->親から子まで
  • 相互接続BY PROIOR親=子列->子から親(Bottom Up)
  • -- 100번 직원의 하위에 위치하는 직원 조회
    select leve, employee_id, first_name
    from employees
    start with employee_id = 100
    connect by prior employee_id = manager_id
    and level <= 2;
    -- 205번 직원의 상위에 위치하고 있는 매니저 조회
    select level, employee_id, first_name
    from employees
    start with employee_id = 205
    connect by prior manager_id = employee_id;

    ユーザーと権限管理

  • 権限:特定のsqlを実行する権利
  • システム権限:dbアクセス性.
  • 、管理者のみ
  • オブジェクト権限:dbオブジェクトコンテンツを操作する権限
  • ボリューム:ユーザーの権限のグループ化と名前付け
  • connectロール:oracleに接続されたセッション権限を作成する
  • リソース:テーブルの作成、クエリー権限
  • dbaロール:すべてのシステム認可roll
  • 新規ユーザーの作成


    接続
  • 管理者(システム)アカウント
  • alter session set"_oracle_script" = true;	-- 사용자 생성방식을 오라클 12 이전으로 설정
    create user 유저이름 identified by "비밀번호"
    grant 부여할 권한
  • 付与可能な権限リスト
  • **참고: 모든 권한주기
    grant connect, dba, resource to 계정명;

    他のユーザdbへのアクセス

  • 承認アカウント
  • grant select
    on 테이블명
    to 부여받을 계정
  • 承認アカウント
  • select
    form 부여받은계정.테이블명

    synonym


    dbオブジェクトの別名を定義し、
  • 同義語
  • を使用します.
  • sqlを簡略化
    定義
  • create synonym 별칭
    for 계정.테이블명
  • を使用
    select *
    from 별칭