Mysql数据库DQL语言(2)

前言

本章主要讲解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 条件】

猜你喜欢

转载自blog.csdn.net/qq_45432593/article/details/106834690
今日推荐