人に聞けない痔の悩み、これでスッキリ >>

文とはSELECT,INSERT,UPDATE,DELETE等と思いますが、WHEREは節と言ったり、句と言ったりどちらが正解でしょうか?
また、節と句にはどの様に分類できますか?

A 回答 (2件)

WHEREに限った話ではありませんが、「句」「節」「文節」の


どれもが使われています。
特に区別は無く、本によって違うだけで同じ物をさしているようです。
私のもっている本は全て「文節」で統一されています。
検索してみると「句」「節」「文節」の順です。

原文では「clause:節」が殆んどで「phrase:句」は非常に少ないですね。

私見ですがSQLの場合、「FROM A」のように短いものも多く、
節と言うよりも句に近いものが多いので「句」と翻訳したものが多いのかとも思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
なるほど!

お礼日時:2005/03/29 17:23

oracle では節で統一されていますね。



マニュアルには句は一切出てきませんでした。

他のデータベースでは句が使われたりするのではないでしょうか。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
データベースによって言い方が違うんでしょうかね。
INTO句とかVALUE句といってたような気がしますが。

お礼日時:2005/03/29 17:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QSQLの「句」とはなんですか

こんにちは。「文」や「式」や「句」の違いがよくわからなかったので、調べたら文と式はわかりました。

文はそれ単独で完結する言語要素

式はそれ単独では基本的に完結せず、文または式の一部として使用される言語要素です。
式の最大の特徴として、値を返すという点が挙げられます(文は値を返しません)。

定数式はその値そのものを返します。
条件式は真偽値(True/False)を返す式です。

ただ、「句」がどういったものかがわかりません。Order By句とか色々ありOrder Byが何を意味しているのか理解はできますが、「句」ということがばひっかかります。

ひらたくいうと、どういったことでしょうか?

Aベストアンサー

英語版Wikipediaに掲載されている図がこちら。
http://en.wikipedia.org/wiki/File:SQL_ANATOMY_wiki.svg
命令文(statement),節・句(clause),述部(predicate),式(experssion)という英単語が登場しています。

英語版Wikipediaに登場するClausesの説明文を日本語翻訳したのがこちら。
http://translate.google.co.jp/#en/ja/Clauses%2C%20which%20are%20constituent%20components%20of%20statements%20and%20queries.%20(In%20some%20cases%2C%20these%20are%20optional.)
[10] ANSI/ISO/IEC International Standard (IS). Database Language SQL—Part 2: Foundation (SQL/Foundation). 1999. に登場する記述とのこと。

英語版Wikipediaに掲載されている図がこちら。
http://en.wikipedia.org/wiki/File:SQL_ANATOMY_wiki.svg
命令文(statement),節・句(clause),述部(predicate),式(experssion)という英単語が登場しています。

英語版Wikipediaに登場するClausesの説明文を日本語翻訳したのがこちら。
http://translate.google.co.jp/#en/ja/Clauses%2C%20which%20are%20constituent%20components%20of%20statements%20and%20queries.%20(In%20some%20cases%2C%20these%20are%20optional.)
[10] ANSI/ISO/IEC International Stan...続きを読む

QMySQLで複数のSELECT文を1文にまとめたい

以下のようなテーブル table1 があります。
*******************
table1
*******************
Name, Kyouka, Score, ID
*******************
山田, 国語, 92, 10001
鈴木, 国語, 71, 10002
田中, 国語, 89, 10003
山田, 数学, 65, 10004
鈴木, 数学, 69, 10005
杉田, 英語, 96, 10006
山田, 英語, 63, 10007
田中, 英語, 76, 10008
...
*******************

カラムIDはPRIMARYを指定しています。
カラムScoreはインデックスを作成しています。

このテーブルで、「IDと教科」を指定したときに、以下の2つのデータを得たいと思っています。
(1) IDに対応する名前と、その教科中の順位
(2) その教科のレコード数

具体例としては、例えば「ID=10001、教科=国語」を指定したときに、「山田、3人中1位」というような情報が得たいです。
(「ID=10001、教科=英語」のようなおかしな組み合わせは指定しないようになっています。)

(1) は、以下のようにして名前と順位を得る事が出来ました。
SELECT Name,
(SELECT COUNT(*) + 1 FROM table1 b WHERE b.Score > a.Score and Kyouka='国語') AS rank
FROM table1 a
WHERE ID='10001'
ORDER BY Score DESC;

(2)は、以下のようにして特定の教科のレコード数を得る事が出来ました。
SELECT COUNT(*) FROM table1 WHERE Kyouka='国語';

しかし、実際にはレコード数が大量にあり、頻繁にこの検索を実行する予定なので、負荷が心配です。
出来るだけサーバーの負荷を減らすために、1回のSELECT文の実行で(1)と(2)をどちらも実現できるような方法はないでしょうか。

また、このテーブルでインデックスを作成しているのはIDとScoreのみですが、より負荷を減らすにはKyoukaにもインデックスを作成した方が良いでしょうか。

何卒、よろしくお願いいたします。

以下のようなテーブル table1 があります。
*******************
table1
*******************
Name, Kyouka, Score, ID
*******************
山田, 国語, 92, 10001
鈴木, 国語, 71, 10002
田中, 国語, 89, 10003
山田, 数学, 65, 10004
鈴木, 数学, 69, 10005
杉田, 英語, 96, 10006
山田, 英語, 63, 10007
田中, 英語, 76, 10008
...
*******************

カラムIDはPRIMARYを指定しています。
カラムScoreはインデックスを作成しています。

このテーブルで、「IDと教科」を指定したときに、以下の2つのデータ...続きを読む

Aベストアンサー

教科中の順位とその教科のレコード数を1回で取得するなら、下記の様にSELECT句内のサブクエリを一つ追加すれば良いだけです。

----------------------------------------
SELECT
Name,
Kyouka,
Score,
(SELECT COUNT(*) + 1 FROM table1 b WHERE b.Score > a.Score AND a.Kyouka = b.Kyouka) AS rank,
(SELECT COUNT(*) FROM table1 c WHERE a.Kyouka = c.Kyouka) AS count
FROM table1 a
WHERE ID = '10001'
ORDER BY Kyouka, Score DESC;
----------------------------------------

また、上記の様に教科をサブクエリ内の結合条件で絞り込んでやると、WHERE句の条件を変えるだけで色々な絞込みが可能です。

例) [国語の全データを取得] -------------
SELECT
Name,
Kyouka,
Score,
(SELECT COUNT(*) + 1 FROM table1 b WHERE b.Score > a.Score AND a.Kyouka = b.Kyouka) AS rank,
(SELECT COUNT(*) FROM table1 c WHERE a.Kyouka = c.Kyouka) AS count
FROM table1 a
WHERE Kyouka = '国語'
ORDER BY Kyouka, Score DESC;
----------------------------------------

性能が気になるようでしたら、下記の様にカウントはFROM句内のサブクエリで取得した方がよいかも知れません。

----------------------------------------
SELECT
Name,
Kyouka,
Score,
(SELECT COUNT(*) + 1 FROM table1 b WHERE b.Score > a.Score AND a.Kyouka = b.Kyouka) AS rank,
c.count
FROM table1 a INNER JOIN
(SELECT Kyouka, COUNT(*) AS count FROM table1 GROUP BY Kyouka) c USING(Kyouka)
ORDER BY Kyouka, Score DESC;
----------------------------------------

なお、他の方も指摘されている通り、Kyoukaカラムにもインデックスを張ったほうが良いと思います。

教科中の順位とその教科のレコード数を1回で取得するなら、下記の様にSELECT句内のサブクエリを一つ追加すれば良いだけです。

----------------------------------------
SELECT
Name,
Kyouka,
Score,
(SELECT COUNT(*) + 1 FROM table1 b WHERE b.Score > a.Score AND a.Kyouka = b.Kyouka) AS rank,
(SELECT COUNT(*) FROM table1 c WHERE a.Kyouka = c.Kyouka) AS count
FROM table1 a
WHERE ID = '10001'
ORDER BY Kyouka, Score DESC;
----------------------------------------

また、上記の様に教科をサ...続きを読む

Q「いずれか」と「いづれか」どっちが正しい!?

教えて下さいっ!
”どちらか”と言う意味の「いずれか」のかな表記として
「いずれか」と「いづれか」のどちらが正しいのでしょう???

私は「いずれか」だと思うんですが、辞書に「いずれか・いづ--。」と書いてあり、???になってしまいました。
どちらでもいいってことでしょうか?

Aベストアンサー

「いずれか」が正しいです.
「いづれ」は「いずれ」の歴史的かな遣いですので,昔は「いづれ」が使われていましたが,現代では「いずれ」で統一することになっていますので,「いずれ」が正しいです.

QリンクでPOSTデータを送信することは可能ですか?

はじめまして。
Submitボタンを使用せずに<A>リンクでFORMのPOSTメソッドデータを送信することは可能でしょうか?
やはりURLにデータを付加して送信するしかないのでしょうか?
ご教授よろしくお願い致します。

Aベストアンサー

javascript を使えば可能です。大雑把にはこんな感じ。

・パラメータが全部 hidden な form を記述しておく(ブラウザでは表示されない)
・<a href> では、その form を submit するように javascript を記述する

試してないですけど、こんな感じ。

<form name=f method=POST action="http://どこか">
<input type=hidden name=x1 value=v1>
</form>

<a href="javascript:document.f.submit()">リンクから submit</a>

QHTMLのソースをエクセルに貼り付ける方法

HTMLのソースを、そのまま(メモ帳表示データのまま)Excelに貼り付ける方法はありますか。

メモ帳でソースの表示をして、全て選択→コピー→Excelに型式を選択して貼り付け→テキスト
で貼り付けてみましたが、変なフォーマットで表示されます。
セルの書式を文字列にしても同じです。

目的はExcelの文字列操作で特定の文字だけ拾い出して加工しようと考えています。
OS:Win95、Excel2000です。

Aベストアンサー

再び登場です。
ソースを表示させたメモ帳をとりあえず一度名前を付けて保存して下さい。
そしてExcelのデータメニューから外部データの取り込み、テキストファイルのインポートをクリック。
後は必要に応じて取り込み方を選びます。
これでどうでしょうか?

QViewにインデックスは張れますか?

件名の通りなのですが、作成したViewが遅くて困っています。
改善方法としてはViewを作成しないで従来のSQLにインデックスを張って取得する方法にしようかなと考えています。
なにかいい方法はありますか?

Aベストアンサー

Viewの元テーブルに適切なIndexを貼る、ではいけないのですか?

QMAX値を条件にデータを取得するには?

SQL文で困っています。
ご教授下さい。


下記のようなデータがあった場合、それぞれの区分毎に
年月が最大(最新)のデータを取得したいです。
(実際には1レコードにその他項目があり、それらも取得します。)
<検索対象データ>
区分 年月   金額
-----------------------------
A   200412  600
A   200503  560
B   200311  600
B   200508  1000
B   200504  560
C   200508  400
C   200301  1100


<取得したいデータ>

区分 年月   金額
-----------------------------
A   200503  560
B   200508  1000
C   200508  400

よろしくお願いします。

Aベストアンサー

テーブル名をXXXとすると次のようなSQLでよいと思います。(最善の方法かどうかは自信がないですが)

select B.* from (select 区分, max(年月) as 年月 from XXX group by 区分) As A
inner join XXX as B on A.区分 = B.区分 and A.年月 = B.年月
order by B.区分

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub

Qcount(1)とcount(*)の違い

初心者です。
以下のSQL文の違い及びcount(1)の1が何を表しているのか
教えて頂けないでしょうか?

select count(*) from table
select count(1) from table

また、参考しやすいサイト等ありましたら教えて頂けないでしょうか?

Aベストアンサー

COUNT(*)はNULLを含む件数
COUNT(expr)とCOUNT(ALL expr)はexpr列のNULLが含まない件数
COUNT(DISTINCT expr) expr列の種類(null以外)
です。
たまにcount(1)の記述を確かに見受けます。
これは「select 1 from <TABLE名>」でカウントした結果と同じです。
(つまり、count(*)と同じ件数になるはず)
#ためしにCOUNT(DISTINCT 1)とかすると1になるはずです
#1番目の列ではないはず

Qシングルクォーテーションとダブルクォーテーション

いつも楽しく拝見させて頂いています。
初心者ですが宜しくお願いします。
シングルクォーテーションとダブルクォーテーションの使用方法について質問させて頂きます。
select文でテーブル名を指定するときはそのまま(たとえば'名前'じゃなく名前)しないとエラーになります。そういう風なシングルクォーテーション(又はダブルクォーテーション)を使ってはいけないところ、またシングルクォーテーションにしないといけないところ、ダブルクォーテーションにしないといけないところを教えて頂けますでしょうか?もし両方OKならその違い等も教えていただけるとうれしいです。
以上宜しくお願いします。

Aベストアンサー

文字定数は、「'」で囲む必要があります。

例)SELECT 'ABC' →文字定数の'ABC'と解釈される
SELECT ABC →ABCは、表名や列名と解釈される

数値定数は、多くのRDBMSでは「'」で囲みませんが、MySQLでは独自仕様として囲むことが可能です。

例)SELECT 123 →数値定数の123
SELECT '123' →一般的なRDBMSでは文字として扱われる。MySQLでは数値としても扱える

殆どのRDBMSには予約語があり、RDBMSでは予約語を頼りに構文解析します。表名や列名に英単語やその組み合わせを使おうとすると、予約語とぶつかってしまうことがあります。

例)SELECT FROM FROM →予約語のSELECT FROMの間に「*」や列名が指定されておらず、RDBMSは構文誤りと認識する

それを回避するために、標準SQLでは「"」で表名や列名を囲みます。MySQLでは、文字コードにANSIを使う場合は、「"」で、それ以外には独自仕様で「`」(バッククォーテーション)を使います。

例)SELECT "FROM " FROM →多くのRDBMSでは「"」で囲むことで、RDBMSに最初の「FROM」は、列などの名前であることを知らせる
SELECT `FROM` FROM →ANSI以外のMySQLでは、「`」(バッククォーテション)で囲む

また、「-」(ハイフォン)を表名や列名に使う場合、「"」で囲まないと、SQLでは減算と解釈されます。このように、「"」で囲むことで、記号なども名前に使用することができます。

例)SELECT ABC-DEF →列ABCと列DEFの減算と解釈される
  SELECT "ABC-DEF" →列「ABC-DEF」と解釈される
  SELECT `ABC-DEF' →ANSI以外のMySQLでは、「"」でなく「`」(バッククォーテション)を使用

文字定数は、「'」で囲む必要があります。

例)SELECT 'ABC' →文字定数の'ABC'と解釈される
SELECT ABC →ABCは、表名や列名と解釈される

数値定数は、多くのRDBMSでは「'」で囲みませんが、MySQLでは独自仕様として囲むことが可能です。

例)SELECT 123 →数値定数の123
SELECT '123' →一般的なRDBMSでは文字として扱われる。MySQLでは数値としても扱える

殆どのRDBMSには予約語があり、RDBMSでは予約語を頼りに構文解析します。表名や列名に英単語やその組み合わせを使おうとすると、予...続きを読む


人気Q&Aランキング