1.數據庫的核心就是關聯,多表查詢首先就是要抓住各個表之間的關聯部分,兩個表聯繫起來後,再寫條件,寫查詢什麼就很簡單了
2.and 和 or 之間的關係要搞清楚。
3.基本表達式記住
- 一:單表查詢
-- 1:查詢單個表的全部數據,顯示全部字段
--
select * from 表名;
-- select * from member; -- *表明全部字段
-- 2:查詢單個表的全部數據庫,顯示部分字段
--
select <字段1,字段2,...> from < 表名 >;
-- 查詢全部的會員信息,顯示用戶名,手機號,可用餘額
-- select RegName,MobilePhone,LeaveAmount from member;
-- 3: 查詢部分數據-- where 字句
--
select <字段1,字段2,...> from < 表名 > where 條件表達式1 and/or 條件表達式2...;
-- 條件表達式1:篩選條件
-- = > < >= <= != == :比較表達式
-- 查詢id爲3的會員信息
-- select * from member where id=3;
-- 查詢id爲3,用戶名爲大樹的信息
--
and :而且,須要知足其中全部條件
-- select * from member where id=3 and RegName='大樹';
--
or:或者,只要知足多個條件中一個條件便可
-- select * from member where id=3 or RegName='大樹';
-- select * from member where id>10;
--
不等於
-- select * from member where id<>10;
-- select * from member where id!=10;.
-- 二:多表查詢
對於不一樣類型的信息放在一個表的缺點:
1.字段過多
2.難以維護
3.表數據龐大
4.數據冗餘,重複數據多
既然不一樣類型的數據放在了不一樣的表,那本來有聯繫的數據怎麼保持原來的聯繫呢
設計表的時候兩個表之間維持一個關聯便可
-- Oracle、MySQL、SQL Server...關係數據庫:表與表存在關係、存在聯繫
-- 笛卡爾積、叉乘 --》結果集(虛表、緩存表)->存在無效數據的
-- select * from member,invest; -- 5964
-- select * from member; -- 42
-- select * from invest; -- 142
-- 幼兒園兩個班,交朋友(條件握手)
-- A B
-- 10 20
-- --
只有什麼樣的數據是有效的?? 經過關聯條件:member.Id=invest.MemberID
-- select * from member,invest where member.Id=invest.MemberID;
-- 查詢投資金額大於10000的信息,顯示用戶名、手機號、投資金額、投資時間 -- invest member
/*
select member.RegName,member.MobilePhone,invest.Amount,invest.CreateTime
from member,invest
where member.id = invest.MemberID -- 條件1:關聯條件
and invest.Amount>10000;-- 條件2
*/
--
別名
/*
select t1.RegName,t1.MobilePhone,t2.Amount,t2.CreateTime
from member as t1,invest as t2
where t1.id = t2.MemberID
and t2.Amount>10000;
*/
/*
select t1.RegName,t1.MobilePhone,t2.Amount,t2.CreateTime
from member t1,invest t2
where t1.id = t2.MemberID
and t2.Amount>10000;
*/
/*
select t1.RegName as 用戶名,t1.MobilePhone as 手機號碼,
t2.Amount as 投資金額 ,t2.CreateTime as 投資時間
from member as t1,invest as t2
where t1.id = t2.MemberID
and t2.Amount>10000;
*/
-- 四:排序
-- 查詢投資金額大於10000的信息,顯示用戶名、手機號、投資金額、投資時間 ,按投資金額降序、升序排序
-- 降序:
DESC、升序: ASC(默認爲ASC)
select t1.Id as 用戶id,t1.RegName as 用戶名,t1.MobilePhone as 手機號碼,
t2.Amount as 投資金額 ,t2.CreateTime as 投資時間
from member as t1,invest as t2
where t1.id = t2.MemberID
and t2.Amount>10000
order by 投資金額 DESC;
左鏈接右鏈接
![](http://static.javashuo.com/static/loading.gif)
、select * from girls t1 inner join boys t2 on t1.matchNum = t2.matchNum;
select * from girls t1 join boys t2 on t1.matchNum = t2.matchNum;
select - from girls cross join boys //笛卡兒積 叉乘
鏈接兩個語句鏈接用union,且字段名要相同才能夠顯示 因此要取別名
select t1.id,t1.girjNum num from girls t1 left join boys t2 on t1.matchNum = t2.matchNum where t2.id is null
union
select t2.id,t2.boyNum num from girls t1 right join boys t2 on t1.matchNum = t2.matchNum where t1.id is null;
子查詢
子查詢概念:一個select語句嵌套在另外一個select 語句中
子查詢也能夠稱爲內部查詢,而包含子查詢的語句又成爲外部查詢或主查詢
子查詢可分類:
非相關子查詢 :獨立於外部查詢,子查詢只執行一次,執行完將結果傳遞給外部查詢,子查詢能夠單獨運行
相關子查詢:依賴於外部查詢的數據,外部查詢每執行一次,子查詢就執行一次
子查詢自身能夠包含一個或多個子查詢 一個查詢語句中能夠嵌套任意數量的子查詢
比較大小
max是縱向比較,GREATEST是橫向比較
Greatest(1,2,3)