デカルト結合(Cartesian join) デカルト積(Cartesian) 直積(cross product) クロス結合(cross join) 無結合(no join) とも呼ばれることがある
![結合(SQL) - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/83b431650aa23d9283e4d66fddaee3f424287943/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9JUU3JUI1JTkwJUU1JTkwJTg4JTI4U1FMJTI5JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmcz05ZGY5NTU4ZWU2OGExM2U2YmRjNGYxNDY5ZjlkZGQ3MA%26mark-x%3D142%26mark-y%3D57%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDB0dGFrYTY2JnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz00OTMyYjNiZDE5NmY4MTAzN2FmNjg2YjY2Mjk5NjJkMw%26blend-x%3D142%26blend-y%3D486%26blend-mode%3Dnormal%26s%3D43a8f1a569999ab6c7a96740a750a516)
SQL | 分かりにくい JOIN / INNER JOIN / OUTER JOIN / LEFT JOIN / RIGHT JOIN の違いSQL初心者 SQLの JOIN って。 用語がたくさんあって分かりにくいですね。 しかし覚えれば良いのは、実は次の三つだけ です。(本当です) JOIN RIGHT JOIN LEFT JOIN これ以外のことは 考えなくて大丈夫 です。 なぜなら、あとはすべて この三つの別名 に過ぎないからです。 分類 INNER JOIN はなんと、1種類だけです。 (驚きましたか?) OUTER JOIN は2種類あります。 そして LEFT と RIGHT に分かれます。 JOIN とは 「内部結合」です。 「結合できなかった行」は返しません。 本当の名前は INNER JOIN といいます。 でもそのことは、今は話さなくても良いでしょう。 JOIN は
はじめに ちょっととっつきにくいけどとっても便利な分析関数について、なるべく分かりやすく説明してみようと思います。Oracleを対象にしていますが、他のDBでもたぶん似たようなものでしょう(無責任)。 まず分析関数とは何をするものか、ですが、一言で言うと集合関数と同じ集計動作をそれぞれの行に制限範囲で実行するものです。ここでいう集合関数とは、MAXやSUMやAVG等、GROUP BYと共に使い行をまとめるて集計計算する関数ですね。分析関数は集合関数と同様の計算をしますが、集合関数と違い行をまとめません。それぞれの行で集計計算し結果を返します。ここが集合関数との大きな違いです。 また、集合関数ではGROUP BYの同じカラム値をもつ全行を一つに集計しますが、分析関数では集計対象となる行の範囲を任意で指定できます。関数に続くOVER句でこの範囲指定を行います。集合関数と分析関数は基本同じ名前な
カーディナリティとは テーブルにカラムがあるとして、カラムに格納されているデータの種類がどのくらいあるのか(カラムの値の種類の絶対値)を、カーディナリティという。 具体例 カーディナリティが低い場合 例えば性別なら、男と女の二種類である。 カラムのデータの種類が、テーブルのレコード数に比べて二種類と少ない。このことを カーディナリティが低い という。 カーディナリティが高い場合 一方顧客番号ならたくさんの種類(番号)が存在することになる。 カラムのデータの種類が、テーブルのレコード数に比べて多い場合、 カーディナリティが高い という。 カーディナリティを踏まえたインデックスの張り方 基本的に、 カーディナリティの高い列に作成する 必要がある。 はじめに、カーディナリティは カラムの値の種類の絶対値と書いたが、先程の例で言うと性別のカーディナリティは2になる。他にも例えば1年間の日付なら1〜
Disclaimer 当記事はNewSQL開発ベンダの技術ブログや各種論文、その他ニュースサイト等の内容を個人的にまとめたものです。 そのため、理解不足等に起因する誤解・誤認を含む可能性があります。更なる理解が必要な方はリファレンスに挙げた各種文献を直接参照下さい。技術的な指摘は可能であれば取り込み修正しますが、迅速な対応はお約束できません。 NewSQLの解説は二部構成 当記事は前編でNewSQLの概要編となる。 全体の目次は下記である。 NewSQLとは何か NewSQLのアーキテクチャ NewSQLとこれまでのデータベースの比較 NewSQLのコンポーネント詳解 1章から3章までの内容を当記事で解説する。 4章はさらに詳細な技術的解説となり、後編の「NewSQLのコンポーネント詳解」で記述している。 こちらも合わせて一読いただきたい。 1. NewSQLとは何か NewSQLとは、海
では、今回もはじめていきましょう! DB(データベース)とは 今回からはSQLへの道題して、DB周りを勉強しSQLを学びましょうという内容でお送りします。DB、DBって当たり前のように会話が出てくるようになるので、業務で会話についていけるように勉強していきましょう。 DB(DataBase:データベース)とは、データの集まりです。以下のようなアイコンで表現されたりします。 データファイルが整理整頓されて格納されていて、DBMS(データベース管理システム)によって管理されています。 DBとDBMSをまとめてデータベースシステムという。 DBMSで管理されるデータとしては、大きく分けて以下の3つで構成されています。 データ・ファイル ログ・ファイル コントロール・ファイル 難しい言葉がたくさん出てきますが、最終的にはデータの集まりだと認識してくれればいいと思います。 データベースは基本的に以下
-- Create syntax for TABLE 'categories' CREATE TABLE `categories` ( `id` int(11) unsigned NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- Create syntax for TABLE 'items' CREATE TABLE `items` ( `id` int(11) unsigned NOT NULL, `category_id` int(11) unsigned NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
BigQuery上でpythonなどを使わずにSQLを用いてそのまま機械学習を回せるBigQueryMLという機能がベータ版で出ました! 公式のチュートリアルを回してみて、かなり手軽に機械学習モデルを回せるのと、pythonよりも簡単にモデルの評価ができるので感動しました。 チュートリアルではBigQueryのサンプルデータを用いていたのですが、この記事ではKaggleのtitanicデータを対象にモデル構築、評価、KaggleへSubmitまでやってみようと思います。 All BigQuery ML Documentation Getting Started with BigQuery ML for Data Analysts 前処理 https://www.kaggle.com/startupsci/titanic-data-science-solutions このカーネル(公開されて
MySQL方言にはMINUSとかEXCEPTが無いので、集合の差分を表現するのが意外と面倒くさい。大抵の場合、相関サブクエリでNOT EXISTSを使ったSQLを書くことになる。 一般従業員を示すemployeeとリーダー職を示すleaderという二種類のテーブルがあるとする。 CREATE TABLE employee ( id INT NOT NULL, PRIMARY KEY(id) ); CREATE TABLE leader ( id INT NOT NULL, PRIMARY KEY(id) ); employeeにはleaderの中身も含まれているとする。さて問題。employeeではあるが、leaderではないidを洗い出したい。 employee集合からleader集合を引くことができれば、該当のid群を洗い出せる。
きっかけ ActiveRecord 最高ですよね。ほとんどの事が SQL を記述しないで実現できることはもちろん、メソッドチェーンを使ってやりたい事を非常に簡潔に記述できます。 また、少し気を付けて実装するだけで、パフォーマンス問題が発生することも少ないです。 ですが、やはり例外はあるもので、どうしても SQL を記述しないといけない場面もあります。その時、どんなに綺麗に Ruby のコードを書いても、全く別の言語である SQL がコードに入ってくると、可読性が落ちます。 それを何とかできないか、と考えました。 ヒアドキュメント まず、考えるのがヒアドキュメントを利用する方法です。 (SQL はあくまで例です。こんな生 SQL を書いては ActiveRecord に失礼ですね。) class User < ActiveRecord::Base class << self def crea
drop table if exists depts; create table depts( dept_id int primary key, dept_name varchar(32) ); insert into depts(dept_id,dept_name) values(1,'営業部'); insert into depts(dept_id,dept_name) values(2,'経理部'); insert into depts(dept_id,dept_name) values(3,'技術部'); insert into depts(dept_id,dept_name) values(4,'法務部'); #employees drop table if exists employees; create table employees( id int primary key
Rails Developers Meetup 2017で発表した「Rails❤️SQL」のサンプルコードです。 スライド スライドはこちらにあります。この記事とあわせてどうぞ。 Rails❤️SQL #railsdm // Speaker Deck 1. ちょっと凝った検索条件 Formモデル target_none?やxxx_selected?は独自のprivateメソッドです(コード例は省略)。 class ProjectSearchForm include ActiveModel::Model attr_accessor :keyword, :project, :customer, :member def result scope = Project.all if keyword.present? conditions = [] if target_none? || project
バッチでデータフレーム型のデータを元に、DB上に仮テーブルを作ったものの object型のカラムのデータの64文字目以降が勝手に消えていた。 エラーも警告も出なかったのに…なので対処法まとめ。 以下のようなデータを元にDBにテーブルを作るとする(nameは70文字) name,age AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDDEEEEEEEEEEFFFFFFFFFFGGGGGGGGGG,20 AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDDEEEEEEEEEEFFFFFFFFFFGGGGGGGGGG,18 AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDDEEEEEEEEEEFFFFFFFFFFGGGGGGGGGG,23 AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDD
trdsqlというコマンドラインツールを作りました。 Goで作ってます。 githubの trdsqlからダウンロード出来ます。 またLinux/Windows/macOSのバイナリもあります。 以下は、古くなっている内容もいくつかあります。 最新版に対応した、より詳細な内容は trdsql 目次 | Noboru Saito's page を参照して下さい。 これは何? 簡単に言えばCSV(TSV含む)やLTSVに対してSQLを実行できるツールです。 同様のツールが q や textql 等いくつかあります。 trdsqlはPostgreSQLドライバとMySQLドライバを含んでいて実際にDBに接続することでSQLite以上の機能を使用できるようにしています。 PostgreSQLやMySQLの構文が使えるだけではなく、CSVファイルと実テーブルでJOINしたり、CSVファイルからテーブ
SELECT pgn.nspname, relname, pg_size_pretty(relpages::bigint * 8 * 1024) AS size, CASE WHEN relkind = 't' THEN (SELECT pgd.relname FROM pg_class pgd WHERE pgd.reltoastrelid = pg.oid) WHEN nspname = 'pg_toast' AND relkind = 'i' THEN (SELECT pgt.relname FROM pg_class pgt WHERE SUBSTRING(pgt.relname FROM 10) = REPLACE(SUBSTRING(pg.relname FROM 10), '_index', '')) ELSE (SELECT pgc.relname FROM pg_clas
当記事では、みんな大好きストアドプロシージャーを Rails で使ってみて、理解を深めてみます API ファースト開発を使った開発を想定して、ストアドプロシージャーを Rails プロジェクトに組み込んでみましょう ストアドプロシージャーとは RDBMS にだいたいついてる、関数を作る機能です 当記事では PostgreSQL を使います API ファースト開発とは アプリケーション側からは RDB へ直接クエリーを発行しません 代わりに機能ごとに用意されたストアドプロシージャーを実行して、返ってきた結果を使います(副作用を持つ関数もあります 開発の初期段階ではテーブル設計を行わず、必要な機能のインプットとアウトプットが定義されたストアドプロシージャーのモックを使ってアプリケーションを開発します ある程度アプリケーションができてきたら、モックになっているストアドプロシージャーから逆算してテ
テーブルの名前をちょっとだけ変えてcreate tableしたりデータをinsert intoすることがしたくなり、なにか良いツールはあるかな?と探していたところ、Cookpadの青木さんが「たべみる」で使われているbricolageを見つけました。 不思議と使ったという情報がみつからず、使用した記録をまとめました。 bricolageの利用例など是非教えてください。 参照サイト 巨大なバッチを分割して構成する 〜SQLバッチフレームワークBricolage〜 GitHub Wiki 試した環境 OS: OSX 10.11.1 Ruby: 2.2.3 PostgreSQL: 9.4.5 MariaDB: 10.0.21 導入 PostgreSQLとMySQL(mariadb)等が必要になるようなので事前に導入しておきます。 本体はgem install bricolageで導入できます。
第二章 ナイーブツリー 「ブログのコメント欄をスレッド形式で見れるようにしたいよね・・・」 目的 階層構造を格納して、クエリを実行する こんなテーブル設計したとして、 comment_id parent_id comment etc
このようなクエリには、2つの前提条件が必要 値が同じ列に格納されていること 例: Bugs.date_reported GROUP BY で正確に日付をグループ化するために、値が比較できること Bugs.date_reported のフォーマットが揃っている必要がある EAV (エンティティ・アトリビュート・バリュー) と呼ばれるアンチパターンを用いていると、上記の前提条件が成立しない問題に遭遇する 日付が行によって違う列に格納されている 例: date_reported, report_date 日付のフォーマットが異なり、簡単には比較できない 5.1 目的: 可変属性をサポートする バグデータベースの例 Issue (問題) を基底型として、Bug と FeatureRequest (機能要望) のオブジェクトを管理する Issue 基底型 - 共通の属性 Date_reported:
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く