MySQL連表查詢的實現(xiàn)
1.連接查詢—內連接
1.1隱式內連接
笛卡爾乘積,錯誤示范
select student.id ,teacher.t_id from student,teacher ;

正確示范
后面要加上條件證明兩表有相同的字段
select s.id, t.t_id from student s,teacher t where s.teacher_id= t.t_id;

1.1.1等值連接和非等值連接
等值連接指的多表查詢語句中的連接條件使用的是等號。
非等值連接指的是多表查詢語句中的連接條件使用的不是等號而是>,>=,<,<=,!=以及使用between進行范圍判斷的稱之為非等值連接。
1.2.顯示內連接—inner join
-- 顯示連接: A表 inner join B表 on 連表條件。
2.查詢每一個員工的姓名,及關聯(lián)的部門的名稱〔顯式內連接實現(xiàn))
select * from tb_emp inner join tb_dept on tb_emp.dept_id=tb_dept.id; select * from tb_emp e inner join tb_dept d on e.dept_id=d.id;
-- 上面的 inner可以省略。
select * from tb_emp e join tb_dept d on e.dept_id=d.id;
2.連接查詢—外連接

2.1 左外連接
-- 語法: select 查詢列集 from A表 left join B表 on 連表條件
-- 1.查詢emp表的所有數(shù)據(jù), 和對應的部門信息(左外連接)
select * from tb_emp e left outer join tb_dept d on e.dept_id = d.id; select * from tb_emp e left join tb_dept d on e.dept_id=d.id;
-- 2.查詢dept表的所有數(shù)據(jù),和對應的員工信息(右外連接)
2.2右外連接
select * from tb_emp e right join tb_dept d on e.dept_id=d.id;
3.自連查詢
自己和自己相連接查詢。
select * from A表 join A表 on 連表條件。
-- 1.查詢員工及其所屬領導的名字。你要查詢的結果再一張表中,但是還不能使用單表查詢得到結果。
select a.name,b.name from tb_emp a join tb_emp b on a.managerid=b.id;
-- 2.查詢所有員工 emp及其領導的名字emp ,如果員工沒有領導,也需要查詢出來
select a.name,b.name from tb_emp a left join tb_emp b on a.managerid=b.id;
4.子查詢
一個查詢的結果 作為另一個查詢的條件 或者 臨時表。
-- 查詢市場部的員工信息-----
-- 子查詢返回的結果一列一條記錄。 這個時候可以用
select * from tb_emp where dept_id=(select id from tb_dept where name='市場部')
-- 查詢市場部和研發(fā)部員工的信息。in
-- -- 查詢市場部和研發(fā)部員工的信息。
-- a) 查詢市場部和研發(fā)部的編號select id from tb_dept where name in('市場部','研發(fā)部')-- b) 再員工表中根據(jù)部門編號查詢員工信息
select * from tb_emp where dept_id in (select id from tb_dept where name in('市場部','研發(fā)部'))
5.組合查詢
多個查詢的結果 組合到一起。
sql union sql --->把這兩條sql查詢的結果組合到一起。如果有重復記錄則合并成一條。
sql union all sql--->把這兩條sql查詢的結果組合到一起。如果有重復記錄,不合并。
注意: 這兩條sql返回的字段必須一樣。
select name from tb_emp where salary>8000 UNION? select * from tb_emp where age>40;
6.注意事項
如果查詢語句中出現(xiàn)了多個表中都存在的字段,則必須指明是哪個表中的字段
建議:從sql 優(yōu)化的角度,建議多表查詢時,每個字段前都指明其所在的表。
正確代碼
select s.id, t.t_id from student s,teacher t where s.teacher_id= t.t_id;
可以給表起別名,在 SELECT 和 WHERE 中使用表的別名。
如果給表起了別名,一旦在 SELECT 或 WHERE 中使用表名的話,則必須使用表的別名,而不能再使用表的原名。
錯誤示范
select s.id, t.t_id from student s,teacher t where student.teacher_id= teacher.t_id;

到此這篇關于MySQL連表查詢的實現(xiàn)的文章就介紹到這了,更多相關MySQL連表查詢內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
區(qū)分MySQL中的空值(null)和空字符('''')
這篇文章主要介紹了如何區(qū)分MySQL中的空值(null)和空字符(''),幫助大家更好的理解和使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下2020-09-09

