1. 程式人生 > >MySQL查詢基礎操作

MySQL查詢基礎操作

今天這兩天學習了一寫MySql的基礎查詢在這裡記載一下。

distinct的用法

首先需要注意,distinct只能用在查詢的開頭:
例如:select distinct sname from student
如果需要兩個條件來去重那麼兩個條件直接跟在distinct之後就可以了
例如:select distinct sname,sno from student
在這裡插入圖片描述

還有一種情況:當你需要查詢給一個欄位去重,同時還要保留其他欄位作為查詢結果的時候就不能把,欄位放在distinct之前
例如:select sname,distinct ssex from student
這樣就是一個錯誤的用法,
那正確的用法應該是怎麼樣的呢:
select count(*) from (
select count(a.buyer) as b from (
select distinct buyer,paytime from trade where shopname=‘美寶蓮’ and status=‘finished’ and paytime BETWEEN ‘2018-03-01’ and ‘2018-03-31’ )
a group by a.buyer)
as m where m.b>1;
解決問題的基本思路: 首先去重,去除消費者與日期相同的資料,值保留一條;第二,對每一個消費者的購買次數計數,第三、找到計數大於1的,就是復購的人,對復購的人進行計數;

using的用法

using 一般配合join使用,使用join的時候我們一般要指定用什麼欄位來join,
例如:select * from student a join score b on a.sno=b.sno
using的作用和on類似:
例如:select * from student a join score b using(sno)
這裡需要注意的是,使用using的時候要加上括號,類似與函式,而且比喻兩個表中的欄位名完全一致才能使用。

isnull的用法

isnull通常用在:查詢不包含某個條件的場景時使用;
用法是 isnull() 括號裡面寫上條件,

exists的用法

exists的用法與in類似,當你要依據另一個表的查詢結果作為查詢條件時,通常使用這個方法:
例如:查詢所有未講課的教師的Tname和Depart.
這時候就可以使用:select tname,depart from teacher a where not exists
(select * from course b where a.tno=b.tno);
exists後面的返回值,會作為一個布林值,存在的時候就返回True,之前的查詢就會生效;

join,leftioin,rightjoin 的用法

在這裡插入圖片描述

在這裡插入圖片描述
兩張表,分別時學生名單以及分數表;
join :直接把兩個表中共有的元素連線起來;相當於求交集;
leftjoin:左連線,依據左邊的進行連線,左邊的表有幾行就會返回來幾行;
right join :依據右邊的表連線,右邊的表有幾行就連線幾行,右邊有而左邊沒有的,可以為空;