は、クエリがこれらのクエリとその動作の違いは何ですか?我々はすべての書籍を選択する必要がある場合
select * from mybooks;
ので、なぜ我々はエイリアシングする必要がないようなものとなりますサンプルTABLE_NAME = Mybooks、
を取るようなクエリ
select books.* from mybooks books;
私はこの動作とその使い方を理解していません
は、クエリがこれらのクエリとその動作の違いは何ですか?我々はすべての書籍を選択する必要がある場合
select * from mybooks;
ので、なぜ我々はエイリアシングする必要がないようなものとなりますサンプルTABLE_NAME = Mybooks、
を取るようなクエリ
select books.* from mybooks books;
私はこの動作とその使い方を理解していません
エイリアスは、テーブルの特定の使用の名前を変更するようなもので、いずれかを使用する理由は以下のとおりです。
テーブルを1つだけ使用すると、エイリアスは必要ありませんが、何も使用できなくなります。
例:
一つのテーブルには、値を追加しませんが、あなたはこれらのいずれかに行くことができます:
-- Cartesian join or cross join, at least one of the instances requires an alias
SELECT *
FROM LongTableName, LongTableName l
-- You are forced to use the full name to refer to an "un-aliased" table
SELECT LongTableName.Field, l.Field
FROM LongTableName, LongTableName l
-- For any other join, if only one table has an alias, like in the previous case,
-- you will have to use the full name to refer to the other instance
SELECT *
FROM LongTableName
INNER JOIN LongTableName l ON LongTableName.Field = l.Field
-- Normally you simply use a short alias for both, like this
SELECT *
FROM LongTableName l1
INNER JOIN LongTableName l2 ON l1.Field = l2.Field
-- Only selecting some fields
SELECT l1.PrimaryKey, l1.Field, l2.PrimaryKey, l2.Field
FROM LongTableName l1
INNER JOIN LongTableName l2 ON l1.Field = l2.Field
SELECT *
FROM LongTableName
-- Only if you enjoy typing
SELECT LongTableName.*
FROM LongTableName
SELECT *
FROM LongTableName t
SELECT t.*
FROM LongTableName t
SELECT
で、すべての使用されているテーブルのすべてのフィールドが必要な場合は、*
を使用するだけで済みます。しかし、複数のテーブルから特定のフィールドを選択する必要がある場合は、エイリアスがあることに本当に感謝します。
あなたのクエリにジョインがあると、シンプル*はジョインに含まれるすべてのテーブルのすべてのフィールドになります。 books。*を使用すると、結果にbooksテーブルのすべてのフィールドのみが含まれます。
これはこれまでのエイリアシングとは関係がありません。別名では、同じ名前の2つのテーブルを区別できるように別名を付けることもできます。
どちらの概念も、複数のテーブルでより複雑なクエリがある場合にのみ意味があります。
私は本のテーブルを持っていません....まだこのクエリはOracleで働いています....私はこの方法でJava EEのResultSetクラスに渡す必要があります。そうでなければ、それを変換します読み込み専用フォーマット –
2番目のステートメントでは、「mybooks」という名前のテーブルに別名「books」を指定しました。つまり、本やmybooksを使ってもともとmybooksという名前のテーブルにアクセスすることができます。 – usterdev
ok ....「書籍」から「mybooks」にアクセスできる場合....これは機能するはずです。書籍から選択してください。 .....なぜ別名が必要なのですか? –
2つのものを混在させています。エイリアスの使用については、すでに良い回答があります。しかし、これは別の方法でselect *
を書く唯一の方法ではありません。
エイリアスがない場合は、select mybooks.* ...
と指定できます。テーブル名はエイリアスではありません。
場合によってはテーブル名が不要で、select *
を使用することもできます。ただし、他の列を追加する必要がある場合は、SYSDATE as DT
など、select *
の後にはこれを行うことはできません。エイリアスを必要としないでselect mybooks.*, SYSDATE as DT ...
を使用する必要がありますが、クエリが1つのテーブルのみを参照していても、*
にプレフィックスとしてテーブル名を付ける必要があります。
がより頻繁に。これは、分析関数で発生しますrow_number() over ...
のように2つのクエリは同等です第二に、あなたがテーブル名の別名を持っていて、すべてのテーブルの列(ただし、必要性を必要とする場合に便利です他の列の列alsio) – scaisEdge
@scaisEdge「他の列の列も必要です」をご説明ください。 –
.thereは間違いがあります。他の表の意味もあります。たとえば、booksの選択。*、u。* books for books.key = u.key ..これはあなたの場合ではありません) – scaisEdge