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

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

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

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

SQL

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

Q&A

解決済

5回答

26191閲覧

長いSQL文で改行やインデントをするときは

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

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

SQL

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

1グッド

0クリップ

投稿2019/01/11 07:32

MySQLを用いてSQLの勉強をしています。

where句、order by句、group by句、having句などの条件構文を学習し、現在テーブル結合について学習しています。

join句が加わったことにより、構文がかなり複雑になってきたように感じています。
可読性の向上のため改行や、インデントを用いて構文を記述しているのですが(学習している教材が進めているため)、イマイチ読みやすい、自分で記述しても整理し易いとは思えません。
自分がSQL構文に慣れていないのもありますが、自分で記述するだけなら、1行の方が記述しやすいと感じています。

皆様のおすすめする記述方法、規則などを教えてください。
一般的にどう書くのが読みやすいとされているか、また会社等のチームで扱うときはどういうルールがあるのか?

初歩的な質問でスミマセン。。よろしくお願いしますm(__)m

退会済みユーザー👍を押しています

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

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

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

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

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

guest

回答5

0

GUIツールであれば大抵整形機能がついていますので、それを使います。
または整形してくれるWebサービスがあるのでそれを使います。
下記とか、それなりに色々な設定ができるので重宝しますよ。

投稿2019/01/11 07:34

編集2019/01/12 11:02
m.ts10806

総合スコア80861

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

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

退会済みユーザー

退会済みユーザー

2019/01/11 07:42

少し試してみました。句のつながりが点線で示されていたり、色がついて見やすくなったりでかなり重宝しそうです! ありがとうございます。
m.ts10806

2019/01/11 07:50

MySQLであればMySQL Workbenchというソフトウェアもあるのでそちらもお試しください。
退会済みユーザー

退会済みユーザー

2019/01/11 08:02

Workbench少し気になっていたのでインストールしてみます。ありがとうございます。
sazi

2019/01/12 09:39

そのリンク移転しているようですよ。 フォーマッターは、移植の際の一時整形では使ったりしますが、最終的には手動になってしまうんですよね。 一番の理由はselectやfromで改行されるものが多い事。 1行で書きたい時とルールが違ってしまうので統一感が。
m.ts10806

2019/01/12 11:13

ご指摘ありがとうございます。移転先にリンク修正しました。 私も昔はよく使ってましたが今は自分で組むときはあまり使わないですね。おおよそ見せ方は決まってきてるし。 保守とかでレガシーシステムの改修やるときは大活躍してます。
Kaiser

2019/01/12 12:11

フォーマッターという発想は無かったので、大変勉強になりました。 ありがとうございました。
sazi

2019/01/12 14:47

フォーマッターを利用して色々なパターンを試すというのも慣れという意味ではありですね。
guest

0

参考情報

  • atomエディタにSQLフォーマッターを導入する

https://co.bsnws.net/article/324

  • A5:SQL Mk-2のちょっとイイところ(SQL整形編)

https://a5m2.mmatsubara.com/wp/?p=3218

  • Visual Studio Code > Other > SQL Formatter

https://marketplace.visualstudio.com/items?itemName=cymonk.sql-formatter

  • SQLコーディング規約と標準SQLについて考える

http://onefact.jp/wp/2018/07/29/sqlcoding/

投稿2019/01/12 07:56

katoy

総合スコア22324

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

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

退会済みユーザー

退会済みユーザー

2019/01/14 23:35

自動成型で整えてくれる機能はとても参考になりました。 ツールで成形される方を基に分かりやすい書き方を試行錯誤していきます。 ありがとうございます。
guest

0

ベストアンサー

ごめんなさい。1行で見やすいと思ったことは無いです。
1行で長いクエリを9年間のSE生活で見たこともない気がします。。。

極めて単純な、下記のようなクエリでしたら一行です。

SQL

1SELECT * FROM XXXXX WHERE xxx = XXX ORDER BY XXXX

JOINとか含まれてくると、こんな感じで、1センテンス、1行を意識しています。

SQL

1SELECT XXX,XXXX,BBB           -- 表示する項目 2FROM XXXXX AS X -- 元になるテーブル 3INNER JOIN YYYYY AS Y ON X.XXX = Y.XXX -- 結合 & 結合条件(2項目以上使う時は改行) 4            AND X.BBB = Y.BBB 5INNER JOIN AAAAA AS A ON A.XXX = Y.XXX 6WHERE X.XXX = XXX -- 検索条件① 7 AND X.YYY = YYY          -- 検索条件② 8ORDER BY XXXX -- ソート条件

理由です。
人間の目は、横への移動に慣れていないそうです。
縦への移動の方がストレスは一番少ないそうです。
ちなみに、斜めは最悪。
人間工学的にも、横長よりも縦長の方がよろしいかと思います。

また、SQLエラー発生時にX行目でエラーと出力されることが多いです。
つまり、1行だとどこでエラーになったのかがわかりにくいです。

これらの考え方は、SQLだけではなく、コードを書く時にも活用できます。

参考にしていただければと思います。

投稿2019/01/12 05:32

Kaiser

総合スコア295

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

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

m.ts10806

2019/01/12 06:13

現場でルールが定められてる場合もありますしね。 第一は要件を満たすコードであること、であとは現場ルールやエンジニアの好みとか、でもコメントとか含めてちゃんと読みやすく書く人の方がいいのは間違いないですね
sazi

2019/01/12 12:49

> 人間の目は、横への移動に慣れていないそうです。 それはどうでしょう。 グーテンベルク・ダイヤグラム、Zの法則、Fの法則などがコンテンツ作成に生かされてますし、規則があればそれに慣れるものです。
sazi

2019/01/12 13:39 編集

大事なのは、整理された上で、1ページに収まる事だと思ってます。 収まり切れない場合は、関連した情報が離れないこと。
Kaiser

2019/01/12 22:01

確かに、1ページに収まるかどうかは大事ですね。 参考にさせていただきます。
退会済みユーザー

退会済みユーザー

2019/01/14 23:31

書き方の具体例までありがとうございます。 コメント欄の書き込みもとても参考になりました。 改行するときは1行の意味を意識して、1ページに整理して収まることを意識して書いていきます。 ありがとうございます。m(__)m
guest

0

join句が加わったことにより、構文がかなり複雑になってきたように感じています。
自分で記述するだけなら、1行の方が記述しやすいと感じています。

個人的には、絶対ではないですけど、onで改行して、結合条件と対象のテーブルが分かれるようにしています。

可読性が低くなるのはサブクエリーなどでのネストの方ですね。
MySQLのバージョンにもよりますが、with式などで可読性を高める事もできます。

投稿2019/01/11 07:54

sazi

総合スコア25206

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

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

退会済みユーザー

退会済みユーザー

2019/01/11 08:01

確かに、条件と対象のテーブルで改行すると分かり易いですね。 参考になりました。ありがとうございます。
guest

0

SQLに慣れていないことが「唯一の原因」です

いっぱいコードを書いて、早く慣れましょう

投稿2019/01/11 07:33

yamato_user

総合スコア2321

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

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

退会済みユーザー

退会済みユーザー

2019/01/11 07:39

そうですね。。 ただ、このまま自己流の記述法に慣れてしまうのもマズイかなあ、と思い質問に至った次第です。 ありがとうございました。今はたくさんコードを書いてSQLに慣れていきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問