mysql連接查詢詳解
1.連接查詢
作用:當查詢結果的列來源于多張表時,需要將多張表連接成一個大的數據集,再選擇合適的列返回
2、連接類型
內連接
定義:
內連接查詢:查詢結果為兩個表匹配到的數據
語法1:
select * from 表1 inner join 表2 on 表1.列 = 表2.列
例:查詢學生信息及學生成績
語法2:
?select * from 表1,表2 on 表1.列 = 表2.列
注:通常不使用此語法,效率較低
3個表連接
-- 查詢學生信息及學生的課程對應的成績
顯示指定列
左連接
定義:
查詢的結果為兩個表匹配到的數據加左表特有的數據,對于右表中不存在的數據(匹配不到)使用null填充
語法:
select * from 表1 left join 表2 on 表1 .列 = 表2.列
例:
查詢所有學生的成績,包括沒有成績的學生
例:
查詢所有學生的成績,包括沒有成績的學生,需要顯示課程名
右連接
定義:
右連接查詢:查詢結果為兩個表匹配到的數據加右表特有的數據,對于左邊中不存在的數據使用null填充
語法:
select * from 表1 right join 表2 on 表1 .列 = 表2.列
例:查詢所有學生的成績,包括沒有成績的學生
例:
查詢所有學生的成績,包括沒有成績的學生,需要顯示課程名
自關聯(lián)
定義
連接查詢的一種應用,對同一個表查詢多次,把查詢多次得到的結果連接組成新的結果
主要應用場景:數據有上下級關系,并且存于同一個表中
例:查詢河南省的所有城市
例:查詢鄭州市的所有區(qū)縣
例:查詢河南省所有區(qū)縣
子查詢
定義
在一個select 語句中,嵌入另外一個select語句,那么嵌入的那個select語句稱之為子查詢語句
主查詢
外城的select稱之為主查詢語句
主查詢和子查詢的關系
子查詢是嵌入到主查詢中子查詢是輔助主查詢的,要么充當條件,要么充當數據源子查詢是可以獨立存在的語句是一條轉正的select語句
子查詢充當條件
以下例子中子查詢返回結果只有一個值(一行一列),這種稱之為標量子查詢
例1:查詢大于平均年齡的學生
-- 查詢班里學生的平均年齡 SELECT AVG(age) FROM students --21.5833 -- 查詢大于平均年齡的學生 SELECT * from students where age > 21.5833 SELECT * FROM students where age >(SELECT AVG(age) FROM students);
以下例子返回數據結果是一列數據(一列多行),這種稱之為列子查詢
例: 查詢18歲學生的成績,要求顯示成績
-- 學生表中查詢18歲學生的學號 SELECT studentNo from students WHERE age = 18 -- 成績表中根據學號查詢成績 SELECT * FROM scores where studentNo in ('002','006' ) SELECT * FROM scores where studentNo in (SELECT studentNo from students WHERE age = 18 )
以下例子查詢的結果是一行(一行多列),這種稱之為行子查詢
例:查詢和王昭君同班、同齡的學生信息
SELECT class,age from students where name = '王昭君' SELECT * from students where class = '1班' and age = 20 SELECT * from students where (class,age) = ('1班' , '20') SELECT * from students where (class,age) = (SELECT class,age from students where name = '王昭君')
子查詢充當數據源
以下例子子查詢返回的結果是多行多列(相當于一個表),這種稱之為表級子查詢;
例:查詢數據庫和系統(tǒng)測試的課程成績
子查詢中特定關鍵字使用
in范圍
格式:主查詢where條件in(列子查詢)
any|some任意一個
格式:主查詢where 列 = any(列子查詢)
在條件查詢的結果中匹配任意一個幾個,等價于in
all
格式:主查詢where列 = all(列子查詢):等價于里面所有
格式:主查詢where列<>all(列子查詢):不等于其中所有
到此這篇關于mysql連接查詢的文章就介紹到這了,更多相關mysql連接查詢內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
mysql中使用sql命令將時間戳解析成datetime類型存入
這篇文章主要介紹了mysql中使用sql命令將時間戳解析成datetime類型存入,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11mysql 5.7.20常用下載、安裝和配置方法及簡單操作技巧(解壓版免安裝)
這篇文章主要介紹了mysql 5.7.20常用下載、安裝和配置方法及簡單操作技巧(解壓版免安裝)的相關資料,需要的朋友可以參考下2017-11-11spark rdd轉dataframe 寫入mysql的實例講解
今天小編就為大家分享一篇spark rdd轉dataframe 寫入mysql的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06