Yahoo奇摩知識+ 將於 2021 年 5 月 4 日 (美國東部時間) 終止服務。自 2021 年 4 月 20 日 (美國東部時間) 起,Yahoo奇摩知識+ 網站將會轉為唯讀模式。其他 Yahoo奇摩產品與服務或您的 Yahoo奇摩帳號都不會受影響。如需關於 Yahoo奇摩知識+ 停止服務以及下載您個人資料的資訊,請參閱說明網頁。

? 發問時間: 電腦與網際網路程式設計 · 1 0 年前

SELECT *,(p_price/p_cost) AS用法

我在教科書看到一個SQL範例

SELECT *,(p_price/p_cost) AS p_ben FROM product;

據說,利用計算功能可以對資料表內的值做計算,

並將結果放置入p_ben欄位(查詢石使用,使用完會被drop掉)

請問這是什麼意思???只要用AS SQL就會自動幫我生出虛擬的

欄位,暫放內容(但實際並不存在?)

所以LEFT JOIN 都使用 AS 是否就相當把很多的TABLE欄位,

暫時複製過去的意思??

請教我詳細的觀念問題,謝謝

3 個解答

評分
  • 1 0 年前
    最佳解答

    as 只是設定一個代名詞或是別名,例如:

    select

    item.PartCode as PartCodeNo,

    item.UnitPrice * item.Qty as SubTotal,

    item.PartName as [品名],

    from item

    以上SQL程式語法中,在item資料表中,實際的欄位是 PartCode,

    UnitPrice, Qty, PartName, 但是你可以使用 as 設定一個可讀性較高的別名,

    此外,item.UnitPrice * item.Qty as SubTotal ,SubTotal這個欄位本來就不存在資料表中,SQL是即時運算出 UnitPrice * Qty 之後,該欄位以 SubTotal 命名;

    所以書上會寫p_ben 是虛擬的欄位

    至於在 join 中使用 as , 也是別名的用法

    例如:

    select

    Sale.SaleNo as [銷貨單號],

    User1.UserName as [經辦人],

    User2.UserName as [確認人]

    from Sale

    left join UserTable as User1 on User1.UserNo = Sale.UserNo

    left join UserTable as User2 on User2.UserNo = Sale.ConfrimUserNo

    UserTable是員工基本檔,基本檔只有一個,如果你不使用別名,

    例如下面的範例:

    select

    Sale.SaleNo as [銷貨單號],

    UserTable.UserName as [經辦人],

    UserTable.UserName as [確認人]

    from Sale

    left join UserTable on UserTable.UserNo = Sale.UserNo

    left join UserTable on UserTable.UserNo = Sale.ConfrimUserNo

    會造成關聯亂掉(得到的結果不是你要的)。

    以下是Microsoft SQL Query 程式的說明

    指派結果集資料行名稱

    AS 子句可以用來變更結果集資料行的名稱,或是指派名稱給衍生資料行 (Derived Column)。

    當結果集資料行是藉由對於資料表或檢視表資料行的參考而定義時,結果集資料行的名稱便與被參考的資料行的名稱相同。AS 子句可以用來指派不同的名稱或別名 (Alias) 給結果集資料行。如此可以增加資料行的可讀性。

  • ?
    Lv 5
    1 0 年前

    這樣說吧

    select <part 1> from <part 2> where <part 3>

    在part 1中使用as, 會使秀出來的表格的表頭,是用as之後的字串代替:

    ex:

    select bookname from books;

    會出現一個table , 表頭是用"bookname"然後每一列都是books table裡面的bookname field!

    但是如果用 select bookname as BookName from books;就會出現一個table, 表頭是用"BookName"然後每一列都是books table裡面的bookname field!

    所以這個目的在於:方便你看資料時使用,並不是虛擬出來的欄位,而是代替表頭而己...你上面的那個例子,如果沒用到as, 那麼表頭就會是 (p_price/p_cost)!!

    但是如果你的as 是用在select的part 2, 那麼就代表那個表格的「代名」,可以用在part 3上面

    ex:

    select bookname, sales from booksales as bs, books as bk where bk.auther = "李小明" and bs.bookid=bk.bookid

    在part 3裡面的bs 就代表booksales表格bs.bookid = booksales.bookid

    所以bs是一個代替booksales這一表格全名的字串

    目的是如果有一堆表格要用,這樣比較快

    這個跟join並沒有關系吧....

    參考資料: 自己
  • W.B.G
    Lv 6
    1 0 年前

    這段的意思是,將product中所有的欄位秀出來及將(p_price/p_cost)的結果秀出來欄位名稱是p_ben,實際上p_ben這個欄位是不存在於你的資料表中,只是一個名稱,讓你知道p_ben這個是p_price/p_cost的結果,就這樣。

    其實as還有很多用法,像【select p_price as price,p_cost as cost from product】,這時候得到的結果就只有秀出p_price與p_cost的資料,然後欄位名稱是顯示price與cose,簡單來說就是一個代號,就像說小胖是代表xxx,那你看到小胖就會想到那個綽號叫小胖的人

    as 還有其他的用法,像我常用的是

    select a.*,b.* from product as a,produce as b

    這個時候看到a就是代表product這個資料表,b代表produce這個資料表

    參考資料: 自己的經驗
還有問題?馬上發問,尋求解答。