老司机三级_天天干天天操天天爽_女人被爽到娇喘呻吟视频_久久国产精品99久久久大便 - 亚洲日本系列

13.聯(lián)表查詢-左聯(lián)

  • • 發(fā)表于 7年前
  • • 作者 大妖怪
  • • 11954 人瀏覽
  • • 1 條評論
  • • 最后編輯時間 7年前
  • • 來自 [技 術(shù)]

原創(chuàng)聲明:本文為作者原創(chuàng),未經(jīng)允許不得轉(zhuǎn)載,經(jīng)授權(quán)轉(zhuǎn)載需注明作者和出處

今天開始講一點高級點的內(nèi)容。我們的數(shù)據(jù)庫,在生產(chǎn)環(huán)境中肯定不是只有一張表,有可能有用戶表,商品表,訂單表等等等等。這里我們有這樣一個場景,有一個班級表,班級表里有班級id,班級名稱,還有一個學生表,學生表里有學生id,學生姓名,學生性別,學號,班級id(這個主要用于將班級和學生關(guān)聯(lián)起來)。

CREATE DATABASE coupletDemo;
USE coupletDemo;
CREATE TABLE class(
    id INT NOT NULL AUTO_INCREMENT,
    name VARCHAR(10) NOT NULL,
    PRIMARY KEY(id)    
);
INSERT INTO class (name) VALUES('妖怪班');
INSERT INTO class (name) VALUES('神仙班');

CREATE TABLE student(
   id INT NOT NULL AUTO_INCREMENT,
   name VARCHAR(5) NOT NULL,
   gender VARCHAR(1) NOT NULL,
   stu_no VARCHAR(10) NOT NULL,
   class_id INT NOT NULL,
   PRIMARY KEY(id)
);
INSERT INTO student (name,gender,stu_no,class_id) VALUES('大妖怪','男','00001',1);
INSERT INTO student (name,gender,stu_no,class_id) VALUES('二妖怪','女','00002',1);
INSERT INTO student (name,gender,stu_no,class_id) VALUES('三妖怪','男','00003',1);
INSERT INTO student (name,gender,stu_no,class_id) VALUES('四妖怪','女','00004',1);
INSERT INTO student (name,gender,stu_no,class_id) VALUES('小妖怪','男','00005',1);

INSERT INTO student (name,gender,stu_no,class_id) VALUES('神仙1','男','00006',2);
INSERT INTO student (name,gender,stu_no,class_id) VALUES('神仙2','女','00007',2);
INSERT INTO student (name,gender,stu_no,class_id) VALUES('神仙3','男','00008',2);
INSERT INTO student (name,gender,stu_no,class_id) VALUES('神仙4','女','00009',2);
INSERT INTO student (name,gender,stu_no,class_id) VALUES('神仙5','男','00010',2);

運行上述SQL打開表:


在這些數(shù)據(jù)的前提下,有個需求,查詢所有學生信息以及每個學生所在的班級。這個需求可以用左聯(lián)實現(xiàn):

SELECT s.id sid, s.name sname, s.gender sgender,s.stu_no sno,c.name cname FROM student s LEFT JOIN class c ON s.class_id = c.id;


結(jié)果就是這樣。
這條sql看起來這么長是有點恐怖,其實也很簡單,左聯(lián)的基本語法是:

  • SELECT 要查詢的內(nèi)容 FROM 表1 LEFT JOIN 表2 ON 聯(lián)表條件。

在上述的表結(jié)構(gòu)中設計中,我們可以把student表中的class_i當做是一個外鍵(當然,這并不是mysql上真正的外鍵),這個字段主要是用來存放用戶所在班級class的id,這樣就相當于將班級和學生關(guān)聯(lián)起來了,這種表與表之間關(guān)系叫做一對多,班級是一的一方,學生是多的一方。

通俗來講,聯(lián)表就是把兩張表通過特定的字段進行關(guān)聯(lián)然后合并成一張大表。其大概過程是這樣:

上圖僅顯示了妖怪班的查詢結(jié)果,其查詢語句應該是:
SELECT c.name, s.name FROM class c LEFT JOIN student s ON c.id = s.class_id WHERE c.name=’妖怪班’;

  • 左聯(lián)查詢的定義:首先取出表1(LEFT JOIN左邊的表格)中所有數(shù)據(jù)和表2(LEFT JOIN右邊的表格)中與表1所取數(shù)據(jù)相對應的所有數(shù)據(jù),合成新的表格,沒有數(shù)據(jù)則顯示NULL。表1的數(shù)據(jù)為主,并顯示在合成表格的左邊。
  • 如上面合成表,左聯(lián)是可以帶上條件查詢的,更多例子比如:
    SELECT s.id sid, s.name sname, s.gender sgender,s.stu_no sno,c.name cname FROM student s LEFT JOIN class c ON s.class_id = c.id WHERE s.gender = '男';
    
    SELECT s.id sid, s.name sname, s.gender sgender,s.stu_no sno,c.name cname FROM student s LEFT JOIN class c ON s.class_id = c.id WHERE s.gender = '男' AND c.name = '神仙班';
    
    當然也可以在此用上前面的排序、分組,以及以后要學到的分頁等等。
分享到:
1條評論
Ctrl+Enter
作者

大妖怪

大妖怪

APP:1 帖子:76 回復:200 積分:7517

已加入社區(qū)[3226]天

夢里巷口,可有你倚門回首

作者詳情》
Top