1、 distinct 去重
在mysql中,distinct关键字的主要作用就是对数据库表中一个或者多个字段重复的数据进行过滤,只返回其中的一条数据给用户,distinct只可以在select中使用
select distinct 列名1,列名2 from 表;
//表示列名1和列名2同时不重复才返回给用户
2、内外连接
内连接
内连接查询出与连接条件匹配的数据行,搭配比较运算符使用,分为:等值连接、不等连接、自然连接。
等值连接
在连接条件中使用等于号(=)运算符,返回符合条件的内容。
SELECT * FROM 表名1 as x INNER JOIN 表名2 as y on x.列名=y.列名;
不等连接
在连接条件中使用不等号,如>、<、<>等运算符,返回符合条件的内容。
SELECT * FROM 表名1 as A INNER JOIN 表名2 as B on A.列名!=B.列名;
自然连接(natural join)
自然连接是一种特殊的等值连接,他要求两个关系表中进行连接的必须是相同的属性列(名字相同),无须添加连接条件,并且在结果中消除重复的属性列。
SELECT * FROM 表名1 NATURAL JOIN 表名2;
外连接
左外连接
返回左表中的所有行,如果右表中没有值则补为NULL。
select * from 表名1 as X LEFT OUT JOIN 表名2 as Y on X.列名 = Y.列名;
右外连接
返回右表中的所有行,如果左表中没有值则补为NULL。
select * from 表名1 as X RIGHT OUT JOIN 表名2 as Y on X.列名 = Y.列名;
全外连接
全外连接是左外连接和右外连接的组合。简单说就是将左外连接和右外连接同时做多一次。根据全连接的定义,我们可以写成左外连接和右外连接组合起来
select * from 表名1 FULL JOIN 表名2;
子查询
相关子查询
先执行主查询,再针对主查询返回的每一行数据执行子查询,如果子查询能够返回行,则这条记录就保留,否则就不保留。
--举例1:相关子查询查询:查询所有是领导的员工信息
select * from emp e1 where exists (select * from emp e2 where e1.empno=e2.mgr);
--举例2:相关子查询查询:查询有员工的部门的信息
select * from dept d1 where exists(select * from emp e1 where e1.deptno=d1.deptno);
--换言之:相关子查询的执行 *依赖* 于 *外部查询*(主查询) 的数据,外部查询执行一行,*子查询* 就执行一次。
不相关子查询
非相关子查询的执行不依赖与外部的查询。
执行过程:
(1)执行子查询,其结果不被显示,而是传递给外部查询,作为外部查询的条件使用。
(2)执行外部查询,并显示整个结果。