🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

SQL

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

Q&A

2回答

743閲覧

SQLの読み方がわからない

zzaa

総合スコア9

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

SQL

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

0グッド

0クリップ

投稿2020/11/25 04:57

編集2020/11/25 05:18
SELECT *, cmy.nm AS cmyNm, aplystf.nm AS aplystfNm, FROM  cnt_g LEFT OUTER JOIN cpy ON cvt_g.cyId = cvt.id LEFT OUTER JOIN stf AS aplystf ON cnt_g.aplystfId = aplystf.id

SQL初心者です。(大雑把な説明になりますがご了承ください)これは日本語にするとどのように読み取ることができるのでしょうか?

PHPMyAdminでテーブルを確認しているのですが
cvt_g.cyId = cvt.id
↑見当たらず

クエリでどのようにコマンドを実行すればいいでしょうか?

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

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

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

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

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

maisumakun

2020/11/25 05:04

クエリ全体を提示してください。同じクエリ内の他の場所に「cvt_g」の定義があるかもしれません。
coco_bauer

2020/11/25 05:04

質問のSQLは、どこからコピーしたものなのですか? SQLのコード全体が判らないので、その極一部(1行)が何を意味するのかを分かるわけがないと思いませんか?
zzaa

2020/11/25 05:18

ただいま変更しました。もう一度ご確認いただけますでしょうか?
maisumakun

2020/11/25 05:20

正常に実行できるクエリなのですか?
zzaa

2020/11/25 05:24

名前を省略して書いたものになります。読みづらくって申し訳ございません
maisumakun

2020/11/25 05:39

> 名前を省略して書いたものになります。 「名前がどこに対応しているか」が質問の対象なのに、その名前を省略してしまっていたのですか!?
sazi

2020/11/25 08:07

質問のSQLだと、「cvt_g.cyId = cvt.id 」ではエラーになり実行できないはずです。 「cnt_g.cyId = cvt.id ]に変更してみてください。 で、質問って何ですか?
guest

回答2

0

処理の流れを日本語で記載すると
0. LEFT OUTER JOIN cpy ON cvt_g.cyId = cvt.id
⇒cnt_gテーブルとcpyテーブルを
cvt_gテーブルのcyIdとcvtテーブルのidで結合

  1. LEFT OUTER JOIN stf AS aplystf ON cnt_g.aplystfId = aplystf.id

⇒cnt_gテーブルとstfテーブル(ASでaplystfという別名が付けられています)を
cnt_gテーブルのcaplystfIdとstfテーブルのidという項目で結合
0. SELECT
*,
cmy.nm AS cmyNm,
aplystf.nm AS aplystfNm,
⇒cnt_gとcpyとstfテーブルの全項目
cmyテーブルのnm(ASでcmyNmという別名が付けられています)
aplystfテーブルのnmという項目(ASでaplystfNmという別名が付けられています)

となります。

cvt_g.cyId = cvt.id
↑見当たらず

と記載されていますが、おそらく
cnt_g.cyId = cpy.id
だと思われます。

修正後のクエリとしましては

sql

1SELECT 2 *, 3 cpy.nm AS cmyNm, 4 aplystf.nm AS aplystfNm 5FROM 6 cnt_g 7 LEFT OUTER JOIN cpy ON cnt_g.cyId = cpy.id 8 LEFT OUTER JOIN stf AS aplystf ON cnt_g.aplystfId = aplystf.id

になると思います。

投稿2020/11/25 08:50

編集2020/11/25 09:01
K_Y_M

総合スコア100

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

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

0

直接の回答ではないです。

普通、日本語にも文章にもしません。
コードは書いた通りに動きます。
SQLは原則、一番内側から実行されます。

なので、「処理順」に着目して追います。
基本的には検索対象のテーブルが一番内側、SELECT句が一番外側です。

あとは処理のグループにわけて1つずつ機能を見ていけば、読み解けないことはないと思います。
しいてなら「フローチャート」にはするかもしれません。
文章にすると逆に分かりづらくなることの方が多そうです。
「処理によってどういうデータが出来上がるか」にフォーカスすべきなので。

名前はエイリアス(AS)によって別名として扱われていることもあるのでそこは注意が必要です。

「今どこまで読めているか」から「どこが読めないか」を洗いだし、「読めてないところはどういう処理順か」を追っていくと良いでしょう。

※いずれにしても正しいテーブル定義と正しいコードを提示されない限り、他者には読みきれません

投稿2020/11/25 06:08

編集2020/11/25 06:14
m.ts10806

総合スコア80875

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

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

m.ts10806

2020/11/28 06:35

>低評価された方 他の回答と同じ人でしょうか。不純な人ですね。 意見があるなら堂々と言ってください。
K_Y_M

2020/12/02 01:27

低評価は私ではございませんが・・・ 勝手な決めつけは勘弁して欲しいです・・・ 低評価ボタンも押せないビギナーですので。
maisumakun

2020/12/02 01:30

> 勝手な決めつけは勘弁して欲しいです・・・ おそらく「m.ts10806さんの他の回答に低評価を入れていっている人」の意味かと思います。K_Y_Mさんのことを指しているわけではないでしょう。
K_Y_M

2020/12/02 01:32

> おそらく「m.ts10806さんの他の回答に低評価を入れていっている人」の意味かと思います。K_Y_Mさん > のことを指しているわけではないでしょう そうでしたか。 m.ts10806さん、失礼いたしました。
m.ts10806

2020/12/02 02:09

はい。あくまで不特定の誰かに対して書いてます。低評価は誰がしたか分からないので。 最近ずっと2つ無言での低評価が毎日ついてるので、「この回答に低評価ついた日と同じ日に低評価ついた回答と同じ人ではないか」という推測のコメントを添えてます。 紛らわしくて失礼しました。 私は基本的に名前が分かってるなら名前をアンカーとしてつけます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問