需求 查詢出所有的寫生,且要顯示學生所在班級的資訊
1.連線查詢 :將多張表 進行記錄的連線(按照某個指定的條件,進行資料的拼接)
最終結果 記錄數可能有變化,字段數一定會增加(至少兩張表合併)
連線諮詢的意義,在使用者檢視資料的時候,需要顯示的資料來自多張表
連線查詢:join
使用方式 :左表 join 右表
其中 左表為在join 關鍵字左邊的表,
右表為在join關鍵字右邊的表
三張表的連線查詢
2.連線查詢在sql中分成四類
內連線 外連線 自然連線 交叉連線
--1.交叉連線 cross join
從一張表中,迴圈取出每一條記錄,每條記錄都去另外一張表中進行匹配:
匹配一定保留(沒有條件匹配),而連線本身欄位就會增加(保留),最終形成結果為笛卡爾集
1.select * from my_stu cross join king_class ;
其中 select * from my_stu;
select * from king_class;
sososo
select * from my_stu cross join king_class;
----->等價於 select
* from my_stu,king_class;
實際開發中cross join 並沒有什麼卵用,其存在價值在於 保證連線這種結構的完整性
--2.內連線 inner join 其中 inner 關鍵字可以省略
從左表中取出每一條記錄,去右表中與所有的記錄進行匹配(匹配必須是某個條件在左表中和在右表中相同)才會保留結果,否則不保留;
基本語法
左表 [inner] join 右表 on 條件 and 條件and 條件。。。。。
inner join 不加 限制語句 on。。。。。。。時,結果相當於乙個笛卡爾集
其中on 表示連線條件,條件字段就是代表相同的業務含義
select * from my_stu inner join stu_info;
inner join 新增 on 。。。。。條件
select * from my_stu inner join stu_info on my_stu.id = stu_info.id
其中某欄位 為兩張表中特有的,其表名可以省略
例如*****>
select * from my_stu inner join stu_info on class_id = stu_info.id
字段別名以及表別名的使用:
在查詢資料的時候,不同表有同名字段,這個時候需要加上表名進行區分
條件的新增2
更多篩選條件的新增
更多條件的新增
連線查詢時的字段別名和表別名的使用
select s.* ,c.name as c_name,c.id from my_stu as s inner join stu_info as c on s.class_id = c.id;
select s.* ,c.name as c_name,c.id from -- 字段別名
my_stu as s inner join stu_info as c -- 表別名
on s.class_id = c.id;
這個例子也說明了 select 。。。。。。。 from 是基於 後面一部分存在的 因為後半部分後執行,才在select中可以訪問 s.*
on 和 where
內連線 還可以使用 where 代替 on 關鍵字 但是(on 的效率高於 where)
--3.外連線
外連線 outer join 以某張表為主,取出裡面的所有記錄,每條與另外一張表進行連線,無論能不能匹配上條件,最終都會保留:能匹配,正確保留,不能匹配,其他表的字段都置空null
外連線分為兩種:是以某張表為主:有主表
left join 左外連線(左連線),以左表為主表
right join 右外連線(右連線),以右表為主表
基本語法:
左表 left / right join 右表 on 條件(如: 左表.欄位 = 右表.欄位)且 外連線必須有條件
左連線左表為主表 最終記錄數至少不少於左表已有的記錄數
右連線右表為主表 最終記錄數至少不少於右表已有的記錄數
雖然左連線和右連線有主表差異,但是顯示的結果,左表的資料在左邊,右表的資料在右邊
左連線和右連線可以互轉
--4.自然連線 natural join
既自動匹配連線條件:系統以欄位名作為匹配模式(同名字段就作為條件,多個同名字段都作為條件)
自然連線分為:
自然內連線
左表 natural join 右表;
自然內連線
自然連線自動使用同名字段作為連線條件,連線之後會合併同名字段
自然外連線
左表 natural left/right join 右表
select * from my_stu natural right join stu_info;
其實 內連線和外連線都可以模擬自然連線;使用同名字段 ,合併字段
左表 left / right inner join 右表 using (欄位名);--同名字段作為連線條件:自動合併條件
外連線模擬自然外連線
利用using 模擬自然外連線
MySQL查詢 1 基本查詢
建立資料庫 create database python test 1 charset utf8 使用資料庫 use python test 1 students表 create table students id int unsigned primary key auto increment no...
MySQL 查詢語句 1
一 建立資料庫 1 create database test 建立資料庫test 2 show databases 檢視目前資料庫中可用的資料庫,缺省會有系統資料庫 3 use test 將test設定為目前操作的資料庫 4 show tables 顯示乙個資料庫中的所有表 5 show colum...
mysql查詢優化(1)
參考 優化查詢語句時,主要考慮以下幾點 a and b and c or a and b and c and d a and b and c or a and b and c and d aand b c and a 5 b 5 and b c and a 5 b 5 and b 5 or b 6 ...