6_mysql查詢之from子句

專門的關(guān)系運算符
  1. 選擇 σ
    選擇(對進行操作) 它是將數(shù)據(jù)表符合條件的一行或多行記錄提取出來
    例如:查詢學生表'IS'系的全體學生
  2. 投影 Π
    投影(對進行操作) 它從數(shù)據(jù)表中選出若干列組成新的關(guān)系
    例如:查詢學生表中都有哪些系牵舱,即查詢關(guān)系student上所在系屬性上的投影
    補充:投影過后锹引,會自動避免重復行
  3. 連接 ??
    連接join 它是從兩個關(guān)系的笛卡爾積中選取屬性間滿足一定條件的元組
    "這里元組通俗講就是 一條記錄击罪、一行數(shù)據(jù)"
關(guān)系R和關(guān)系S
  • 等值連接


    等值連接
  • 自然連接
    一般的連接操作是從行的角度進行運算,但自然連接還需要取消重復列峡懈,因而自然連接是從行和列的角度進行運算。
    自然連接
  • 外連接|左外連接|右外連接
    在自然連接中被舍棄的元組稱作"懸浮元組"与斤,如果把懸浮元組保存在結(jié)果關(guān)系中肪康,而在其它屬性上填空值(Null),此連接稱作外連接撩穿;如果只保留左邊關(guān)系R中的懸浮元組叫做左外連接磷支;如果只保留右邊關(guān)系S中的懸浮元組叫做右外連接


    外連接|左外連接|右外連接
  1. 除 ÷
    一般使用象集來定義除法。
    例如:查詢至少選修1號課程和3號課程的學生學號食寡。

FROM子句
  1. 引用一個表
    方式一:
    使用USE語句讓一個數(shù)據(jù)庫成為當前數(shù)據(jù)庫齐唆,在這種情況下,如果在FROM子句中指定表名冻河,則該表應(yīng)該屬于當前數(shù)據(jù)庫
    方式二:
    指定的時候在表名前帶上表所屬數(shù)據(jù)庫的名字
    例如 假設(shè)當前數(shù)據(jù)庫是db1箍邮,現(xiàn)在要顯示數(shù)據(jù)庫db2里的表tb的內(nèi)容
    SELECT * FROM db2.tb;
  2. 多表連接
    如果要在不同的表中查詢數(shù)據(jù),則必須在from子句中指定多個表叨叙,這時就要使用到連接锭弊。將不同列的數(shù)據(jù)組合到一個表中叫做表的連接。

(1) 全連接
-- 將各個表用逗號分隔擂错,就指定了一個全連接味滞;
-- FROM子句產(chǎn)生的中間結(jié)果是一個新表,新表是每個表的每行都與其他表中的每行交叉以產(chǎn)生所有可能的組合,列包含了所有表中出現(xiàn)的列剑鞍,也就是笛卡兒積昨凡;
--這種連接方式潛在的會產(chǎn)生數(shù)量龐大的行,因為可能得到的行是每個表行數(shù)之積蚁署;
--這種情況我們通常會使用where子句設(shè)定條件將結(jié)果集減少為易于管理的大小便脊,這樣的連接即為等值連接
舉例:查找學生選修了哪些課程 這里通過成績表和課程表連接實現(xiàn)
select distinct course.Cno,course.Cname from score,course where score.Cno = course.Cno;

mysql> select distinct course.Cno,course.Cname from score,course where score.Cno = course.Cno;
+-----+-----------------+
| Cno | Cname           |
+-----+-----------------+
| 001 | 數(shù)學分析        |
| 003 | 微機原理        |
| 004 | 數(shù)據(jù)結(jié)構(gòu)        |
| 005 | 操作系統(tǒng)        |
| 006 | 數(shù)據(jù)庫原理      |
| 008 | 程序設(shè)計        |
+-----+-----------------+
6 rows in set (0.00 sec)

mysql> select Cno,Cname from course;
+-----+-----------------+
| Cno | Cname           |
+-----+-----------------+
| 001 | 數(shù)學分析        |
| 002 | 普通物理        |
| 003 | 微機原理        |
| 004 | 數(shù)據(jù)結(jié)構(gòu)        |
| 005 | 操作系統(tǒng)        |
| 006 | 數(shù)據(jù)庫原理      |
| 007 | 數(shù)據(jù)庫設(shè)計      |
| 008 | 程序設(shè)計        |
+-----+-----------------+
8 rows in set (0.00 sec)

(2) join連接
使用join關(guān)鍵字進行連接光戈,主要分為三種哪痰。

  • 內(nèi)連接 inner
    -- 指定了INNER關(guān)鍵字的連接是內(nèi)連接
    -- 在上面的全連接中,F(xiàn)ROM子句中產(chǎn)生的中間結(jié)果是兩個表的笛卡兒積久妆,然后再通過where子句進行限制晌杰。內(nèi)連接中FROM子句產(chǎn)生的中間結(jié)果,是應(yīng)用了ON條件后的笛卡兒積筷弦。
    -- 內(nèi)連接是系統(tǒng)默認的 可以省略inner關(guān)鍵字肋演,on條件主要用來連接表,其它不屬于連接表的條件都可使用where子句來指定
    select distinct course.Cno,course.Cname from score,course where score.Cno = course.Cno;
    等同于
    select distinct course.Cno,course.Cname from score inner join course on score.Cno = course.Cno;

舉例:
例子一 (on連接表,where指定其它)用FROM子句的JOIN關(guān)鍵字表達下列查詢:查找選修了206課程且成績在80分以上的學生姓名及成績

select 姓名,成績
from xs join xs_kc on xs.學號 = xs_kc.學號 
where 課程號 = '206' and 成績>=80;

例子二 (內(nèi)連接用于多個表的連接) 查找選修了“計算機基礎(chǔ)”課程且成績在80分以上的學生學號烂琴、姓名惋啃、課程名及成績

select xs.學號, 姓名, 課程名, 成績
from xs join xs_kc on xs.學號 = xs_kc.學號 
join kc on xs_kc.課程號 = kc.課程號
where 課程名 = '計算機基礎(chǔ)' and 成績>=80;

例子三 (自連接) 查找xscj數(shù)據(jù)庫中課程不同、成績相同的學生的學號监右、課程號和成績

# 使用自連接的時候需要為表指定兩個別名边灭,且對所有列的引用均要用別名進行限定
select a.學號,a.課程號,b.課程號,a.成績
from xs_kc as a join xs_kc as b    
on a.成績=b.成績 and a.學號=b.學號 and a.課程號!=b.課程號;

例子四 (using子句) using(column_list) column_list為兩表中相同的列名
select distinct course.Cno,course.Cname from score inner join course on score.Cno = course.Cno;
等同于
select distinct course.Cno,course.Cname from score join course using (CNO);

  • 外連接 outer
    指定了OUTER關(guān)鍵字的連接為外連接,OUTER關(guān)鍵字可以省略健盒。
    注意:外連接只能對兩個表進行H奘荨!?垩ⅰ惰帽!
    外連接包括:
    ① 左外連接(LEFT OUTER JOIN):結(jié)果表中除了匹配行外,還包括左表有的但右表中不匹配的行父虑,對于這樣的行该酗,從右表被選擇的列設(shè)置為NULL。
    ② 右外連接(RIGHT OUTER JOIN):結(jié)果表中除了匹配行外士嚎,還包括右表有的但左表中不匹配的行呜魄,對于這樣的行,從左表被選擇的列設(shè)置為NULL莱衩。
    ③ 自然連接(NATURAL JOIN):自然連接還有自然左外連接(NATURAL LEFT OUTER JOIN)和自然右外連接(NATURAL RIGHT OUTER JOIN)
    舉例:
    select score.*,course.Cname from score left join course on score.Cno = course.Cno;
    說明:select語句中只選取一個用來連接表的列時爵嗅,可以使用自然連接代替內(nèi)連接。用這種方法笨蚁,可以用自然左外連接來替換左外連接睹晒,自然右外連接替換右連接趟庄。
# 內(nèi)連接
root@localhost >select * from student inner join score on student.sno = score.sno;
+-------+-----------+-------+--------+------+------+-------+------+-------+-------+
| Sno   | Sname     | Sdept | Sclass | Ssex | Sage | Sno   | Cno  | Score | Tdept |
+-------+-----------+-------+--------+------+------+-------+------+-------+-------+
| 96001 | 馬小燕    | CS    | 01     | 女   |   21 | 96001 | 001  | 77.50 | NULL  |
| 96001 | 馬小燕    | CS    | 01     | 女   |   21 | 96001 | 003  | 89.00 | NULL  |
| 96001 | 馬小燕    | CS    | 01     | 女   |   21 | 96001 | 004  | 86.00 | NULL  |
| 96001 | 馬小燕    | CS    | 01     | 女   |   21 | 96001 | 005  | 82.00 | NULL  |
| 96002 | 黎明      | CS    | 01     | 男   |   18 | 96002 | 001  | 88.00 | NULL  |
| 96002 | 黎明      | CS    | 01     | 男   |   18 | 96002 | 003  | 92.50 | NULL  |
| 96002 | 黎明      | CS    | 01     | 男   |   18 | 96002 | 006  | 90.00 | NULL  |
| 96003 | 劉東明    | MA    | 01     | 男   |   18 | 96003 | 001  | 69.00 | NULL  |
| 96003 | 劉東明    | MA    | 01     | 男   |   18 | 96003 | 003  | 91.00 | NULL  |
| 96004 | 趙志勇    | IS    | 02     | 男   |   20 | 96004 | 001  | 87.00 | NULL  |
| 97001 | 馬蓉      | MA    | 02     | 女   |   19 | 97001 | 001  | 96.00 | NULL  |
| 97001 | 馬蓉      | MA    | 02     | 女   |   19 | 97001 | 008  | 95.00 | NULL  |
| 97002 | 李成功    | CS    | 01     | 男   |   20 | 97002 | 003  | 91.00 | NULL  |
| 97002 | 李成功    | CS    | 01     | 男   |   20 | 97002 | 004  |  NULL | NULL  |
| 97002 | 李成功    | CS    | 01     | 男   |   20 | 97002 | 006  | 92.00 | NULL  |
| 97003 | 黎明      | IS    | 03     | 女   |   19 | 97003 | 001  | 59.00 | NULL  |
| 97003 | 黎明      | IS    | 03     | 女   |   19 | 97003 | 003  | 58.00 | NULL  |
| 97004 | 李麗      | CS    | 02     | 女   |   19 | 97004 | 005  | 90.00 | NULL  |
| 97004 | 李麗      | CS    | 02     | 女   |   19 | 97004 | 006  | 85.00 | NULL  |
| 97004 | 李麗      | CS    | 02     | 女   |   19 | 97004 | 008  | 70.00 | NULL  |
+-------+-----------+-------+--------+------+------+-------+------+-------+-------+
20 rows in set (0.00 sec)

# 在這里 自然連接 等同于 內(nèi)連接
root@localhost >select * from student natural join score;
+-------+-----------+-------+--------+------+------+------+-------+-------+
| Sno   | Sname     | Sdept | Sclass | Ssex | Sage | Cno  | Score | Tdept |
+-------+-----------+-------+--------+------+------+------+-------+-------+
| 96001 | 馬小燕    | CS    | 01     | 女   |   21 | 001  | 77.50 | NULL  |
| 96001 | 馬小燕    | CS    | 01     | 女   |   21 | 003  | 89.00 | NULL  |
| 96001 | 馬小燕    | CS    | 01     | 女   |   21 | 004  | 86.00 | NULL  |
| 96001 | 馬小燕    | CS    | 01     | 女   |   21 | 005  | 82.00 | NULL  |
| 96002 | 黎明      | CS    | 01     | 男   |   18 | 001  | 88.00 | NULL  |
| 96002 | 黎明      | CS    | 01     | 男   |   18 | 003  | 92.50 | NULL  |
| 96002 | 黎明      | CS    | 01     | 男   |   18 | 006  | 90.00 | NULL  |
| 96003 | 劉東明    | MA    | 01     | 男   |   18 | 001  | 69.00 | NULL  |
| 96003 | 劉東明    | MA    | 01     | 男   |   18 | 003  | 91.00 | NULL  |
| 96004 | 趙志勇    | IS    | 02     | 男   |   20 | 001  | 87.00 | NULL  |
| 97001 | 馬蓉      | MA    | 02     | 女   |   19 | 001  | 96.00 | NULL  |
| 97001 | 馬蓉      | MA    | 02     | 女   |   19 | 008  | 95.00 | NULL  |
| 97002 | 李成功    | CS    | 01     | 男   |   20 | 003  | 91.00 | NULL  |
| 97002 | 李成功    | CS    | 01     | 男   |   20 | 004  |  NULL | NULL  |
| 97002 | 李成功    | CS    | 01     | 男   |   20 | 006  | 92.00 | NULL  |
| 97003 | 黎明      | IS    | 03     | 女   |   19 | 001  | 59.00 | NULL  |
| 97003 | 黎明      | IS    | 03     | 女   |   19 | 003  | 58.00 | NULL  |
| 97004 | 李麗      | CS    | 02     | 女   |   19 | 005  | 90.00 | NULL  |
| 97004 | 李麗      | CS    | 02     | 女   |   19 | 006  | 85.00 | NULL  |
| 97004 | 李麗      | CS    | 02     | 女   |   19 | 008  | 70.00 | NULL  |
+-------+-----------+-------+--------+------+------+------+-------+-------+
20 rows in set (0.00 sec)

# 在這里 自然左外連接 等同于 左外連接 
root@localhost >select * from student natural left outer join score;
+-------+--------------+-------+--------+------+------+------+-------+-------+
| Sno   | Sname        | Sdept | Sclass | Ssex | Sage | Cno  | Score | Tdept |
+-------+--------------+-------+--------+------+------+------+-------+-------+
| 20001 | 趙薇         | IS    | 02     | 女   |   19 | NULL |  NULL | NULL  |
| 96001 | 馬小燕       | CS    | 01     | 女   |   21 | 001  | 77.50 | NULL  |
| 96001 | 馬小燕       | CS    | 01     | 女   |   21 | 003  | 89.00 | NULL  |
| 96001 | 馬小燕       | CS    | 01     | 女   |   21 | 004  | 86.00 | NULL  |
| 96001 | 馬小燕       | CS    | 01     | 女   |   21 | 005  | 82.00 | NULL  |
| 96002 | 黎明         | CS    | 01     | 男   |   18 | 001  | 88.00 | NULL  |
| 96002 | 黎明         | CS    | 01     | 男   |   18 | 003  | 92.50 | NULL  |
| 96002 | 黎明         | CS    | 01     | 男   |   18 | 006  | 90.00 | NULL  |
| 96003 | 劉東明       | MA    | 01     | 男   |   18 | 001  | 69.00 | NULL  |
| 96003 | 劉東明       | MA    | 01     | 男   |   18 | 003  | 91.00 | NULL  |
| 96004 | 趙志勇       | IS    | 02     | 男   |   20 | 001  | 87.00 | NULL  |
| 97001 | 馬蓉         | MA    | 02     | 女   |   19 | 001  | 96.00 | NULL  |
| 97001 | 馬蓉         | MA    | 02     | 女   |   19 | 008  | 95.00 | NULL  |
| 97002 | 李成功       | CS    | 01     | 男   |   20 | 003  | 91.00 | NULL  |
| 97002 | 李成功       | CS    | 01     | 男   |   20 | 004  |  NULL | NULL  |
| 97002 | 李成功       | CS    | 01     | 男   |   20 | 006  | 92.00 | NULL  |
| 97003 | 黎明         | IS    | 03     | 女   |   19 | 001  | 59.00 | NULL  |
| 97003 | 黎明         | IS    | 03     | 女   |   19 | 003  | 58.00 | NULL  |
| 97004 | 李麗         | CS    | 02     | 女   |   19 | 005  | 90.00 | NULL  |
| 97004 | 李麗         | CS    | 02     | 女   |   19 | 006  | 85.00 | NULL  |
| 97004 | 李麗         | CS    | 02     | 女   |   19 | 008  | 70.00 | NULL  |
| 97005 | 司馬志明     | CS    | 02     | 男   |   18 | NULL |  NULL | NULL  |
+-------+--------------+-------+--------+------+------+------+-------+-------+
22 rows in set (0.01 sec)

# 左外連接
root@localhost >select * from student left outer join score on student.sno = score.sno;
+-------+--------------+-------+--------+------+------+-------+------+-------+-------+
| Sno   | Sname        | Sdept | Sclass | Ssex | Sage | Sno   | Cno  | Score | Tdept |
+-------+--------------+-------+--------+------+------+-------+------+-------+-------+
| 20001 | 趙薇         | IS    | 02     | 女   |   19 | NULL  | NULL |  NULL | NULL  |
| 96001 | 馬小燕       | CS    | 01     | 女   |   21 | 96001 | 001  | 77.50 | NULL  |
| 96001 | 馬小燕       | CS    | 01     | 女   |   21 | 96001 | 003  | 89.00 | NULL  |
| 96001 | 馬小燕       | CS    | 01     | 女   |   21 | 96001 | 004  | 86.00 | NULL  |
| 96001 | 馬小燕       | CS    | 01     | 女   |   21 | 96001 | 005  | 82.00 | NULL  |
| 96002 | 黎明         | CS    | 01     | 男   |   18 | 96002 | 001  | 88.00 | NULL  |
| 96002 | 黎明         | CS    | 01     | 男   |   18 | 96002 | 003  | 92.50 | NULL  |
| 96002 | 黎明         | CS    | 01     | 男   |   18 | 96002 | 006  | 90.00 | NULL  |
| 96003 | 劉東明       | MA    | 01     | 男   |   18 | 96003 | 001  | 69.00 | NULL  |
| 96003 | 劉東明       | MA    | 01     | 男   |   18 | 96003 | 003  | 91.00 | NULL  |
| 96004 | 趙志勇       | IS    | 02     | 男   |   20 | 96004 | 001  | 87.00 | NULL  |
| 97001 | 馬蓉         | MA    | 02     | 女   |   19 | 97001 | 001  | 96.00 | NULL  |
| 97001 | 馬蓉         | MA    | 02     | 女   |   19 | 97001 | 008  | 95.00 | NULL  |
| 97002 | 李成功       | CS    | 01     | 男   |   20 | 97002 | 003  | 91.00 | NULL  |
| 97002 | 李成功       | CS    | 01     | 男   |   20 | 97002 | 004  |  NULL | NULL  |
| 97002 | 李成功       | CS    | 01     | 男   |   20 | 97002 | 006  | 92.00 | NULL  |
| 97003 | 黎明         | IS    | 03     | 女   |   19 | 97003 | 001  | 59.00 | NULL  |
| 97003 | 黎明         | IS    | 03     | 女   |   19 | 97003 | 003  | 58.00 | NULL  |
| 97004 | 李麗         | CS    | 02     | 女   |   19 | 97004 | 005  | 90.00 | NULL  |
| 97004 | 李麗         | CS    | 02     | 女   |   19 | 97004 | 006  | 85.00 | NULL  |
| 97004 | 李麗         | CS    | 02     | 女   |   19 | 97004 | 008  | 70.00 | NULL  |
| 97005 | 司馬志明     | CS    | 02     | 男   |   18 | NULL  | NULL |  NULL | NULL  |
+-------+--------------+-------+--------+------+------+-------+------+-------+-------+
22 rows in set (0.00 sec)

  • 交叉連接 cross join
    指定了CROSS JOIN關(guān)鍵字的連接是交叉連接
    在mysql中,cross join從語法上與inner join相同
    另外 straight_join連接用法和inner join連接相同伪很,不同的是straight_join后不可以使用using子句代替on條件戚啥。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市锉试,隨后出現(xiàn)的幾起案子猫十,更是在濱河造成了極大的恐慌,老刑警劉巖键痛,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件炫彩,死亡現(xiàn)場離奇詭異匾七,居然都是意外死亡絮短,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門昨忆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來丁频,“玉大人,你說我怎么就攤上這事邑贴∠铮” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵拢驾,是天一觀的道長奖磁。 經(jīng)常有香客問我,道長繁疤,這世上最難降的妖魔是什么咖为? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮稠腊,結(jié)果婚禮上躁染,老公的妹妹穿的比我還像新娘。我一直安慰自己架忌,他們只是感情好吞彤,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著叹放,像睡著了一般饰恕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上井仰,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天懂盐,我揣著相機與錄音,去河邊找鬼糕档。 笑死莉恼,一個胖子當著我的面吹牛拌喉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播俐银,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼尿背,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了捶惜?” 一聲冷哼從身側(cè)響起田藐,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎吱七,沒想到半個月后汽久,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡踊餐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年景醇,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吝岭。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡三痰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出窜管,到底是詐尸還是另有隱情散劫,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布幕帆,位于F島的核電站获搏,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏失乾。R本人自食惡果不足惜常熙,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望仗扬。 院中可真熱鬧症概,春花似錦、人聲如沸早芭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽退个。三九已至募壕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間语盈,已是汗流浹背舱馅。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留刀荒,地道東北人代嗤。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓棘钞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親干毅。 傳聞我的和親對象是個殘疾皇子宜猜,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345