質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

4811閲覧

paiza.ioを使ったMySQL学習について3点の質問です。初心者

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2016/12/24 13:11

mysqlについて質問させていただきます。

paiza.ioを使ってMySQLの学習を行っているのですが、以下の3点の方法を教えてください。
①下の方の出力欄の最上部にカラム名を出したいのですが、どのようにSQLソースを書けばよろしいのでしょうか?
②出力欄のズレ(3行目、8、9行目)を無くしたい、揃えたい
③EndDateに値が存在しない場合、NULLではなく空白で表示させたい
毎回質問ばかりで恐縮ですが、ぜひ宜しくお願いします。

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

①下の方の出力欄の最上部にカラム名を出したいのですが、どのようにSQLソースを書けばよろしいのでしょうか?

に関しては、paiza.ioでmysql表示オプションに-N(--skip-column-names)と-s(tab)が指定された状態に見受けられます。(内部での解除方法は不明)

②出力欄のズレ(3行目、8、9行目)を無くしたい、揃えたい

③EndDateに値が存在しない場合、NULLではなく空白で表示させたい

につきましては、お答えではありませんが①の代替ですが入れてみました。

sql

1select GROUP_CONCAT(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='BelongTo'; 2select BelongID, StartDate, RPAD(IFNULL(EndDate,''),10,' '), DepartmentID, EmployeeID 3 from BelongTo;

投稿2016/12/25 03:04

編集2016/12/25 03:18
A.Ichi

総合スコア4070

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

①、②は「paiza.io」の制御のお話で当方専門外なので、他の詳しい方に譲ります。
(実際、ローカルにMySQLをインストールし、A5:SQLなどのツールでSELECT文を発行すると意識せずとも初期設定でカラム名は表示されますし)

③についてのみ回答します。

質問者様はNULLの場合は、
「空白文字」を出力したいということをおっしゃってると思いますが、
以下の2点の工夫が必要です。
(MySQLだったら2点目は考慮せずに動くかもしれませんが・・・)

1.NULLの場合には代替値を返却できる関数を利用する
2.DATE型自体には空白文字はないので型を文字列型に統一する意味でキャストを行う

今回のようなカラムごとに固有の処理を行う場合は、
SELECT * FROM テーブル名のような記載はできません。
前提としてカラム名を直接指定するSELECT文に置き換えましょう。

では先ず1.ですが、
MySQLにも標準SQL関数の1つである、COALESCE関数が実装されています。
この関数は最初にNULLとならない値を返すという機能なので、
下記のようにするとカラム1がNULLの場合に「hoge」という文字が返却されるようになります。
COALESCE(カラム1, 'hoge')

似たような機能として、
IFNULL関数というものがMySQLには存在しますが、
ベンダ独自実装で他のDBMSには存在しないため、
COALESCEの利用をお勧めします。

次に2.についてですが、
COALESCE関数では一般的には出力する型を統一しなければならないというルールがあるので、
そのルールに則ってやる必要があります。
つまる所、日付型を文字列型にキャストしましょうというお話です。

以上を踏まえて、
出力されている日付フォーマットを変更せずに、でもNULLの場合は空白文字を出力したい場合は以下のようになります。

SQL

1-- EndDateのみを要望通り出力するクエリ 2SELECT 3 -- AS以降はカラム別名を指定。 4 -- 今回はこうしないとカラム名が「COALESCE(b.EndDate, '')」みたいになる 5 COALESCE(DATE_FORMAT(b.EndDate, '%Y-%m-%d'), '') AS EndDate 6FROM 7 BelongTo b 8;

ご参考までに。

投稿2016/12/24 16:32

編集2016/12/24 16:46
Panzer_vor

総合スコア1636

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問