日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Mysql的多表查询(表添加,多表查询练习:笛卡尔积、内连接、外连接、子查询、UNION组合查询)

發布時間:2025/3/15 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mysql的多表查询(表添加,多表查询练习:笛卡尔积、内连接、外连接、子查询、UNION组合查询) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

https://blog.csdn.net/hanhanwanghaha寶藏女孩 歡迎您的關注!
歡迎關注微信公眾號:寶藏女孩的成長日記
如有轉載,請注明出處(如不注明,盜者必究)

目錄

  • 一、表的創建
    • 1.1創建學生表student_one
    • 1.2創建教師表teacher_one
    • 1.3創建課程表course_one
    • 1.4創建成績表score_one
  • 二、基于多表的連接查詢
    • 2.1笛卡爾積(交叉連接)
    • 2.2 內連接
      • 2.2.1顯示內連接
      • 2.2.2隱式內連接
    • 2.3外連接查詢
      • 2.3.1左外連接
      • 2.3.2右外連接
    • 2.4子查詢
      • 2.4.1普通子查詢
      • 2.4.2使用EXISTS的子查詢
      • 2.4.3使用 NOT EXISTS的子查詢
    • 2.5 組合查詢(使用UNION運算符組合多個結果)

一、表的創建

1.1創建學生表student_one

Sql語句:

create table student_one( sno varchar(20) not null primary key, sname varchar(20) not null, ssex varchar(20) not null, sbirthday datetime, class varchar(20) )charset=utf8;

加入數據:

insert into student_one values('1','陳奇','男','2000-11-02','1'); insert into student_one values('2','陳飛','男','1999-12-05','2'); insert into student_one values('3','周杰','女','1989-03-01','3'); insert into student_one values('4','昆凌','男','1989-04-15','4'); insert into student_one values('5','王麗','女','1999-05-16','5'); insert into student_one values('6','蔡蔡','男','2000-08-17','6');

運行結果:

1.2創建教師表teacher_one

Sql語句:

create table teacher_one ( tno varchar(20) not null primary key, tname varchar(20) not null, tsex varchar(20) not null, depart varchar(20) not null )charset=utf8;

加入數據:

insert into teacher_one values('100','斯內普','男','計算機'); insert into teacher_one values('101','哈利波特','男','土木工程'); insert into teacher_one values('102','德拉科','男','中文'); insert into teacher_one values('103','郝敏','女','歷史'); insert into teacher_one values('104','莉莉','女','舞蹈');

運行結果:

1.3創建課程表course_one

Sql語句:

create table course_one( cno varchar(20) not null primary key, cname varchar(20) not null, tno varchar(20) not null, foreign key(tno) references teacher_one(tno) )charset=utf8;

加入數據:

insert into course_one values('0-1','計算機導論','100'); insert into course_one values('1-5','混凝土結構','101'); insert into course_one values('2-1','古代文論','102'); insert into course_one values('3-2','世界古代史','103'); insert into course_one values('4-2','蒙古舞','104');

運行結果:

1.4創建成績表score_one

Sql語句:

create table score_one( sno varchar(20) not null, foreign key(sno) references student_one(sno), cno varchar(20) not null, foreign key(cno) references course_one(cno), degree decimal )charset=utf8;

加入數據:

insert into score_one values('1','0-1','99'); insert into score_one values('2','1-5','88'); insert into score_one values('3','2-1','77'); insert into score_one values('4','3-2','66'); insert into score_one values('5','4-2','98'); insert into score_one values('6','3-2','99');

運行結果:

二、基于多表的連接查詢

多表查詢的連接謂詞
Join:將兩個表連接在一起,可進行笛卡爾積、內連接、外連接

2.1笛卡爾積(交叉連接)

舉例:
目的:將teacher_one表和course_one表做笛卡爾積
Sql語句:

SELECT * FROM teacher_one CROSS JOIN course_one;

運行結果:

2.2 內連接

內連接是最常見的一種連接,它也被稱為普通連接和自然連接,但是只連接匹配的行,所以內連接可能丟失信息

2.2.1顯示內連接

語法

SELECT 查詢的字段 FROM table1 JOIN table2 ON table_b ON table_a.外鍵 = table_b.主鍵;

舉例:
目的:將學生學號,名字,成績查詢出來
Sql語句:

SELECT student_one.sno, student_one.sname, score_one.degree FROM score_one JOIN student_one ON score_one.sno = student_one.sno;

運行結果:

2.2.2隱式內連接

語法:

SELECT 查詢的字段 FROM table_a , table_b WHERE table_a.外鍵 = table_b.主鍵;

舉例:
目的:將學生學號,名字,成績查詢出來
Sql語句:

SELECT student_one.sno, student_one.sname, score_one.degree FROM score_one, student_one WHERE score_one.sno = student_one.sno;

運行結果:

2.3外連接查詢

外連接查詢擴充了內連接查詢的功能,包含全外連接、左外連接、右外連接

2.3.1左外連接

保留第一個表所有行,而第二個表只包含與第一個表匹配的行,第二個表相應的空行為NULL值
語法:

SELECT 查詢的字段 FROM table1 LEFT JOIN table2 ON 條件

舉例:
目的:將每位老師的所教的課程查詢出來
Sql語句:

SELECT teacher_one.tname,course_one.cname FROM teacher_one LEFT JOIN course_one ON course_one.tno = teacher_one.tno

運行結果:

2.3.2右外連接

保留第二個表所有行,而第一個表只包含與第二個表匹配的行,第一個表相應的空行為NULL值,與左外連接相反

語法

SELECT 查詢的字段 FROM table1 RIGHT JOIN table2 ON 條件

舉例:
目的:將學生的學號,姓名,成績查詢出來
Sql語句:

SELECT student_one.sno,student_one.sname,score_one.degree FROM student_one RIGHT JOIN score_one ON score_one.sno=student_one.sno

運行結果:

2.4子查詢

2.4.1普通子查詢

一條select語句結果作為另一條select語句的(查詢條件,查詢結果等)。

語法:

SELECT 查詢的字段 FROM table_a WHERE 字段 = (SELECT 字段 FROM table_a [WHERE 條件])

舉例:
目的:將sno小于3的同學的成績查詢出來
Sql語句:

SELECT student_one.sname, score_one.degree FROM student_one LEFT JOIN score_one ON score_one.sno = student_one.sno WHERE student_one.sno IN (SELECT sno FROM student_one WHERE student_one.sno <3)

注意:當子查詢產生一系列的值時,用IN,如果只有單個的值,就用=
運行結果:

2.4.2使用EXISTS的子查詢

EXISTS
EXISTS搜索條件并不真正使用子查詢的結果,它僅僅測試子查詢是否產生任何結果
語法:

SELECT 查詢的字段 FROM table WHERE EXISTS (條件)

舉例:
目的:查詢teacher_one表里面是否存在教師編號小于105的教師,不存在返回NULL
Sql語句:

SELECT teacher_one.tname, course_one.cname FROM teacher_one LEFT JOIN course_one ON course_one.tno = teacher_one.tno WHERE EXISTS (SELECT tno FROM teacher_one WHERE teacher_one.tno <105)

運行結果:

2.4.3使用 NOT EXISTS的子查詢

NOT EXISTS
與 EXISTS的作用相反,如果子查詢沒有返回行,則滿足 NOT EXISTS的WHERE子句
語法:

SELECT 查詢的字段 FROM table WHERE NOT EXISTS (條件)

舉例:
目的:查詢teacher_one表里面是否存在教師編號等于109的教師,存在返回NULL,不存在返回數據
Sql語句:

SELECT * FROM teacher_one WHERE NOT EXISTS (SELECT tno FROM teacher_one WHERE tno=109)

運行結果:

2.5 組合查詢(使用UNION運算符組合多個結果)

語法:

查詢語句A UNION 查詢語句B

舉例:
目的:將性別為男,學號為5的同學的學號,姓名,年齡都查詢出來
Sql語句:

SELECT sno,sname,YEAR(from_days(datediff(now(), sbirthday))) AS '年齡' FROM student_one WHERE ssex='男' UNION ALL SELECT sno,sname,YEAR(from_days(datediff(now(), sbirthday))) AS '年齡' FROM student_one WHERE sno=5

運行結果:

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的Mysql的多表查询(表添加,多表查询练习:笛卡尔积、内连接、外连接、子查询、UNION组合查询)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。