アカデミー33日目-Oracle


2021.05.13


ex03_select.sql


せんたくぶん

  • DML, DQL
  • データベースから必要なデータを取得するコマンド(読み込み)
  • select構文

    -- [] : 생략가능
    
    [WITH <Sub Query>]    -- with절
    SELECT column_list    -- seles절
    FROM table_name       --  ...
    [WHERE search_condition]
    [GROUP BY group_by_expression]
    [HAVING serach_condition]
    [ORDER BY order_expression [ASC|DESC]];
    ★★★★selectを構成するすべてのお寺に実行順があります.(変わらず)->必ず暗記せよ!!!!★ ★ ★ ★

    実行順序

  • FROM節
  • SELECT節
  • -- SELECT 컬럼리스트 : 데이터를 가져올 컬럼을 지정한다.(지정된 컬럼(열)을 가져오는 역할)
    SELECT column_list
    
    -- FROM 테이블명 : 데이터를 가져올 테이블을 지정한다.(데이터 소스를 지정)
    FROM table_name;
    -- hr -> 미리 샘플 (테이블+데이터) 제공
    
    -- 현재 계정이 소유하고 있는 테이블 목록 가져오기
    select * from tabs;
    
    
    -- 다양한 스타일로 코드 작성 가능
    select * from employees;
    
    select *
    from employees;
    
    select * 
        from employees;
    
    select 
    * 
    from 
    employees;
    
    
    -- select문 작성 -> 실행 -> 서버전달 -> 처리 -> 결과값 반환 -> 클라이언트 반환 -> 결과값 -> ResultSet
    
    -- full select 
    select *         -- 2. 어떤 컬럼을 가져올거냐? -> *(wildcard) 모든 컬럼
    from employees;  -- 1. employees 테이블로부터 데이터를 가져오겠다.
    
    
    -- 원하는 컬럼만 가져오기
    select first_name
    from employees;
    
    select first_name, last_name, salary, department_id, email
    from employees;
    
    
    -- ORA-00942: table or view does not exist
    -- 테이블명에 오타가 났을 때 에러
    select *
    from employee; 
    
    -- ORA-00936: missing expression
    -- 컬럼명(식별자)에 오타가 났을 때 에러
    select firstname *
    from employees;
  • すべての列をインポート
  • 必要なカラムのみをインポート
  • select実行時に表示される結果:結果テーブル、結果セット

  • 構造の検証

    select *
    from tblCountry;
    
    -- 우리는 tblCountry를 처음 봤음 -> tblCountry 구조 모름.. 모르면 컬럼을 다룰 수 없음 -> 구조 확인!!!! -> 구조란? : 컬럼 구성 
    -- 구조 확인하는 방법 1. 접속 - hr - 테이블목록 - TBLCOUNTRY클릭
    
    desc tblCountry; -- 2. 표준 SQL(X), SQL(X), Sql*plus(전용 명령어), SQL Developer(Sqlplus 명령어 지원)
  • cmdウィンドウ-desc tbl Country;
  • -- 동일한 컬럼을 여러번 반복해도 된다.
    select name, name, name, name
    from tblcountry;
    
    -- 동일한 컬럼을 가져 오는 경우 -> 가공을 한다.
    -- || : 문자열 더하기 연산자(concat연산자)
    select name, '나라명: ' || name
    from tblcountry;
    select *
    from tblCountry; -- A (모든 컬럼 가져오기 -> 어떤 컬럼이 들어있는지 기억을 못함.)
    
    select name, capital, population, continent, area
    from tblCountry; -- B (권장 -> 어떤 컬럼이 들어있는지 확인하기 좋음.) ★
    
    -- A와 B의 결과는 동일 > B권장 > 가독성 차이
    
    
    desc tblcountry;
    
    -- 원본 테이블의 컬럼 순서와 select절의 순서는 전혀 무관하다. -> 보통은 지키는 경우가 많다. > 가독성
    select capital, population, continent, area, name 
    from tblCountry;

    ex04_operator.sql


    演算子、Operator

  • 算術演算子
  • +, -, *,/
  • %(なし)->関数として提供(mod()
  • 文字列演算子
  • concat
  • 「文字列」+「文字列」(X)
  • 「文字列」|「文字列」(O)
  • 比較演算子
  • 〉, >=, 〈, <=
  • = ( == X ), <> ( != X )
  • 戻り論理値>boolean戻り>ANSI SQL論理タイプなし>表現できません.>結果セットを入れられませんでした.
  • 条件のみ使用
  • さんじゅつ
    -- 산술 연산자 + 문자열 연산자 + 상수 컬럼
    -- 수정x, 원본을 건드린 것이 아님..
    select first, last, last || first, weight + 2, 10 + 1, '자바'
    from tblcomedian;
    
    select 10, '자바' -- 상수 컬럼
    from tblcomedian;
    
    
    select last || first from tblcomedian;
    -- select last + first from tblcomedian; -- 에러 ORA-01722: invalid number (문자열 + 연산자 사용 불가)
    select concat(first, last) from tblcomedian;  -- concat 연산자 (||랑 같은 연산자)
    
    
    select *
    from tblcomedian;
    
    -- 비교 연산의 결과는 논리형인데.. 논리형이 없어서 결과셋에 담지를 못한다.(표현을 못한다.)
    --  -> 비교 연산은 컬럼 리스트에 작성할 수 없다.(select절에 넣지 말 것!)
    -- select first, weight > 65 from tblcomedian; -- 에러 
    select first, weight from tblcomedian where weight > 65; -- 몸무게 65키로 이상인 항목만 가져온다.
    別名(Alias)
    -- (null) : 비어있는 셀 
    -- 컬럼명 -> 식별자 -> weight or weight-5 (컬럼명(식별자)에 - 사용 불가!!)
    select name, weight, weight - 5 from tblMen;
    
    
    -- 컬럼의 별칭(Alias) 만들기
    -- 1. 중복된 컬럼명을 구분하기 위해서
    -- 2. 가공된 컬럼명을 유효하기 위해서 
    -- 3. 사용 불가능한 문자를 사용할 수 있게 > 사용하지 말 것
    -- 4. 예약어를 사용할 수 있게.. > 절대 사용하지 말 것!!
    -- 별칭 : 영어 + 숫자 + _ -> 조합으로만 쓸 것!
    
    select name, name as nick from tblMen;
    select last || first as name, weight - 5 as weight from tblComedian;
    select name as 사용자이름 from tblMen;
    select name as 사용자 이름 from tblMen;    -- 식별자에 공백을 넣을 수 없다.
    select name as "사용자 이름" from tblMen;  -- 식별자에 공백을 넣고 싶으면 ""으로 묶으면 가능.. -> 쓰지 말기
    select name as "select" from tblMen;       -- 식별자를 예약어 사용하지 말 것
    このクリップでsqlを実行
  • window - show view - other
  • Data Management - Data Source Explorer
  • Database Connection-マウス右クリック-new






  • C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib\ojdbc6.jar


  • このクリップで実行されるショートカットキー:alt+x

  • ex05_where.sql


    せんたくぶん

    [WITH <Sub Query>]
    SELECT column_list
    FROM table_name
    [WHERE search_condition]
    [GROUP BY group_by_expression]
    [HAVING serach_condition]
    [ORDER BY order_expression [ASC|DESC]];
    
    -----------------------------------------------------------
    
    SELECT column_list
    FROM table_name
    WHERE search_condition;
    ★★★★★selectを構成するすべてのお寺に実行順があります.(不変)->無条件暗記(理解)★★★★★
  • FROM節
  • WHERE節
  • SELECT節
  • SELECT列リスト
    FROMテーブル名
    WHERE検索条件;

    WHERE節

  • インポートするレコード(行)の条件を指定します.
  • 条件を満たす行は結果セットに含まれ、条件を満たさない行は結果セットに含まれません.
  • スーツケースに掛けます.
  • 主に比較演算子または論理演算子構成条件を使用します.
  • -- select절과 from절만 있는 코드 : 컬럼(열) 선택 가능 + 레코드(행) 선택 불가능 -> 항상 14개의 레코드(행) 반환
    select *
    from tblCountry
    where capital = '서울'; -- 조건절(비교문, 논리문) 원하는 행을 걸러낸다. 
    
    
    select *
    from tblCountry
    where area > 20;
    
    
    select * from tblInsa where city = '서울'; -- 20/60
    select * from tblInsa where buseo = '영업부'; -- 16/60
    select * from tblInsa where basicpay >= 2500000; -- 6/20
    select name, buseo, jikwi, basicpay from tblInsa where basicpay >= 2500000; -- 원하는 행 + 열
    
    select * from tblInsa
        where city = '서울'; -- 동등비교연산자
    
    select * from tblInsa
        where city <> '서울'; 

    論理演算子

    -- 논리 연산자
    -- and(자바에선 &&), or(자바에선 ||), not(자바에선 !)
    
    select * from tblInsa
        where city = '서울' and buseo = '영업부'; -- 둘 다 만족하는 것
    
    select * from tblInsa
        where city = '서울' or buseo = '영업부'; -- 둘 중에 하나 또는 둘 다 만족하는 것
    
    -- 서울이 아닌 사람
    select * from tblInsa
        -- where city <> '서울';
        where not (city = '서울'); -- 이런식 잘 사용 안함.
    
    
    -- tblComedian
    -- 몸무게가 60kg  이상이고, 키가 170cm 미만인 사람을 가져오시오.
    select * from tblComedian where weight >= 60 and height < 170;
    
    -- tblInsa
    -- 급여(basicpay)과 수당(sudang)을 모두 합한 금액이 250만원 이상인 직원을 가져오시오.
    select * from tblInsa where (basicpay + sudang) > 2500000;

    間廟

  • where節使用>を条件として
  • 範囲条件として使用
  • 最大値と最大値の間のカラム名
  • 演算子よりも可読性が高い(パフォーマンスが低い)
  • 最高値、最高値->含む(含む)
  • -- 몸무게가 60kg~70kg 사이에 있는 사람만
    select last || first as name, weight from tblComedian;
    
    select last || first as name, weight from tblComedian 
        where weight >= 60 and weight <= 70; -- 3명
        
    select last || first as name, weight from tblComedian     
        where weight between 64 and 66; -- 3명 (가독성이 높음)
    -- 비교 연산에 사용되는 자료형
    -- 1. 숫자형(number)
    desc tblInsa;
    
    select name, sudang from tblInsa where sudang > 150000;
    select name, sudang from tblInsa where sudang >= 150000 and sudang <= 160000;
    select name, sudang from tblInsa where sudang between 150000 and 160000;
    
    
    -- 2. 문자형
    -- - 자바 : char(O), string(X)
    -- - c > 'a'        "홍길동" > "아무개"
    select name from tblInsa where name > '박';
    select first_name from employees where first_name > 'M';
    select first_name from employees where first_name >= 'M' and first_name <= 'O';
    select first_name from employees where first_name between 'M' and 'O';
    
    
    -- 3. 날짜/시간형
    -- - 자바 : Calendar > Calendar -> tick > tick
    desc tblInsa;
    
    select ibsadate from tblInsa where ibsadate > '2010-01-01';
    select ibsadate from tblInsa where ibsadate <= '2010-01-01';
    select ibsadate from tblInsa where ibsadate >= '2010-01-01' and ibsadate <= '2010-12-31';
    select ibsadate from tblInsa where ibsadate between '2010-01-01' and '2010-12-31';

    in

  • where節使用->条件として
  • 列挙条件->いずれかが一致すれば
  • を満たす
  • column in(値、値、値、...値)
  • 可読性の向上
  • -- tblInsa. 홍보부 + 개발부 + 총무부
    select * from tblInsa;
    select * from tblInsa where buseo = '홍보부';
    select * from tblInsa where buseo = '홍보부' or buseo = '개발부' or buseo = '총무부'; -- 27명
    select * from tblInsa where buseo in ('홍보부', '개발부', '총무부'); -- 27명 (가독성 높음)
    
    
    -- tblInsa. (부장,과장) + (서울,인천) + 급여(250~260만원)
    select * from tblInsa 
        where jikwi in ('부장', '과장') and city in ('서울', '인천')
                and basicpay between 2500000 and 2600000;

    like

  • where節使用->条件として
  • 比較モード(正規表現に類似)
  • 文字型に対する操作(数値型、日付型は適用されません)
  • カラム名に似た「パターン文字列」
  • アレイ文字列コンポーネント

  • :任意の文字->正規表現".同じ機能
  • %:任意のN文字(N:0から無限大)->正規表現「.*」、「.{0,}」などの機能
  • select name from tblInsa;
    select name from tblInsa where name like '홍길동';
    select name from tblInsa where name = '홍길동';
    select name from tblInsa where name like '홍__'; -- 홍OO
    select name from tblInsa where name like '__신'; -- OO신
    select name from tblInsa where name like '_길_'; -- O길O
    select name from tblInsa where name like '김___'; -- 김OOO
    select name from tblInsa where name like '김_'; -- 김O
    
    
    select first_name from employees;
    select first_name from employees where first_name like 'E____'; -- Ellen, Eleni
    select first_name from employees where first_name like 'E%'; -- E~ 글자 갯수와 상관없이 E로 시작하는 모든 글자 
    select first_name from employees where first_name like '%e';
    select first_name from employees where first_name like '%e%'; -- 이름에 e가 들어간 사람
    select first_name from employees where first_name like '%ea%'; -- 이름에 ea가 들어간 사람
    select first_name from employees where first_name like '%e%a%';

    RDBMSのnull

  • Javaのnull概念に類似
  • column値が空(セル)
  • null定数
  • ほとんどの言語ではnullを被演算子として使用できません.
  • 空の条件

  • where句->条件
  • 列名null
  • select * from tblCountry;
    
    -- 인구수가 기재되지 않은 나라?
    -- select * from tblCountry where population = null; -- X
    select * from tblCountry where population is null; -- O
    
    -- 인구수가 기재된 나라?
    -- select * from tblCountry where population <> null; -- X
    select * from tblCountry where not population is null; -- O
    select * from tblCountry where population is not null; -- 더 많이 사용
    
    -- 할 일
    select * from tblTodo;
    
    -- 아직 실행하지 못한 일은?
    select * from tblTodo where completedate is null;
    
    -- 실행을 완료한 일은?
    select * from tblTodo where completedate is not null;
    
    
    -- 도서관 -> 도서 대여 테이블(대여 날짜, 반납 날짜)
    -- 아직 반납이 안된 대여 기록?
    select * from 도서대여 where 반납날짜 is null;
    
    -- 반납이 완료된 대여 기록?
    select * from 도서대여 where 반납날짜 is not null;
    
    -- 여자친구 없는 애들
    select * from tblMen where couple is null;
    -- 있는 애들
    select * from tblMen where couple is not null;
    
    -- 남자친구 없는 애들
    select * from tblWomen where couple is null;
    -- 있는 애들
    select * from tblWomen where couple is not null;

    ex06_column.sql


    distinct

  • カラムリスト用
  • 重複除外
  • distinct列名
  • select * from tblCountry;
    
    -- tblCountry에는 어떤 대륙이 있나요? -> 분류 질문
    select continent from tblCountry;
    select distinct continent from tblCountry;
    
    select * from tblInsa;
    
    -- tblInsa. 어떤 부서가 있나요?
    select buseo from tblInsa;
    select distinct buseo from tblInsa;
    
    -- 중복값이 단 1개도 없어도 동작된다. > 중복값이 없는 컬럼에 distinct를 적용하는건 의미가 없다.
    select distinct name from tblInsa; 
    
    -- 행으로 중복 체크를 한다.
    -- 개발부	황진이
    -- 개발부	채정희
    select buseo, name from tblInsa;
    select distinct buseo, name from tblInsa; -- 60명
    
    -- 총무부	사원
    -- 총무부	사원
    -- 총무부	사원
    select buseo, jikwi from tblInsa; -- 60명
    select distinct buseo, jikwi from tblInsa; --23

    表記

  • データを格納するテーブル>oracle>x
  • をマージ
  • 画面にデータを出力するテーブル>表示されるテーブル>セルのマージ
  • をサポート