TIL(Web)-2020.12.10(SQL SELECT)


今日はSELECTの文法を勉強しました.

Today I Learned

  • DML SELECT
  • SELECT

  • 算術クエリー
  • デジタル演算+
  • select title, hit+1 as hit from notice;
  • 列名hit+1、as名
  • titleに+1を加えると?エラー男(無効な数値)
  • 文字列演算|
  • select '3' || 10 from dual; -> 結果310
  • select '3' + 10 from dual; -> 結果13
  • 比較演算子
  • =, !=, ^=, <>, >, <, >=, <=, IS NULL, IS NOT NULL
  • !=, ^=, <>同じ演算子
  • 比較演算子はwhereセクションで使用されます.
  • NOT, AND, OR, BETWEEN, IN
  • 連続値
  • select * from notice where hit=0 or hit=1 or hit=2;
  • select * from notice where 0 <= hit and hit <= 2;
  • select * from notice where hit between 0 and 2;
  • 不連続値
  • select 8 from notice where hit in (0,2,7)
  • in<>not in:集約関係
  • モードで表示
  • like, %, _
  • select*from member,そのうちname like「朴%」
    すべての朴姓の人を調べます

  • %:文字数を限定しない
  • :限定文字数
  • より詳細なモードクエリー方法
  • 正規表現
  • REGEXP LIKE(カラム名、正規表現)関数
  • を使用
    クエリ
  • 有限部分(特定部分)
    制限
  • ROWNUM
  • select rownum, member.* from member where rownum between 1 and 5;
  • rownumを作成し、
  • を順番に並べ替えます.
  • の実行順序について
  • from > where > select
  • whereセクション生成rownum
  • rownumは1から開始する必要があります
  • select rownum, member.* from member where rownum between 6 and 10; (x)
  • 1から生成を開始し、whereセクションの条件をチェックして条件を満たしてから次の番号を生成します.
  • 6から10の間でrownumを遊びたいなら?
  • rownumのすべての値を含むselect文をサブクエリとして作成し、結果テーブルに範囲を指定して、
  • ページを分割できるようにします.
  • select from (select rownum as num,member. from member) where num between 6 and 10;
  • 重複除外
  • DISTINCT
    同じ値
  • が複数ある場合は、1つの値
  • のみが出力.
  • 内蔵関数
  • length()
  • substr()
  • など、さまざまな組み込み関数が存在します.
  • SELECT文

  • 記入順序:select>from>where>group by>having>order by
  • 実行順序:from>where>group by>have>select>order by
  • 統計
  • 集約関数:SUM、MIN、MAX、COUNT、AVG
  • count(プロパティ):列の値の数.Null値は数えられません.
  • では、すべての統計関数が属性によって異なる結果を生成することに注意してください.
  • whereセクションでは、集約関数(>haveセクションで使用)
  • はサポートされていません.
  • グループ別統計
  • group by:~星
  • ex)購入額をメンバー別に問い合わせることができる
  • 作成者別
  • の投稿数
  • select writer_id, count(id) from notice group by writer_id;
  • HAVING
    機能は
  • where節と同じですが、統計後に統計関数を使用して条件を追加する場合に使用します.
  • 作成者別投稿数
  • 、2つ以上の投稿のみを表示
  • select writer_id, count(id) from notice group by writer_id having count(id) >=2;
  • ORDER BY
  • ASC:昇順(デフォルト)
  • DESC:降順
  • 投稿数
  • を作成者別に表示し、投稿数の降順(昇順)でソート
  • select writer_id, count(id) from notice group by writer_id having count(id)>=2 order by count(id) desc(asc);
  • サブクエリ

  • 使用箇所:文の順序を変更する必要がある場合.
  • 最新の登録順でソートします.上位10名が必要な場合は?
  • は、最初に最新の登録順にソートされた結果を必要とする.
  • しかし、ソートはorder byによって自動的に実行され、これは実行順序の最後のステップである.
  • サブクエリを使用してこの問題を解決する
  • が正しい
  • select rownum, notice.* from (select * all from notice order by regdate desc) where rownum between 1 and 10;
  • では、次のページの11番から20番を手に入れたいなら?
  • rownumは1からしか番号が付けられません.
  • すなわち、rownumが11から20の間(現状では)
  • であることは不可能である.
  • 解決
  • select num, notice.* from (select rownum num,M.* from (select * from notice order by regdate desc) N) M where num between 11 and 20;
  • 解説:まず、登録日順=M>>で並べ替えられたMを順番番号(rownum)とし、番号から番号を選択するだけでよい.
  • 、すなわち、サブクエリは、取得するために先に実行される値または値のセット、およびレコードのセットのために使用される.
  • 比較する値はいくつありますか?
  • ALL、ANYを使用します.
  • ALL(SUBQUERY):サブクエリの結果値がすべての値より大きい場合.
  • ANY(SUBQUERY):結果値のいずれよりも~すればよい.
  • 余談:練習問題

  • 投稿を書いていない会員の名前と連絡先
  • を印刷します.
  • 正解
    select name, phone from member where name not in (select writer_id from notice group by writer_id having count(id) != 0);
  • 
    조금 더 많은 쿼리 문제를 풀어보고 연습할 필요가 있겠습니다.