SQL語句--關(guān)聯(lián)查詢,分類查詢

1.GROUP BY 語句

GROUP BY 語句用于結(jié)合合計(jì)函數(shù),根據(jù)一個(gè)或多個(gè)列對結(jié)果集進(jìn)行分組。

SQL GROUP BY 語法

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name

SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer

2.HAVING 子句

在 SQL 中增加 HAVING 子句原因是谁帕,WHERE 關(guān)鍵字無法與合計(jì)函數(shù)一起使用。

SQL HAVING 語法

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value

SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer
HAVING SUM(OrderPrice)<2000

3.不同的 SQL JOIN

left join == left outer join,都是取并集
1.我們一般關(guān)聯(lián)查詢的時(shí)候冯袍,習(xí)慣使用left join匈挖,其實(shí)這種方式是不可取的,
因?yàn)槲覀兤鋵?shí)取交集即可,應(yīng)該使用inner join
注意康愤,不需要使用left或者right inner join,因?yàn)槭遣⒓苎笥覂蛇厸]有權(quán)重。都是平級征冷。
2.如果兩個(gè)或者多個(gè)表都有自己的條件择膝,我們應(yīng)該將條件寫入查詢條件中,越精確越好

在我們繼續(xù)講解實(shí)例之前检激,我們先列出您可以使用的不同的 SQL JOIN 類型:
INNER JOIN:如果表中有至少一個(gè)匹配肴捉,則返回行
LEFT JOIN:即使右表中沒有匹配,也從左表返回所有的行
RIGHT JOIN:即使左表中沒有匹配叔收,也從右表返回所有的行
FULL JOIN:只要其中一個(gè)表中存在匹配齿穗,則返回行

分頁中取數(shù)據(jù)

1,select * from `day_vists` limit 3 offset 2
larvel語句:DB::table('day_vists')->skip(2)->take(3)->get();
參數(shù)---->skip($start)->take($pagenum)
得到的是3,4饺律,5條數(shù)據(jù)窃页。相當(dāng)于跳過兩條,取三條。
這種取發(fā)比較麻煩 需要通過每次傳過來的page來計(jì)算偏移量脖卖。

(2)通過DB類的forPage方法獲取數(shù)據(jù)
select * from `day_vists` limit 3 offset 3
DB::table('day_vists')->forPage(2, 3)->get();
參數(shù)---forPage($nowPage, $pageNum)
得到的是4乒省,5,6條數(shù)據(jù)畦木,相當(dāng)于現(xiàn)在在第二頁作儿,每頁3條數(shù)據(jù)
這種方法比較便捷直接傳一個(gè)當(dāng)前頁和具體每頁多少條數(shù)據(jù)就行了,


分頁類的使用
/*
 * 每次分頁請求過來的參數(shù)有
 * totalPage //總頁數(shù)
 * nowPage 當(dāng)前頁數(shù)
 */
public function index(Request $request)
{

    $request = $request->all();
    $nowPage = empty($request['nowPage'])?1: $request['nowPage'] ;    //當(dāng)前頁是變化的
    $pageNum = 2;
    $datas = DB::table('day_vists')->forPage($nowPage,$pageNum)->get();
//        dd($datas);
    $count = \DB::table('day_vists')->count();
    $countPage = ceil($count / $pageNum);    //總頁數(shù)是固定的
    $pages = $this->custompage->getSelfPageView($nowPage, $countPage, '/test', '');
    return view('welcome',compact('pages','datas'));

}

3.關(guān)聯(lián)查詢的使用--不同的 JOIN

left join == left outer join,都是取并集
1.我們一般關(guān)聯(lián)查詢的時(shí)候馋劈,習(xí)慣使用left,其實(shí)這種方式是不可取的,
因?yàn)槲覀兤鋵?shí)取交集即可晾嘶,應(yīng)該使用left inner join
2.如果兩個(gè)或者多個(gè)表都有自己的條件妓雾,我們應(yīng)該將條件寫入條件中

INNER JOIN:如果表中有至少一個(gè)匹配,則返回行
LEFT JOIN:即使右表中沒有匹配垒迂,也從左表返回所有的行
RIGHT JOIN:即使左表中沒有匹配械姻,也從右表返回所有的行
FULL JOIN:只要其中一個(gè)表中存在匹配,則返回行

對于多表查詢机断,我們一般會使用關(guān)聯(lián)查詢楷拳,但是那種方式效率低
以下這種方式是,取出數(shù)據(jù)吏奸,然后遍歷一次欢揖,根據(jù)取到的web_id去找數(shù)據(jù)里面的結(jié)果。然后拼接成一個(gè)新的數(shù)據(jù)即可

    public function getAlltestInfo($nowPage,$pageNum)
    {
//        取出test_info的數(shù)據(jù)
        $datas = DB::table('test_info')->forPage($nowPage,$pageNum)->orderBy('id','desc')->get();
        $row = array();
        foreach ($datas as $val){
//            將取到的數(shù)據(jù)便利可以的到具體的id   根據(jù)id去相應(yīng)的數(shù)據(jù)表里面查出自己想要的數(shù)據(jù)
            $game = DB::table('web_game')->where('id',$val->site_id)->first();
            $site = DB::table('web_site')->where('id',$val->site_id)->first();
//或者可以 $game_name = DB::table('web_game')->where('id',$val->site_id)->value('name');
// $val->game_id = $game_name;  //把test_info里面的game_id值重新賦值
//            把需要的字段值奋蔚,賦給原數(shù)據(jù)里面一個(gè)新的自定義變量
            $val->site_name = $site->name;
            $val->game_name = $game->name;
            $row[] = $val;
//            此時(shí)的$row 就是原數(shù)組便利后  新添加了兩個(gè)字段的新數(shù)據(jù)
        }
        return $row;
    }

// 關(guān)聯(lián)查詢一般這樣
 \DB::table('kehuanli as a')
                ->leftJoin('kehuanli_type as b','a.type_id','=','b.type_id')
                ->select('b.type_name','a.title','a.content','a.image')
                ->orderBy('a.id','desc')
                ->take(4)
                ->get();
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末她混,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子泊碑,更是在濱河造成了極大的恐慌坤按,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件馒过,死亡現(xiàn)場離奇詭異臭脓,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)腹忽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進(jìn)店門来累,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人窘奏,你說我怎么就攤上這事佃扼。” “怎么了蔼夜?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵兼耀,是天一觀的道長。 經(jīng)常有香客問我,道長瘤运,這世上最難降的妖魔是什么窍霞? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮拯坟,結(jié)果婚禮上但金,老公的妹妹穿的比我還像新娘。我一直安慰自己郁季,他們只是感情好冷溃,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著梦裂,像睡著了一般似枕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上年柠,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天凿歼,我揣著相機(jī)與錄音,去河邊找鬼冗恨。 笑死答憔,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的掀抹。 我是一名探鬼主播虐拓,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼傲武!你這毒婦竟也來了侯嘀?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤谱轨,失蹤者是張志新(化名)和其女友劉穎戒幔,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體土童,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡诗茎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了献汗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片敢订。...
    茶點(diǎn)故事閱讀 39,932評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖罢吃,靈堂內(nèi)的尸體忽然破棺而出楚午,到底是詐尸還是另有隱情,我是刑警寧澤尿招,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布矾柜,位于F島的核電站阱驾,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏怪蔑。R本人自食惡果不足惜里覆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望缆瓣。 院中可真熱鬧喧枷,春花似錦、人聲如沸弓坞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽渡冻。三九已至戚扳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間菩帝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工茬腿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留呼奢,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓切平,卻偏偏與公主長得像握础,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子悴品,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容

  • MySQL技術(shù)內(nèi)幕:SQL編程 姜承堯 第1章 SQL編程 >> B是由MySQL創(chuàng)始人之一Monty分支的一個(gè)版...
    沉默劍士閱讀 2,428評論 0 3
  • 50個(gè)常用的sql語句Student(S#,Sname,Sage,Ssex) 學(xué)生表Course(C#,Cname...
    哈哈海閱讀 1,231評論 0 7
  • SQL與MySQL簡介 數(shù)據(jù)庫基礎(chǔ) 從SQL的角度來看禀综,數(shù)據(jù)庫就是一個(gè)以某種有組織的方式存儲的數(shù)據(jù)集合。我們可以采...
    heming閱讀 3,080評論 1 8
  • 健康管理師是2005年10月勞動和社會保障部第四批正式發(fā)布的11個(gè)新職業(yè)之一苔严。2005年12月定枷,勞動和社會保障部...
    35f0730cab76閱讀 369評論 0 0
  • 快速排序采用分治法的一個(gè)非常典型的應(yīng)用 算法思想 快速排序使用分治法策略來把一個(gè)序列分為兩個(gè)子序列,其中一部分的所...
    小m_up閱讀 491評論 0 2