MySQL--连接查询和子查询

连接查询


一、多表查询的概念:

1.多表查询:从多张表查询数据

2.连接查询:
        ①内连接:相当于查询A、B交集数据
        ②外连接:
            (1)左外连接:相当于查询A表所有数据和交集的部分数据
            (2)右外连接:相当于查询B表所有数据和交集的部分数据

二、内连接方法:

1.查询全部字段隐式内连接:

SELECT 表1.*,表2.*,... FROM 表1,表2,...WHERE 条件;

SELECT emp.*,dept.* FROM emp,dept WHERE emp.dept_id=dept.id;

 2.查询部分字段隐式内连接

SELECT 表1.字段名,表2.字段名,... FROM 表1,表2,...WHERE 条件;

SELECT a.id,a.name,b.id,b.name FROM  emp a,dept b WHERE a.dept_id=b.id;

 3.查询全部字段显示内连接

SELECT 表1.*,表2.*,... FROM 表1 [INNER] JOIN 表2 ON 条件;

:INNER可写可不写

​SELECT emp.*,dept.* FROM emp JOIN dept ON emp.dept_id=dept.id;

4.查询部分字段显示内连接

SELECT 表1.字段名,表2.字段名,... FROM 表1 [INNER] JOIN 表2 ON 条件;

:INNER可写可不写

​SELECT a.id,a.name,b.id,b.name FROM  emp a JOIN dept b ON a.dept_id=b.id;

三、外连接方法:

1.查询全部字段左外连接:

SELECT 表1.*,表2.* FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件;

OUTER可写可不写

SELECT a.*,b.* FROM t_borrow_record a LEFT JOIN t_return_record b ON a.borrow_id=b.borrow_id;

2.查询部分字段左外连接

SELECT 表1.字段名,表2.字段名,... FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件;

OUTER可写可不写

SELECT a.borrow_id,a.name,b.borrow_id,b.name FROM t_borrow_record a LEFT JOIN t_return b ON a.borrow_id=b.borrow_id;

 3.查询全部字段右外连接

SELECT 表1.*,表2.* FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件;

OUTER可写可不写

SELECT a.*,b.* FROM t_book a RIGHT JOIN t_press b ON a.press_id=b.press_id;

 4.查询部分字段右外连接

SELECT 表1.字段名,表2.字段名,... FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件;

OUTER可写可不写

SELECT a.ISBN,a.book_name,b.press_id,b.press_name FROM t_book a RIGHT JION t_press b ON a.press_id=b.press;

 子查询


一、子查询的概念:

1.查询中嵌套查询,称嵌套查询为子查询

2.子查询根据查询结果不同,作用不同:
        ①单行单列

        ②多行单列

        ③多行多列

二、单行单列方法:

1.单行单列查询全部字段方法:

SELECTFROMWHERE 字段名=(子查询);

作为条件值,使用= != > < 等进行条件判断

SELECT * FROM emp WHERE salary > (SELECT salary FROM emp WHERE name = "猪八戒");

2.单行单列查询部分字段方法:

SELECT 字段名 FROM  表名 WHERE 字段名=(子查询);

作为条件值,使用= != > < 等进行条件判断

​SELECT name FROM emp WHERE salary > (SELECT salary FROM emp WHERE name = "猪八戒");

三、多行单列方法:

1.多行单列查询全部字段方法:

SELECT * FROMWHERE 字段名 IN/NOT IN(子查询);

IN:包含

NOT IN:不包含

SELECT * FROM t_reader WHERE reader_id NOT IN (SELECT reader_id FROM t_borroe_recrod);

2.多行单列查询部分字段方法:

SELECT 字段列表 FROMWHERE 字段名 IN/NOT IN(子查询);

IN:包含

NOT IN:不包含

​SELECT name FROM t_reader WHERE reader_id NOT IN (SELECT reader_id FROM t_borroe_recrod);

四、多行多列方法:

1.多行多列查询全部字段方法:

SELECT 表1.*,表2.*,... FROM (子查询) WHERE 条件;

SELECT a.*,b.* FROM (SELECT * FROM emp WHERE join_date>"2011-11-11") a,dept b WHERE a.dept_id=b.dept_id;

 2.多行多列查询部分字段方法:

SELECT 表1.字段名,表2.字段名,... FROM (子查询) WHERE 条件;

​SELECT a.name,b.dept_id FROM (SELECT * FROM emp WHERE join_date>"2011-11-11") a,dept b WHERE a.dept_id=b.dept_id;

 

你可能感兴趣的:(MySQL,sql,mysql,数据库,开发语言,数据结构)