一、分组查询 在进行查询时,通常需要按某个或某些字段进行一些统计,因此就需要使用分组查询,但分组后通常需要与聚合函数使用,分组才有意义。 语法:SELECT <字段列表|*> FROM 表名[WHERE <筛选条件1>][GROUP BY<分组字段列表> [HAVING <筛选条件2>]]; 说明:a、having是对分组统计的结果进行筛选 b、where是在分组统计之前进行筛选 1、GROUP BY 单独使用: /*举得例子由于电脑出现故障被我重装系统,找不到了*/ 2、GROUP BY 结合HAVING 的使用: 3、GROUP BY 结合HAVING 、WHERE的使用: 二、连接查询 在实际应用过程中,往往都需要针对多张数据表进行查询,常用的有连接查询、子查询, 连接查询就是需要将多张表通过主外键的关联关系作为连接的筛选条件,满足条件的记录会被连接为一条条的虚拟记录, 从而扩展出我们项目需要的一些数据。 1、内连接:INNER JOIN 语法:SELECT <字段|*> FROM 表1 INNER JOIN 表2..... [WHERE <连接条件>]; 说明:要保证前后表中主键或外键都要有的值才会被显示出来。 举例: 2、外连接 语法:SELECT <字段|*> FROM 表1 {LEFT | RIGHT | CROSS} JOIN 表2....... [ON <连接条件>]; 1)左外连接:LEFT JOIN 说明:以左表为主,右表为辅,左表中有的主、外键都要显示,若右表中没有主、外键的记录使用NULL来代替。 2)右外连接:RIGHT JOIN 说明:与左外连接刚好相反 3)交叉连接:CROSS JOIN 说明:兼顾左表和右表,两个表的主键或外键值都有的数据才被显示,等价于“内连接”,“内连接”使用where关键字,交叉连接使用ON关键字添加连接条件 举例: 3、自连接: 说明:在某些特殊需求的情况下,需要将一张表当做多张表来看待,将他们连接在一起进行查询, 但本质他们是同一张表,因此自己与自己进行连接查询称为自连接查询 举例:-- 显示tb_emp表中的“员工编号”、“员工姓名”、“上司编号”、“上司姓名” SELECT employee.empno 员工编号,employee.ename 员工姓名,manager.empno 上司编号,manager.ename 上司姓名 FROM tb_emp manager , tb_emp employee WHERE employee.MGR = manager.EMPNO;