前言
本章主要讲解mysql的查询。
分组查询
分组的SQL语句有2个:
group by 和分组聚合函数实现 partition by (oracle和postgreSQL中的语句)功能
group by + having 组合赛选数据
注意:having 条件的字段必须在前面查询赛选存在,否则语法错误
错误格式:
SELECT MAX(ID),U_ID FROM mlzm_comments GROUP BY U_ID HAVING Data_Status >0
正确格式:
SELECT MAX(ID),U_ID,Data_Status FROM mlzm_comments GROUP BY U_ID HAVING Data_Status >0
group by强调的是一个整体,就是组,只能显示一个组里满足聚合函数的一条记录, partition by 在整体后更强调个体,能显示组里所有个体的记录。
多表查询
交叉连接,不适用任何匹配条件,生产笛卡尔积。
select * from 表1,表2;
内链接只连接匹配的行
select *from staffinner join department on 条件(表1.字段=表2.字段)
左外连接 优先显示左表全部记录 left join
select *from staffleft join department on 条件(表1.字段=表2.字段)
右外连接 优先显示右表全部记录 right join
select *from staff right join department on(表1.字段=表2.字段)
全外连接 显示左右两个表全部记录
查询语句(mysql没有full join,可以有左外连接+右外连接来实现全外连接)
注:
全外连接:在内连接的基础上增加左边没有的和右边没有左边没有的结果。
mysql不会吃全外连接 full join。
mysql可以使用此种方式间接实现全外连接。
union与 union all 的区别:union会去掉相同的记录。
子查询,分页查询
含义:出现在其他语句中的select语句,称为子查询或内查询
外部的查询语句,称为主查询或外查询
一:where 或having 后面
1、表量子查询(单行子查询)
2、列子查询(多行子查询)
3、行子查询(多行多列)
特点:
1、子查询方法在小括号内
2、子查询一般放在条件的右侧
3、标量子查询,一般搭配着单行操作符使用
列子查询,一般搭配着多行操作符使用:
IN 、ANY /SOME、ALL
标量子查询:
案例1、谁的工资比 Abel的高
SELECT * FROM employees
WHERE salary > (
SELECT salary
FROM employees
WHERE last_name = 'Abel'
);
多行子查询:
案例1:返回location_id是1400或1700的部门中的所有员工姓名
SELECT DISTINCT department_id
FROM departments
WHERE location_id IN(1400,1700)
分页查询的特点:
1、limit 语句放在查询语句的最后
2、公式
要显示的页数 page ,每页的条目数 size
SELECT 查询列表
FROM 表
limit (page-1)*size ,size;
1:查询前五条员工信息
SELECT * FROM employees LIMIT 0,5;
2:查询第11条到25条
SELECT * FROM employees LIMIT 10,15;
3:有奖金的员工的信息,并且工资较高的前10名
SELECT * FROM employees
WHERE commission_pct IS NOT null
ORDER BY salary DESC LIMIT 10;
联合查询:
语法:
select 字段|常量|表达式|函数 【from 表】 【where 条件】 union 【all】
select 字段|常量|表达式|函数 【from 表】 【where 条件】 union 【all】
select 字段|常量|表达式|函数 【from 表】 【where 条件】 union 【all】
select 字段|常量|表达式|函数 【from 表】 【where 条件】