概要 †
目次 †関連ページ †学習 †
順序 †
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 If replication lag is high but steady, you can delete the failover replica and recreate it. However, if the write load continues, and the replication lag continues to increase, you must take action レプリカの同期が遅れている場合、別にレプリカを消して作り直せば、データベースにクエリを適用するのではなく、マスターをそのままコピーできるからそれでも良い 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文字に対応して検索できる レプリケーション †遅延への対処 †
|