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...