3

私はPHP/MySQLにかなり慣れておらず、一般的にクエリを使用しています。クエリで「AS」を使用することで、見栄えを良くする以外に何かメリットがあるのではないかと思っていました。それはクエリをまったくスピードアップしますか?私はおそらくグーグル検索でこれを理解することができたかもしれませんが、私は私の最初の質問をして、これがどのように機能するかを見たかったのです。私は答えを選びます(一部の人とは異なり...)

と:

SELECT
news.id as id
news.name as name
FROM news

それなし:

SELECT
news.id
news.name
FROM news

私が見つけた多対多の関係のチュートリアルからのより複雑な例:

SELECT
c.name,
cf.title
FROM celebrities AS c
JOIN (
    SELECT
    icf.c_id,
    icf.f_id,
    f.title
    FROM int_cf AS icf
    JOIN films AS f
    ON icf.f_id = f.f_id
) AS cf
ON c.c_id = cf.c_id
ORDER BY c.c_id ASC
4

4 に答える 4

4

他の列との競合がないことがわかっている場合は、これを使用する理由はありません。パフォーマンスに違いはありませんが、出力列の名前は変更されます。動的選択を作成するときに非常に便利です。したがって、たとえば、フィールドがあるfirst_name場合last_nameは、CONCAT関数を使用して次のことを行うことができます。

SELECT CONCAT(first_name, ' ', last_name) AS name FROM whatever

さらに、そのJOINで示したように、AS演算子はサブクエリテーブルを定義するときに機能します。そのASがないと、ON句またはSELECTフィールドでそのテーブルを参照できません。

于 2012-12-03T23:04:45.543 に答える
3

1)いいえ、パフォーマンスには影響しません。

2)SQLクエリの読みやすさに関しては、好みの問題です。

3)出力の読みやすさに影響します(列ヘッダーが変更されます)

于 2012-12-03T23:04:39.000 に答える
2

あいまいさと予約語に関してのみ。パフォーマンスには影響しません。あいまいさは、別々のテーブルからの同じ名前の2つの列を指します。他のRDBMSはこれであなたを平手打ちします。予約語とは、バッククォートを使用してエスケープするか、エイリアスを使用する必要があるシステムワードを指します。

サブクエリを使用すると、エイリアス列は子レベルを超えて派生しない場合があります。

于 2012-12-03T23:05:31.353 に答える
1

エイリアス(「AS」キーワード)を使用する場合と使用しない場合のクエリ実行速度は同じです。それらを使用する理由:

  • 非常に長いまたは複雑なテーブル名または列名がある場合は、データベースの操作が簡単になります。
SELECT c.Construction_ID, c.Name, c.Price 
FROM Constructions c LEFT JOIN 
Constructions_Orders co ON c.Construction_ID = co.Construction_ID
WHERE c.OrderID='1' AND c.Name='ConstructionName'

ただし、出力列の名前を変更し、それも考慮に入れます(コードを読んでいる人にとっては難しくなります)。

  • エイリアスは、動的選択を作成するのに役立ちます。
mysql> SELECT CONCAT(id, name, work_date) as profile
    -> FROM employee_tbl;
+-----------------------------+
| profile                     |
+-----------------------------+
| 1John2007-01-24             |
| 2Ram2007-05-27              |
| 3Jack2007-05-06             |
| 3Jack2007-04-06             |
| 4Jill2007-04-06             |
| 5Zara2007-06-06             |
| 5Zara2007-02-06             |
+-----------------------------+
7 rows in set (0.00 sec)
于 2012-12-03T23:06:14.217 に答える