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.单行单列查询全部字段方法:
SELECT * FROM 表 WHERE 字段名=(子查询);
作为条件值,使用= != > < 等进行条件判断
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 * FROM 表 WHERE 字段名 IN/NOT IN(子查询);
IN:包含
NOT IN:不包含
SELECT * FROM t_reader WHERE reader_id NOT IN (SELECT reader_id FROM t_borroe_recrod);
2.多行单列查询部分字段方法:
SELECT 字段列表 FROM 表 WHERE 字段名 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;