Chapter 3 Multi-table Operation 3 (Multi-table Query)

Multi-table query

 

  1. Subquery
  2.  Internal connection
  3.  Left connect
  4.  Right connection
  5. Fully connected
  6.  Cross connect
  7. Self-connection

-- 子查询效率没有连接查询高  ,能用连接查询的,就尽量不要用子查询
SELECT c_name FROM class WHERE c_id =(SELECT c_id FROM student WHERE s_name ='张三2');

-- 连接查询
SELECT a.`a_id`,a.`a_name`,b.`b_id`,b.`b_name` FROM a,b WHERE a.`a_id`=b.`b_id`;

--  内连接
SELECT a.`a_id`,a.`a_name`,b.`b_id`,b.`b_name` FROM a  JOIN b ON a.`a_id`=b.`b_id` WHERE b_name='aa';   

-- 左连接
SELECT a.`a_id`,a.`a_name`,b.`b_id`,b.`b_name` FROM a LEFT JOIN b ON a.`a_id`=b.`b_id`

-- 右连接
SELECT a.`a_id`,a.`a_name`,b.`b_id`,b.`b_name` FROM a RIGHT JOIN b ON a.`a_id`=b.`b_id`;

-- 全连接  mysql 不支持   ,但是可以用其他的方式来实现
-- select a.`a_id`,a.`a_name`,b.`b_id`,b.`b_name` from a full join b on a.`a_id`=b.`b_id`;

SELECT a_id FROM a
UNION ALL
SELECT b_id FROM b;

--  mysql中全连接
SELECT a.`a_id`,a.`a_name`,b.`b_id`,b.`b_name` FROM a LEFT JOIN b ON a.`a_id`=b.`b_id`
UNION
SELECT a.`a_id`,a.`a_name`,b.`b_id`,b.`b_name` FROM a RIGHT JOIN b ON a.`a_id`=b.`b_id`;

-- 交叉连接
select * from emp,dept where emp.`d_id`= dept.`d_id` and emp.`e_name`="张三";;

-- 自连接
-- 电器下面的子分类
select * from category where p_id = 
(select a_id from category where c_name="电器");

-- 两张表以上联查
方式一
SELECT a.`a_id`,a.`a_name`,b.`b_id`,b.`b_name`,c..c_id FROM a,b,c WHERE a.`a_id`=b.`b_id` and b.b_id=c.c_id;

方式二
SELECT A.*,B.*,C.*
FROM A
inner join  B on A.a_id=B.b_id
inner join  C on B.b_id=C.c_id

-- 注意后面可以接
where
group by
having 
order by 
limit


   -- 注意  a.id  b_id  c_id 一般是主外键的 关系。

 

Guess you like

Origin blog.csdn.net/yipianfeng_ye/article/details/89888390