概要 †
関連ページ †学習 †
順序 †
SELECT build_id, project_id, string_agg(text, "\n") as logs FROM argo.builds.today WHERE project_id = "container-registry-147718" GROUP BY build_id, project_id HAVING logs LIKE "%quota%" LIMIT 100 勉強方法 †
用語 †
管理用コマンド †
show tables; #テーブルの一覧を出力 CREATE TABLE bookinfo( #テーブルの追加。フィールドを必要な分だけ指定([field, type, attribute]+)。 isbn VARCHAR(20) PRIMARY KEY, title VARCHAR(100), price INTEGER NOT NULL ); SHOW FIELDS FROM bookinfo; #テーブルのフィールドを出力 DROP TABLE bookinfo;
主キー †
CREATE TABLE bookinfo ( isbn VARCHAR(20), title VARCHAR(100), price INTEGER NOT NULL, PRIMARY KEY(isbn,title) ) ; 文法 †分類 †
文 †
# SELECT 列名 FROM テーブル名 WHERE [行抽出用condition]; SELECT * FROM bookinfo WHERE isbn='00003';
# UPDATE テーブル名 SET 列名1='', 列名2='' WHERE [行抽出用condition]; UPDATE bookinfo SET title='Android基礎テキスト',price=2000 WHERE isbn='00005';
# DELETE FROM テーブル名 WHERE [行抽出用condition];
BEGIN; [処理] COMMIT; # もしくはROLL BACK(BEGINの前の状態に戻る)
WITH CTE1 AS ( SELECT item_id, item_name FROM items ), CTE2 AS ( SELECT item_id, item_name FROM items ) 複数のテーブルを使う †
JOIN †
SELECT id_p, customer.id_c, fullname FROM customer LEFT OUTER JOIN purchase ON purchase.id_c = customer.id_c;
別名 †
重複除外 †
IS NULL †
表記 †
GROUP BY †
インデックス †
計算量 †設計 †結局これどうやってシステムと組み合わせるの? 雑多 †select id, name from a order by 2; とすると、1-indexedでスキーマの2番目を取得することができる。なぜかというと一時テーブルを生成する場合とかに名前をつけてられないので SQL safe devide if date_diff concat format unnest SQLのunionとunion allの差は非常に少なくて、要するに重複がないかどうかに尽きる(union allだとmultisetになる) unionは、縦方向に連結する。スキーマは必ず同じじゃないといけない、さもなくばエラー over句は分析関数と呼ばれる。「行をまとめないのに集合関数のように集計する」これが分析関数の基本的動作です。 https://qiita.com/tlokweng/items/fc13dc30cc1aa28231c5 この資料めっちゃよい 集合関数 SELECT COUNT(*) FROM test_orders; COUNT(*) 6 分析関数 SELECT order_id, item, COUNT(*) OVER () FROM test_orders; ORDER_ID ITEM COUNT(*)OVER() 1001 Apple 6 1005 Banana 6 1010 Banana 6 1021 Apple 6 1025 Apple 6 1026 Apple 6 over句には行の同一視というか、集計範囲が指定できる。指定方法にはpartition, window, groupがある。partitionはgroup byと同じで同じ値のものが同一視される。ordered by itemは「itemでソートしたときの先頭行からの累積和」というもとの意味と異なるもの。windowはgroup byのオプション。ORDER BYでは先頭行から現在行までが対象になると説明しましたが、これは実はWINDOW指定を省略したときのデフォルト動作。ROWS BETWEEN 3 preceeding 2 foillowingのようなもので、今の行プラスマイナス何行を範囲に含めるか?という話になる。 RANGEは、行数ではなくORDER BYで指定したカラムの値で範囲指定する。つまり、10「日」前までの総計などのクエリになり、すごい。 partition by ID order by SortKey?はどちらかというとpair<S, T>でのソートをしているという感覚っぽい。https://www.oracle.com/technetwork/jp/articles/otnj-sql-image3-4-323606-ja.html ちなみに、select *とかやるとスキーマがテーブルから読み込まれるが、 「select 'hoge', 3, timestamp '2015-12-4 3:13:43'」はそれそのものが無名表となる。 無名の表は無名な部分が前からf0_, f1_…と連番でつけられていく(無名, data, 無名のようになっち得たらf0_, data, f1_と名付けられる) SELECT 'Sophia Liu' as name, TIMESTAMP '2016-10-18 2:51:45' as finish_time, 'F30-34' as division UNION ALL SELECT 'Lisa Stelzner', TIMESTAMP '2016-10-18 2:54:11', 'F35-39' UNION ALL SELECT 'Nikki Leith', TIMESTAMP '2016-10-18 2:59:01', 'F30-34' UNION ALL SELECT 'Lauren Matthews', TIMESTAMP '2016-10-18 3:01:17', 'F35-39' UNION ALL SELECT 'Desiree Berry', TIMESTAMP '2016-10-18 3:05:42', 'F35-39' UNION ALL SELECT 'Suzy Slane', TIMESTAMP '2016-10-18 3:06:24', 'F35-39' UNION ALL SELECT 'Jen Edwards', TIMESTAMP '2016-10-18 3:06:36', 'F30-34' UNION ALL SELECT 'Meghan Lederer', TIMESTAMP '2016-10-18 3:07:41', 'F30-34' UNION ALL SELECT 'Carly Forte', TIMESTAMP '2016-10-18 3:08:58', 'F25-29' UNION ALL SELECT 'Lauren Reasoner', TIMESTAMP '2016-10-18 3:10:14', 'F30-34'; ちなみに、普通はinsert into test_orders values (1001, 'Apple', 4, date'2018-1-10');とするらしい。 timestamp_diffはタイムスタンプの引き算を行う format_timestamp(string, timestamp)は%Xとかさまざまな表現があるっぽい。 timestamp部分の抽出を行い、以下の%から始まる文字列を利用することができる。 %Y-%m-%d %H:%M:%S %Xで時間以下だけ表示 You can redirect Dremel query output from within a client with the -> operator: SELECT f1 FROM Table -> my_output_file.csv; You can use the ->> operator to append client query output to the end of an existing file: SELECT f2 FROM Table ->> my_output_file.csv; With - as構文は便利で、複数のテーブルを前処理で取得して変数に格納することができる。サブクエリ構文って何に使うの? https://www.postgresql.jp/document/9.4/html/queries-with.html なんかselect, having, where, fromのどこにも入って来る可能性があるらしくかなりヤバそう fromに入っているのはほとんどwith as句と同じ。しかも、with as句はDAGになってさえいれば順序を木にする必要ない なおwith as句を複数のクエリに渡って使いたい場合は、create view句というものが存在 CREATE VIEW s1 AS SELECT age, COUNT(age) as age_count FROM students GROUP BY age; microsoft SQLでは、limit 10の代わりにselect top(names)を使うらしい。どれくらいの出力かとかわからないし使いみち不明だけど。 SQLではlikeで%=0個以上の文字、_で1文字に対応して検索できる |