從表1,表2 …中選擇字段名,其中表1。字段=表2。字段和其他查詢條件。
SELECT a.id,a.name,a.address,a.date,b.math,b.english,b.chinese FROM tb_demo065_tel AS b,tb_demo065 AS a其中a.id=b.id
註意:在上面的代碼中,兩個表之間的關聯是以兩個表的id字段信息相同為條件建立的,但在實際開發中不應使用,最好使用主鍵和外鍵約束來實現。
第二,使用表的別名查詢多個表。
如:從TB _ demo065a,TB _ demo065 _ tel b中選擇a.id,a.name,a.address,b.math,b.english,b.chinese其中a.id = b.id,b.id =' $ _ post [text id]'。
在SQL語言中,可以通過兩種方式為表指定別名。
第壹個由關鍵字指定為,例如
從tb_demo065中選擇a.id,a.name,a.address,b.math,b.english,b.chinese作為a,tb_demo065_tel作為b其中a.id=b.id
第二種方法是直接在表名後面添加表的別名。
從tb_demo065 a,tb_demo065_tel b中選擇a.id,a.name,a.address,b.math,b.english,b.chinese其中a.id=b.id
使用表別名時需要註意幾點。
(1)別名通常是縮短的表名,用於在連接中引用表中的特定列。如果壹個連接中的多個表中存在同名的列,則列名必須由表名或表的別名限定。
(2)如果定義了表的別名,則不能再使用表名。
三個合並多個結果集
在SQL語言中,多個SELECT語句的查詢結果可以通過UNION或ALL合並輸出。這兩個關鍵字的用法如下:
UNION:使用該關鍵字可以將多個SELECT語句的查詢結果合並輸出,並可以刪除重復的行。
ALL:使用該關鍵字,可以將多個SELECT語句的查詢結果合並輸出,但不會刪除重復的行。
當使用UNION或ALL關鍵字合並多個表時,查詢結果必須具有相同的結構,並且數據類型必須兼容。另外,使用UNION時兩個表中的字段數必須相同,否則SQL語句中會提示錯誤。
e.x:SELECT id,name,pwd FROM TB _ demo 067 UNION SELECT uid,price,date FROM tb_demo067_tel
四個簡單的嵌套查詢
子查詢:子查詢是返回單個值的選擇查詢,嵌套在SELECT、INSERT、UPDATE和DELETE語句或其他查詢語句中。子查詢可以用在任何可以使用表達式的地方。
SELECT id,name,sex,date FROM TB _ demo 068 WHERE id in(SELECT id FROM TB _ demo 068 WHERE id = ' $ _ POST[test]')
內部連接:使用查詢結果作為WHERE子句的查詢條件稱為內部連接。
五個復雜的嵌套查詢
多個表之間的嵌套查詢可以通過IN中的謂詞來實現,語法格式如下:
{中的test_expression[NOT]
子查詢
}
參數說明:test_expression引用SQL表達式,子查詢包含結果集的子查詢。
多表嵌套查詢的原理:無論嵌套多少個表,表與表之間必然存在某種關系,通過WHERE子句建立這種關系來實現查詢。
六種嵌套查詢在查詢統計中的應用
實現多表查詢時,可以同時使用謂詞ANY、SOME和ALL。這些謂詞被稱為定量比較謂詞,可以與比較運算符結合使用,以判斷是否所有返回值都滿足搜索條件。壹些和任何謂詞存在,只關註是否有符合搜索條件的返回值。這兩個謂詞的意思相同,可以互換使用。所有謂詞稱為泛謂詞,它只關心是否有符合搜索要求的謂詞。
SELECT * FROM TB _ demo 069 _ people WHERE uid IN(SELECT dept id FROM TB _ demo 069 _ dept WHERE dept name = ' $ _ POST[SELECT]')
從tb_demo067中選擇a.id,a.name作為WHERE id & lt3)
& gtANY大於子查詢中的值。
& gt=ANY大於或等於子查詢中的值。
& lt=ANY小於或等於子查詢中的值。
=ANY等於子查詢中的值。
!=ANY或> ANY不等於子查詢中的值。
& gtALL大於子查詢中的所有值。
& gt=ALL大於或等於子查詢中的所有值。
& lt=ALL小於或等於子查詢中的所有值。
=ALL等於子查詢中的所有值。
!=ALL或> ALL不等於子查詢中的所有值。
七。從子查詢派生的表
在實際的項目開發過程中,經常使用從壹個相對完整的信息表中導出壹個只有幾個關鍵字段的信息表,這個目的可以通過子查詢來實現,比如
選擇people.name,people.chinese,people.math,people.english FROM (SELECT name,chinese,math,english FROM tb_demo071)作為人員
註意:子查詢應遵循以下規則:
(1)由比較運算符引入的內部子查詢只包含壹個表達式或列名,外部語句的WHERE子句中命名的列必須與內部子查詢命名的列兼容。
(2)由不可改變的比較運算符(比較運算符後沒有關鍵字ANY或ALL)引入的子查詢不包括GROUP BY或HAVING子句,除非預先確定了組或單個值。
(EXISTS引入的選擇列表壹般由*組成,不需要指定列名。
(4)子查詢不能在內部處理其結果。
使用子查詢作為表達式。
SELECT(從tb_demo071選擇AVG(中文),(從tb_demo071選擇AVG(英文),(從tb_demo071選擇AVG(數學))從tb_demo071
註意:使用子查詢時最好給列表項單獨命名,這樣可以方便用戶在使用mysql_fetch_array()函數時給列表項賦值,比如
選擇(從tb_demo071中選擇AVG(中文))為虞雯,(從tb_demo071中選擇AVG(英文))為於穎,(從tb_demo071中選擇AVG(數學))為淑雪(從tb_demo071
使用子查詢關聯數據
SELECT * FROM TB _ demo 072 _ student WHERE id =(SELECT id FROM TB _ demo 072 _ class WHERE class name = ' $ _ POST[text]')
十多張表的聯合查詢
SQL語句中的UNION可以在同壹列的不同表中顯示符合條件的數據信息。
e . x:SELECT * FROM TB _ demo 074 _學生會SELECT * FROM tb_demo074_fasten
註意:使用UNION時應註意以下兩點:
(1)在使用UNION運算符組合的語句中,所有選擇列表中表達式的數量必須相同,如列名、算術表達式和聚合函數。
(2)在每個查詢表中,對應列的數據結構必須相同。
11.對組合結果進行排序。
為了UNION的運算兼容性,所有SELECT語句都要求沒有ORDER BY語句,只有壹種情況例外,即在最後壹條SELECT語句中放置ORDER BY子句,實現結果的最終排序輸出。
e . x:SELECT * FROM TB _ demo 074 _學生會SELECT * FROM TB _ demo 074 _ faste ORDER BY id
使用UNION的條件比較苛刻,所以在使用該語句時,壹定要註意兩個表的條目數和字段類型是否相同。
十二條件聯合聲明
選擇*從TB _ demo076 _北京集團按名稱有name= '人民郵電出版社'或name = '機械工業出版社'聯合選擇*從TB _ demo076 _北京集團按名稱有name >人民郵電出版社'和name > ORDER BY id '機械工業重印社'
上面的語句應用GROUP BY grouping語句和HAVING語句實現條件聯合查詢。其實現的目的是保證‘人民郵電出版社’和‘機械工業出版社’始終處於榜單前列,然後輸出到其他出版社。
十三個簡單的內部連接查詢
SELECT filed list FROM table 1[INNER]JOIN table 2 ON table 1 . column 1 = table 2 . column 1
其中,filedlist是要顯示的字段,INNER表示表與表之間的連接方式是內部連接,Table1。列1 =表2。Column1用於表示兩個表之間的連接條件,例如:
從tb_demo065中選擇a.name、a.address、a.date、b.chinese、b.math、b.english作為內部聯接tb_demo065_tel AS b on a.id=b.id
復雜內部連接查詢
復雜的內部連接查詢是基於帶有壹些查詢條件的基本內部連接查詢,例如:
SELECT a.name,a.address,a.date,b.chinese,b.math,b.english FROM tb_demo065作為內部聯接TB _ demo 065 _ tel AS b on a . id = b . id WHERE b . id =(SELECT id FROM TB _ demo 065 WHERE TB _ demo 065 . name = ' $ _ POST[text]')
總之,實現表間關聯的本質是兩個表之間有* * *個相同的數據項或相同的數據項,通過WHERE子句或INNER JOIN … ON語句將兩個表連接起來實現查詢。
第十五,利用外連接實現多表聯合查詢
(1)左外連接(LEFT OUTER JOIN)是指表之間通過左連接(leftjoin)相互連接,也可以縮寫為LEFT JOIN。叫做基於左表的左連接,會輸出左表的所有信息,而右表的信息只輸出符合條件的信息,不符合條件的信息返回NULL。
e.x:從tb_demo065中選擇a.name,a.address,b.math,b.english作為左外連接tb_demo065_tel作為b ON a.id=b.id
(2)右外連接(RIGHT OUTER JOIN)是指表之間通過右連接(right join)相互連接,也可以縮寫為RIGHT JOIN。叫做基於右表的右連接,會輸出右表的所有信息,而左表的信息只輸出符合條件的信息,不符合條件的信息返回NULL。
E.x:從tb_demo065中選擇a.name,a.address,b.math,b.english作為右外連接tb_demo065_tel作為b ON a.id=b.id
使用IN或NOTIN關鍵字來限制範圍。
e . x:SELECT * FROM TB _ demo 083 WHERE code IN(SELECT code FROM TB _ demo 083 WHERE code BETWEEN ' $ _ POST[text 1]' AND ' $ _ POST[text 2]')
IN可以用來指定範圍內的查詢,如果需要在某個範圍外查詢,可以用NOT IN代替。
中引入的17個相關子查詢
e . x:SELECT * FROM TB _ demo 083 WHERE code IN(SELECT code FROM TB _ demo 083 WHERE code = ' $ _ POST[text]')
使用HAVING語句過濾數據包
HAVING子句用於指定組或聚合的搜索條件。HAVING通常與GROUP BY語句連用。如果SQL語句中沒有GROUP BY子句,HAVING的行為類似於WHERE子句。
e.x:SELECT name,math FROM TB _ demo 083 GROUP BY id HAVING math & gt;'95'