❶ sql中的多表查詢,以及JOIN的順序重要麼
給表之間設置主外鍵, 你查詢多表的時候, 還是要 JOIN 的啊。
表之間設置主外鍵,會自動創建一個索引。
所以,理論上來說,你表之間設置了主外鍵。
這2個表之間關聯查詢的時候,性能要比 沒有主外鍵的性能要好。
❷ 求多表查詢,多列排序,的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之後列舉的第一個欄位對記錄排序。然後對此欄位中等值的記錄用第二欄位列舉的值進行排序,依此類推。
❸ sql多表查詢並排序的問題
1. A、B 的關聯條件是什麼?
2. date合並成一個欄位作為排序指標?
如果關聯上的2條記錄,date不一樣,如何處理?
還是把表結構大概描述一下吧
❹ sql 多表 排序
如果,這兩張表id,userid可作關聯條件,可將兩張表關聯查詢。
如:
select a.id,a.userid,a.title,a.time,b.id,b.userid,b.title,b.time from a,b
where a.id=b.id and a.userid=b.userid
order by a.time
❺ sql中的左聯多表 表之間順序問題
1是主表,2和3是子表,我用ABC和ACB的方式表示了一下
不知是否能解決你的疑惑。
❻ MYSQL資料庫多表聯查如何排序
select*form(
select*from表A
unionall
select*form表B
)torderbyt.評論時間desc
這樣你試試
❼ SQL多表聯合查詢按日期排序
select B.Order,B.DataTime
from 表1 A ,表2 B
where A.PlantFlag =1
and A.CusOrder =B.AssOrder
order by B.DataTime
看看是不是這個意思
❽ SQL多表查詢排序
select 學校名稱,(select count(*) from course where school_id=school.school) as 課程計數
from school
order by 課程計數
❾ 請問資料庫多表內連接順序是怎樣的
你好。
執行順序和資料庫有關的。
如果你的資料庫是SQL Server,你的理解是正確的。
ORACLE是從後往前解析,SQL Server則是從前往後。
如果對這方面比較感興趣,SQL Server推薦一本書
《Microsoft SQL SERVER 2008技術內幕 T-SQL查詢(中文)》,其中有講邏輯查詢處理階段詳解。
(在網上應該容易找到的,不行的話加我qq(知道號))
如果是Oracle的話,可以查一下優化器相關。
❿ 資料庫多表查詢結果如何排序
先Union,再Order by.
select *
from t1
where 名字='王艷'
union all
select *
from t2
where 名字='王艷'
.
.
.
order by 時間