四、SQL之單表和多表查詢
阿新 • • 發佈:2020-09-01
一、單表查詢
-- 萬用字元*,查詢整個表 SELECT * FROM `test_zjx`; -- 過濾條件 SELECT * FROM `test_zjx` WHERE `name`='zhangjx3'; -- 條件 and 且 SELECT * FROM `test_zjx` WHERE `name`='zhangjx3' AND sex=1; -- 條件 or 或 SELECT * FROM `test_zjx` WHERE `name`='zhangjx3' OR id=9; -- 條件 and 和 or 同時存在 SELECT * FROM `test_zjx` WHERE`name`='zhangjx3' AND sex=1 OR id=9; -- 不等於 != SELECT * FROM `test_zjx` WHERE sex!=2; SELECT * FROM `test_zjx` WHERE sex<>2;
二、多表查詢
1)兩張表查詢
注意:不加where過濾條件,就是test_zjx表的5條資訊,test_info表的5條資訊的笛卡兒積。一共25條
卡爾乘積是指在數學中,兩個集合X和Y的笛卡爾積(Cartesian product),又稱直積,表示為X×Y,第一個物件是X的成員而第二個物件是Y的所有可能有序對2)外來鍵
多表關聯使用:外來鍵
test_zjx和test_info兩張表,test_zjx的主鍵是id,test_info的外來鍵是memberID。如下是如何設定外來鍵:
3)多張表查詢
查詢某個老師帶的是哪個班?
select * from S,SC,C where S.S# =SC.S# andSC.C# = C.C#
三、連線查詢
1)內連線----》INNER JOIN
select * from member a,info b where a.id = b.memberID;------》是隱性內連線
改成INNER JOIN:兩個表之間加上INNER JOIN ,where 改為on
--內連線INNER JOIN select * from member a INNER JOIN info b on a.id = b.memberID and `address`='北京';
2)左外連線-----LEFT JOIN
左外連線以左表為主表,主表的所有資料都會顯示,右表為從表,從表只有匹配的資料才會顯示
語法:select 欄位1,欄位2 from 表1 LEFT JOIN 表2 on 條件
A、查詢所有欄位*:
--左外連線 select * from member a LEFT JOIN info b on a.id =b.memberID and `address` = '北京';
B、查詢部分欄位
select a.id,a.name,a.address,b.memberID,b.id from member a LEFT JOIN info b on a.id =b.memberID and `address` = '北京';
3)右外連線-----RIGHT JOIN
與左連線相反,右外連線以坐表為主表,主表的所有資料都會顯示,左表為從表,從表只有匹配的資料才會顯示
--右外連線 select a.id,a.name,a.address,b.memberID,b.id from member a RIGHT JOIN info b on a.id =b.memberID and `address` = '北京';
四、查詢結果排序(order by)
1)升序:asc
--排序 預設時asc,可以不寫 select * from member a LEFT JOIN info b on a.id =b.memberID and `address` = '北京' order by a.id asc;
2) 降序:desc
-- 降序 desc,不可省略
-- 按照前後順序:a.id升序排序完成,有相同序號的,會依據b.id降序(a.id排序的優先順序在前面) select * from member a LEFT JOIN info b on a.id =b.memberID and `address` = '北京' order by a.id asc,b.id desc;