MySQL資料庫之連線查詢

2022-09-06 15:18:15 字數 3667 閱讀 6834

join 對比

操作符名稱

描述inner join

如果表中有至少乙個匹配,則返回行

left join

即使右表中沒有匹配,也從左表中返回所有的行

right join

即使左表中沒有匹配,也從右表中返回所有的行

七種join

示例

/*

連線查詢

如需要多張資料表的資料進行查詢,則可通過連線運算子實現多個查詢

內連線 inner join

查詢兩個表中的結果集中的交集

外連線 outer join

左外連線 left join

(以左表作為基準,右邊表來一一匹配,匹配不上的,返回左表的記錄,右表以null填充)

右外連線 right join

(以右表作為基準,左邊表來一一匹配,匹配不上的,返回右表的記錄,左表以null填充)

等值連線和非等值連線

自連線*/

​-- 查詢參加了考試的同學資訊(學號,學生姓名,科目編號,分數)

select * from student;

select * from result;​/*

思路:(1):分析需求,確定查詢的列**於兩個類,student result,連線查詢

(2):確定使用哪種連線查詢?(內連線)

*/select s.studentno,studentname,subjectno,studentresult

from student s

inner join result r

on r.studentno = s.studentno

​-- 右連線(也可實現)

select s.studentno,studentname,subjectno,studentresult

from student s

right join result r

on r.studentno = s.studentno

​-- 等值連線

select s.studentno,studentname,subjectno,studentresult

from student s , result r

where r.studentno = s.studentno

​-- 左連線 (查詢了所有同學,不考試的也會查出來)

select s.studentno,studentname,subjectno,studentresult

from student s

left join result r

on r.studentno = s.studentno

​-- 查缺考的同學(左連線應用場景)

select s.studentno,studentname,subjectno,studentresult

from student s

left join result r

on r.studentno = s.studentno

where studentresult is null

​-- 查詢參加了考試的同學資訊(學號,學生姓名,科目名,分數)

select s.studentno,studentname,subjectname,studentresult

from student s

inner join result r

on r.studentno = s.studentno

inner join `subject` sub

on sub.subjectno = r.subjectno

自連線示例

/*

自連線資料表與自身進行連線

​需求:從乙個包含欄目id , 欄目名稱和父欄目id的表中

查詢父欄目名稱和其他子欄目名稱*/​

-- 建立乙個表

create table `category` (

`categoryid` int(10) unsigned not null auto_increment comment '主題id',

`pid` int(10) not null comment '父id',

`categoryname` varchar(50) not null comment '主題名字',

primary key (`categoryid`)

) engine=innodb auto_increment=9 default charset=utf8

​-- 插入資料

insert into `category` (`categoryid`, `pid`, `categoryname`)

values('2','1','資訊科技'),

('3','1','軟體開發'),

('4','3','資料庫'),

('5','1','美術設計'),

('6','3','web開發'),

('7','5','ps技術'),

('8','2','辦公資訊');

​-- 編寫sql語句,將欄目的父子關係呈現出來 (父欄目名稱,子欄目名稱)

-- 核心思想:把一張表看成兩張一模一樣的表,然後將這兩張表連線查詢(自連線)

select a.categoryname as '父欄目',b.categoryname as '子欄目'

from category as a,category as b

where a.`categoryid`=b.`pid`

​-- 思考題:查詢參加了考試的同學資訊(學號,學生姓名,科目名,分數)

select s.studentno,studentname,subjectname,studentresult

from student s

inner join result r

on r.studentno = s.studentno

inner join `subject` sub

on sub.subjectno = r.subjectno

​-- 查詢學員及所屬的年級(學號,學生姓名,年級名)

select studentno as 學號,studentname as 學生姓名,gradename as 年級名稱

from student s

inner join grade g

on s.`gradeid` = g.`gradeid`

​-- 查詢科目及所屬的年級(科目名稱,年級名稱)

select subjectname as 科目名稱,gradename as 年級名稱

from subject sub

inner join grade g

on sub.gradeid = g.gradeid

​-- 查詢 資料庫結構-1 的所有考試結果(學號 學生姓名 科目名稱 成績)

select s.studentno,studentname,subjectname,studentresult

from student s

inner join result r

on r.studentno = s.studentno

inner join `subject` sub

on r.subjectno = sub.subjectno

where subjectname='資料庫結構-1'

Mysql資料庫連線查詢

連線查詢 將多張表 可以大於等於2 進行記錄的連線 按照某個指定的條件進行資料的拼接 最終結果 記錄數可能有變化,字段數一定會增加 至少是兩張表的合併 連線查詢的意義 在使用者檢視資料的時候,需要顯示的資料來自多張表。連線查詢 join 使用方式 左表 join 右表 左表 join關鍵字左邊的表 ...

golang連線mysql資料庫查詢

確認位址是否有效 err db.ping if err nil var id int name string 將查詢傳送到資料庫。像往常一樣,我們檢查錯誤 其次,只要有乙個開放的結果集 由行表示 底層連線就會繁忙,不能用於任何其他查詢。這意味著它在連線池中不可用。如果您使用row next 迭代所有...

PHP連線 查詢MySQL資料庫

conndb.php link mysqli connect localhost root password database 連線資料庫 mysqli select db link,database 選擇資料庫 mysqli query link,set name gb2312 index.php...