mysql 查詢10 MySQL 10連線查詢

2021-10-19 18:32:06 字數 2648 閱讀 7238

需求 查詢出所有的寫生,且要顯示學生所在班級的資訊

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 ...