SQLプログラミング質問スレ
このスレでは
「こういうことをやりたいんだけどSQLでどう書くの?」
「こういうSQLを書いたんだけどうまく動きません><」
といった質問を受け付けています。
質問するときは使用するDBMSを必ず明記してください。
質問テンプレ
・DBMSとバージョン Oracle 、SQL server 2014、MySQL、PostgreSQL、SQLite、ACCESS、DB2など
・テーブルデータ
・欲しい結果
・説明
SQL(Structured Query Language)とは
SQL(Structured Query Language)はリレーショナルデータベースを操作(テーブルやインデックスの作成、テーブルに格納されたデータの操作)するための言語です。
SQLはISOによって標準化されていますが、標準を100%実装したDBMSは存在しません。
また、DBMSによっては標準でない独自の構文が追加されていることもあります。
SQL言語リファレンス一覧
Oracle Database
Microsoft SQL Server
IBM DB2 Database
PostgreSQL
MySQL
SQL 第2版 ゼロからはじめるデータベース操作 (プログラミング学習シリーズ)
翔泳社 著者:ミック
amazon.co.jpのカスタマーレビューを見る
powered by amalink
[4441] Posted by kagahiro at 2016/09/29 13:33:56
オープン | 7 point | Link (1) | Trackback (2) | Comment (5)
オープン | 7 point | Link (1) | Trackback (2) | Comment (5)
キーワード
SQL 質問 DBMS プログラミング
SQLプログラミング質問スレ 関連リンク
PHPでMySQLに接続して、SELECTでデータを取得するサンプルプログラム | |
PHPのプログラムからMySQLに接続し、SELECTでデータを取得する処理のサンプルプログラムです。あらかじめphpMyAdminを使用してMySQLにテータベース「testdb」を作成し、以下のSQLを実行しテーブル「users」を作成、3... |
SQLプログラミング質問スレ トラックバック
トラックバックURL :
Linked from 語句ログ : MySQLのUPDATE文でLIMIT句を使用して上位3件のレコードを更新する at 2016/09/30 11:43:16 | |
MySQLでは、UPDATEでLIMIT句とORDER BYを使用して上位n件のレコードを更新することができます。更新前にORDER BYで指定した方法で並べ替えられ(ASCは昇順、DESCは降順、省略した場合は昇順)、LIMIT句で指定した行数... |
Linked from 語句ログ : MySQLのINSERT ... SELECT文でLIMIT句を使用して上位3件のレコードをテーブルに追加する at 2016/09/30 15:29:40 | |
MySQLでは、INSERT ... SELECTを使用することで1つまたは複数のテーブルからレコードをテーブルに追加できます。また、SELECTでLIMIT句とORDER BYを使用して上位n件のレコードのみテーブルに追加することもできます。... |
SQLプログラミング質問スレへのコメント
1 Posted by 名無しさん at 2016/09/29 23:22:05 | |
よくある質問1 (問) ID | DATE | DATA --+----------+----- 1 | 2007-11-11 | aaa 2 | 2007-11-11 | bbb 1 | 2007-11-10 | ccc 3 | 2007-11-12 | ddd 3 | 2007-11-11 | eee 4 | 2007-11-10 | fff 1 | 2007-11-12 | ggg このようなテーブルから、下記のように 1 | 2007-11-12 | ggg 3 | 2007-11-12 | ddd 2 | 2007-11-11 | bbb 4 | 2007-11-10 | fff 各idに対して最新の1件だけ抽出するSQLの書き方を教えてください。 (答) select A.ID, A.DATE, A.DATA from TableName A inner join (select ID, max(DATE) as MAX_DATE from TableName group by ID ) B on A.ID = B.ID and A.DATE = B.MAX_DATE ; |
2 Posted by 名無しさん at 2016/09/29 23:22:23 | |
よくある質問2 (問) key data ---------------- 1 a 1 a 1 b 1 b 1 a 2 b 2 a 2 a というテーブルから key a b -------------------- 1 3 2 2 2 1 というExcelのピボットの様なデータを取得したいのですが、どういうSQLになりますか? a,bというのは固定なので、仮にcというデータがあっても無視して構いません。 (答) SELECT key, SUM(CASE data WHEN 'a' THEN 1 END) AS a, SUM(CASE data WHEN 'b' THEN 1 END) AS b FROM table GROUP BY key ORDER BY key ; |
3 Posted by 名無しさん at 2016/09/29 23:25:07 | |
よくある質問3 (問) ID HOGE 01 A 01 B 01 C 02 A 03 B HOGEをAもBもCも持っている、ID:01だけ取り出すにはどうすればよかですか (答1) SELECT id FROM TableName WHERE hoge in ('A','B','C') GROUP BY id HAVING count(DISTINCT hoge) = 3 ; (答2) select * from TableName T1 where not exists (select * from (values 'A', 'B', 'C') T2 (HOGE) where not exists (select * from TableName T3 where T1.ID = T3.ID and T2.HOGE = T3.HOGE ) ) ; ※valuesの部分(Table Value Constructor)はDBMSによって文法がかなり違うので注意 |
4 Posted by 名無しさん at 2016/09/29 23:25:29 | |
よくある質問4 (問) 列の数が可変な問合せはどう書きますか? (答) 標準SQLでは書けません。 pivotという機能を搭載したDBMSなら一見書けそうですが実はやっぱり書けません。 Oracle 11g以降でpivot xmlというキーワードを使用すれば一応可変っぽくはなります。 が、素直にプロシージャを書くかアプリケーションで処理したほうが良いでしょう。 SQL Serverのpivot(2005以降) http://msdn.microsoft.com/ja-jp/library/ms177410.aspx Oracleのpivot(11g以降) http://download.oracle.com/docs/cd/E16338_01/server.112/b56299/statements_10002.htm#CHDCEJJE http://www.oracle.com/technetwork/articles/sql/11g-pivot-097235.html |
5 Posted by 名無しさん at 2016/09/29 23:25:57 | |
よくある質問5 (問) 年月(YYYYMM)を指定し、その年月に対応する年月日を取得したい 例:201006を指定したら、以下の結果を得たい 20100601 20100602 ・ ・ ・ 20100630 (答) SQLでは存在しないデータを生成することはできません。 この問いの場合は素直にカレンダーテーブルを用意しましょう。 どうしてもやりたければ以下のような方法もなくはないですが、 再帰問合せの本来の使い方ではありません。 やめておくことを強くお奨めします。 (PostgreSQLのgenerate_series()関数なら辛うじてセーフかもしれませんが 賛否の分かれるところでしょう。) with TEMP (NUM) as ( select 1 from dual union all select NUM + 1 from TEMP where NUM < 31 ) select to_char(to_date('201006', 'YYYYMM') + NUM - 1, 'YYYYMMDD') from TEMP where to_date('201006', 'YYYYMM') + NUM - 1 < add_months(to_date('201006', 'YYYYMM'), 1) ; ※上記はOracleの場合です。(11gR2以降) ※再帰問合せをサポートするDBMSならこれを適当に改変すれば動きますが どのみちお奨めしません。 |
アクセスランキング
今日のアクセスランキング(上位10件)
- 「新世界秩序(The New World Order)」 世界統一政府が発足 (1 PV)
- 内線右翼 〔名詞〕ないせんうよく (1 PV)
- グリーンピース・ジャパン、宅配会社からクジラ肉を無断で持ち出す (1 PV)
- 連絡の取れない「ボブ・ディラン」にノーベル文学賞選考委員が「一体、何様」とブチギレ (1 PV)
- BTOパソコンとは (1 PV)
- 福島第一原発1号機の設計図が流出(福島第一写真集) (1 PV)
- @chs(あっとちゃんねるず) (1 PV)
- データ復旧、ハードディスク(HDD)の無料回収サービスを開始 (1 PV)
- [Perl]メールフォームCGIのサンプルプログラム (1 PV)
- 2chみたいな掲示板「PHP 2chBBS」 (1 PV)
今月のアクセスランキング(上位10件)
- PHP、MySQLで動くオープンソース掲示板ソフト (124 PV)
- 5ちゃんねる(5ch.net、旧2ちゃんねる)掲示板 (56 PV)
- 警視庁がチャゲアスのASKA(宮崎重明)を覚せい剤取締法違反で逮捕、本人は容疑を否認 (53 PV)
- 2ちゃんねる(2ch)検索 掲示板 - スレタイ、過去ログ、全文検索 (53 PV)
- オープン2ちゃんねる (41 PV)
- プリンセスガーデンホテル女性社長の「片岡都美」氏はフジモリ元大統領夫人 (35 PV)
- (;¬д¬) アヤシイ、SOHO・在宅ワーク業者の見分け方 (28 PV)
- [gcc]iconvで文字エンコードを変換するサンプルプログラム (18 PV)
- ログ速(ろぐそく、logsoku) - 過去ログ スレタイ検索 全文検索 (17 PV)
- 「真実を探すブログ」と「カレイドスコープ」が互いに誹謗・中傷と非難の応酬 (16 PV)
アクセス統計
ディレクトリ
- 59bbs.org - 掲示板
- Amalink - 画像付きamazon商品リンク作成ツール
- Mailform Std - オープンソースライセンス(GPLv2)のメールフォームCGI(Perl)
- ThreadPlus - オープンソースライセンスの(GPLv2)掲示板CGI(Perl)
- 2ちゃんねる掲示板検索
関連サイト
- 語句ログ - オープンソースブログソフト59Trackerを利用した情報共有ブログ
- 株価と為替レート(FX)の掲示板
- CommentPP - オープンソース掲示板システム(PHP/MySQL)のダウンロード
- BBS10 - CommentPP を利用したインターネット掲示板