A. 向高手請教一個sql多表關聯查詢排序的問題
select a.*,b.*
(可以選擇欄位名稱,注意兩個表中重名的欄位一定要加a.或b.,其他不重名的可以不加,但是為了以後的拓展,最好都加)
from [表A] as a left join [表B] as b
on a.$key=b.key
order by b.cid desc
(這樣的話當b表中的b.key不在a表中的時候,b.*的欄位都是空的,如果想改成你期望的類型,可以使用isnull函數,比如isnull(b.key,0)或isnull(b.key,'無')
B. 求多表查詢,多列排序,的SQL語句
INNER JOIN 運算
組合兩個表中的記錄,只要在公共欄位之中有相符的值。
語法
FROM table1 INNER JOIN table2 ON table1.field1 compopr table2.field2
INNER JOIN 運算可分為以下幾個部分:
部分 說明
table1, table2 記錄被組合的表的名稱。
field1, field2 被聯接的欄位的名稱。若它們不是由數字構成的,則這些欄位必須為相同的數據類型並包含同類數據,但它們無須具有相同的名稱。
compopr 任何的關系比較運運算元:"=," "<," ">," "<=," ">=," 或 "<>."
說明
可以在 FROM 子句中使用INNER JOIN運算。.這是最普通的聯接類型。只要在這兩個表的公共欄位之中有相符值,內部聯接將組合兩個表中的記錄。
可以使用 INNER JOIN 與部門表及員工表選擇每一個部門中的全部員工。反之,可以使用 LEFT JOIN或 RIGHT JOIN運算創建 outer join,從而選擇所有部門(即使有些並沒有員工)或所有員工(即使有些尚未分配到部門)。
若試圖聯接包含 Memo或 OLE Object數據的欄位,會導致錯誤。
可以聯接任何兩個相同類型的數值欄位。例如,可以聯接 AutoNumber和 Long欄位,因為它們類型相似。但不能聯接 Single 和 Double 類型的欄位。
下列示例顯示如何在類標識符欄位聯接類表及產品表:
SELECT CategoryName, ProctName
FROM Categories INNER JOIN Procts
ON Categories.CategoryID = Procts.CategoryID;
在上面的示例中,類標識符是已被聯接的欄位,但是它並不包含在查詢輸出中,因它並非被包含在 SELECT 語句之中。在這個示例中,若要包含聯接欄位,將欄位名包含在 SELECT 語句中, Categories.CategoryID.
也可以使用下列語法,在一個 JOIN 語句中鏈接多個 ON 子句:
SELECT fields
FROM table1 INNER JOIN table2
ON table1.field1 compopr table2.field1 AND
ON table1.field2 compopr table2.field2) OR
ON table1.field3 compopr table2.field3)];
也可以使用下列語法,嵌套 JOIN 語句:
SELECT fields
FROM table1 INNER JOIN
(table2 INNER JOIN [( ]table3
[INNER JOIN [( ]tablex [INNER JOIN ...)]
ON table3.field3 compopr tablex.fieldx)]
ON table2.field2 compopr table3.field3)
ON table1.field1 compopr table2.field2;
在一個 INNER JOIN 之中,可以嵌套 LEFT JOIN 或 RIGHT JOIN,但是在 LEFT JOIN 或 RIGHT JOIN 中不能嵌套 INNER JOIN。
--------------------------------------------
ORDER BY 子句
按照遞增或遞減順序在指定欄位中對查詢的結果記錄進行排序。
語法
SELECT 欄位表
FROM 表
WHERE選擇准則
[ORDER BY欄位1 [ASC | DESC ][, 欄位2 [ASC | DESC ]][, ...]]]
包含 ORDER BY 子句的 SELECT 語句具有以下幾個部分:
部分 說明
fieldlist 要和任何欄位名別名, SQL 合計函數s, 選擇斷定 (ALL, DISTINCT, DISTINCTROW或 TOP)或其他 SELECT 語句 選擇一起檢索的欄位名稱。
table 從其中獲取記錄的表的名稱。欲知更多信息請看 FROM 子句.
selectcriteria 選擇准則。如果此 語句 包含一個 WHERE 子句, Microsoft Jet資料庫引擎 會在記錄上應用WHERE條件,然後把值排序。
field1, field2 要排序記錄的欄位名。
說明
ORDER BY 是可選的。不過,如果要將數據以排序時的順序顯示出來,就必須使用 ORDER BY。
預設排序順序是升序 (A至 Z, 0至 9).以下兩個示例都用雇員的姓對雇員姓名排序:
SELECT LastName, FirstName
FROM Employees
ORDER BY LastName;
SELECT LastName, FirstName
FROM Employees
ORDER BY LastName ASC;
為按遞減順序排序(Z 至 A,9 至0),必須將 DESC 保留字添加到要遞減排序的每一欄位的尾部。下例選擇雇員薪金並對雇員用遞減順序排序。
SELECT LastName, Salary
FROM Employees
ORDER BY Salary DESC, LastName;
如果你在ORDER BY 子句中標明了包含 Memo或 OLE Object數據的一個欄位,一個錯誤就產生了。Microsoft Jet 資料庫引擎不對這些類型的欄位排序。
ORDER BY通常是 SQL 語句中最後一項。
ORDER BY 子句可包含添加的欄位。首先用 ORDER BY之後列舉的第一個欄位對記錄排序。然後對此欄位中等值的記錄用第二欄位列舉的值進行排序,依此類推。
C. 求解SQL資料庫兩張表數據的排序問題
select ID=Dept_ID,Name=Dept_Name
from (
select *,flag=0 from d_dept
union all
select *,1 from d_unit) k
order by left(Dept_ID,3) asc,flag asc,Dept_ID asc
首先通過
select *,flag=0 from d_dept
union all
select *,1 from d_unit
將所有內容合並在一起 這樣合一起是亂序的
然後將它作為臨時表
from (
select *,flag=0 from d_dept
union all
select *,1 from d_unit) k
注意這里我加個了個FLAG欄位 是為了標志0為部門 1為單位 為之後排序做准備
然後利用這個臨時表 我進行排序 看下面
select ID=Dept_ID,Name=Dept_Name
這句的意思 理解的吧 選取臨時結果集的2個欄位,注意這里的Dept_ID和Dept_Name分別語句包含了unit_ID 和unit_Name(這個自己執行下臨時結果集就知道了)
我們重點來說排序
order by left(Dept_ID,3) asc,flag asc,Dept_ID asc
先看第一個left(Dept_ID,3) 首先要進行部門排序的 我們是以左邊三個符號位排序信息的 排出來就是
001
001001
..
002
..
003
003...
上面的排序不保證每個部門裡面的排序時按照部門號先 然後再改部門的單位的順序 所以加上flag asc
在每組裡面 要讓部門號先 通過FLAG=0 將部門號放在了前面
所以這里出來:
001
001001
..
002
..
003
003...
請看 在001號部門裡面 001 肯定在 001XXX前面了
但是這排序不能保證 001XXX 001XXY這樣的單位號排序 就是加上
Dept_ID asc 明白了吧
D. SQL多表查詢語句怎麼寫
SQL多表查詢語句的步驟如下:
我們需要准備的材料分別是:電腦、sql查詢器。
1、首先,打開sql查詢器,連接上相應的資料庫表,例如m1表和m2表。
E. SQL多表聯合查詢按日期排序
select B.Order,B.DataTime
from 表1 A ,表2 B
where A.PlantFlag =1
and A.CusOrder =B.AssOrder
order by B.DataTime
看看是不是這個意思
F. sql多表分組查詢並排序的問題
selectsID,name,timefrom(
selecttb1.sID,tb2.tID,tb3.name,tb3.time
,row_number()over(partitionbytb1.sIDorderbytb3.timedesc)seq
fromtb1a
innerjointb2bona.sID=b.sID
innerjointb3conb.tID=c.tID
)twhereseq=1
G. sql查詢多表排序
路過看到了,參考我的語句,應該可以的
SELECT 商品表.商品編號,sum(庫存表.數量) as 庫存數
FROM 庫存表 LEFT JOIN 商品表 ON 庫存表.商品編號 = 商品表.商品編號 group by 商品表.商品編號,庫存表.數量;