ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL教程 - DQL操作

2022-09-02 09:06:48  阅读:279  来源: 互联网

标签:教程 users 查询 实例 MySQL DQL REGEXP WHERE SELECT


更新记录
转载请注明出处。
2022年9月2日 发布。
2022年9月2日 从笔记迁移到博客。

基本查询

SELECT 属性列表
FROM   表或视图
WHERE  筛选条件1
GROUP BY 属性  [HAVING 筛选条件2] [WITH ROLLUP]
ORDER BY 属性  [ASC |DESC] ……….;
LIMIT 条件

注意:
GROUP BY 表示按该属性进行分组,满足HAVING 条件的才输出
ORDER BY 表示按该属性进行排序 ASC 表示升序 DESC表示降序
ORDER BY支持多个列
WITH ROLLUP 显示每个分组的汇总信息

查询结果排除重复

SELECT DISTINCT 属性名

别名

支持 表别名 和 字段别名

SELECT 字段 AS 字段别名
FROM 表 AS 表别名;

连接

连接示意图

image
image

内连接

SELECT 字段
FROM 表1,表2,表3,...
WHERE 连接条件;

左外连接

SELECT 字段
FROM 表1 LEFT JOIN 表2
ON连接条件
WHERE 条件;

右外连接

SELECT 字段
FROM 表1 RIGHT JOIN 表2
ON连接条件
WHERE 条件;

合并查询

UNION
UNION ALL

限定条件where

比较大小相等

比较:
= != < <= > >= <! >! <>
EG:

WHERE Property > 666666;

指定范围内

范围:
BETWEEN 边界1 AND 边界2
NOT BETWEEN 边界1 AND 边界2
注意:BETWEEN包括边界值
注意:NOT BETWEEN不包括边界值

EG:

SELECT * FROM test1
WHERE id NOT BETWEEN 1 AND 2;  -- 注意:包括1,2

指定集合内

指定集合:

IN(value1,value2,……) 
NOT IN(value1,value2,…..)

EG:

SELECT * FROM test1
WHERE id IN(1,2);

匹配字符

匹配字符:

LIKE '字符串'
NOT LIKE '字符串'

匹配符号:
% 任意长度字符串(包括0)
_ 单个字符

EG:

SELECT * FROM test1
WHERE name like 'panda%';

是否为空

是否为空:

IS NULL
IS NOT NULL

EG:

SELECT * FROM test1
WHERE id IS NOT NULL;

多个条件组合

组合条件:

条件1 AND 条件2 …….
条件1 OR 条件2 …….

EG:

SELECT * FROM test1
WHERE id>2 AND name like 'panda%';

否定条件

否定:

NOT

对结构进行排序

ORDER BY 条件 [ASC |DESC] …………….

ORDER BY语句一般放在最后面,除了LIMIT语句
这里的条件可以是:单个字段、多个字段、表达式、别名、函数

实例:

ORDER BY <字段名称>  DESC 							   //单个字段排序
ORDER BY <字段名称>  DESC, <字段名称>  DESC 			 //多个字段排序
ORDER BY LNGTH(<字段名称>)  DESC 						//使用函数
ORDER BY (<字段名称>+1)/2  DESC 			   			//使用表达式
ORDER BY <SELECT语句中的别名>  DESC 			   		   //使用别名

对结果进行分组

单独使用GROUP BY

语法:

GROUP BY 表达式

注意:将只显示每个分组的一条记录

根据多个表示进行分组

GROUP BY 表达式, 表达式

显示汇总信息

USE panda_database;
SELECT name,COUNT(Gender) as 'count'
FROM panda_table3
GROUP BY Gender
WITH ROLLUP;

与GROUP_CONCAT()一起使用

语法:

GROUP_CONCAT(属性名1)

作用:将把所有属性名的值列出来

EG:

SELECT name,GROUP_CONCAT(id) FROM test1
GROUP BY name;

image

与聚合函数一起使用

聚合函数有:
MAX()
MIN()
AVG()
SUM()
COUNT()

与HAVING一起使用

HAVING与WHERE区别在于:
​ HAVING作用在组上或者说作用在分组属性上,用于筛查组内数据
​ WHERE作用在表或视图,用于筛查全部数据

限制结果条数

语法:

LIMIT 条数
LIMIT 起始位置, 条数

注意:起始位置从0开始

子查询

子查询概念

将查询结果嵌套在另一个查询中

子查询分类(按 结 果 集 的 行 列 数 不 同 )

  • 标量子查询。返回一个值,本质是单行单列。
  • 表子查询。返回一个包含多行多列的表。
  • 列子查询。返回一列多行的数据。
  • 行子查询。返回一行多列的数据。

不同位置支持的子查询类型:

  • select后面,仅支持标量子查询。
  • from后面,支持表子查询。
  • where或having后面,支持标量子查询、列子查询、行子查询。
  • exists后面,支持表子查询。

子查询的特点

  • 子查询放在小括号内。

  • 子查询一般放在条件的右侧。

  • 标量子查询,一般搭配着单行操作符使用,比如:> <> = < == <>。

  • 列子查询,一般搭配着多行操作符使用,比如:in、any/some、all。

  • 子查询的执行优先于主查询执行,主查询的条件用到了子查询的结果。

子查询可用的操作符有

SOME
ALL
IN
NOT IN
EXISTS  //如果返回行数大于1,返回TRUE,否则返回FALSE
NOT EXISTS
<
>
<=
>=
=
!=

IN / NOT IN 子查询

SELECT * 
FROM users
WHERE users.uids IN 
(SELECT buids FROM buy);

EXISTS / NOT EXISTS 子查询

SELECT * 
FROM users
WHERE NOT EXISTS
(SELECT buids FROM buy WHERE buids = 1);

比较运算符子查询

SELECT * 
FROM users
WHERE users.uids = 
(SELECT buids FROM buy);

SOME ALL 子查询

SOME表示只要满足内层查询的任何一个条件都可以执行外部查询
ALL表示外部查询必须满足内层查询的每一个结果
SOME和ALL通常配合比较运算符使用
SOME实例:

SELECT * 
FROM users
WHERE users.uids > SOME
(SELECT buids FROM buy);

ALL实例:

SELECT * 
FROM users
WHERE users.uids <= ALL
(SELECT buids FROM buy);

合并查询结果

UNION
UNION ALL

UNION 合并查询结果并去除重复,UNION ALL合并查询结果但保留重复。

注意:确保列的类型兼容。

适合场景:

  • 比较复杂的查询拆分成多个查询,然后合并。

  • 合并多个查询的结果。

表和属性的别名语法

表别名语法:

表名 [AS] 别名

字段别名

字段 [AS] 别名

分页查询

应用场景

当要显示的数据,一页显示不全,需要分页提交sql请求。

limit [offset] size;

offset 要显示条目的起始索引(起始索引从0开始),size 要显示的条目个数。

注意:limit语句放在查询语句的最后。

实例:

SELECT * FROM employees LIMIT 0,5;
SELECT * FROM employees LIMIT 5;

分页计算公式:

limit (page-1) * size,size;

正则表达查询

正则表达查询

属性 REGEXP '正则表达式'

正则表达式模式字符表

image
image

实例:查询特定字符开头的记录

SELECT * FROM users 
WHERE unames REGEXP '^panda';

实例:查询特定字符结尾的记录

SELECT * FROM users
WHERE unames REGEXP '666666$';

实例:用.来代替一个字符

SELECT * FROM users
WHERE unames REGEXP 'pa..a......';

实例:匹配指定字符的任意一个

SELECT * FROM users
WHERE unames REGEXP '[p|m]';

备注:还可以使用[0-9] [A-Z] [a-z]

实例:匹配指定字符外的任意一个

SELECT * FROM users
WHERE unames REGEXP '[^panda]';

实例:匹配指定字符

SELECT * FROM users
WHERE unames REGEXP 'panda';

实例:使用*和+匹配多个字符

\*  匹配任意个字符(包括0个)
\+  匹配任意个字符(至少一个)

EG:

SELECT * FROM users 
WHERE unames REGEXP 'panda*';

EG:

SELECT * FROM users 
WHERE unames REGEXP 'panda+';

实例:使用{m} {m,n}匹配字符连续出现的次数

SELECT * FROM users 
WHERE unames REGEXP 'panda6{6}';

EG2:

SELECT * FROM users 
WHERE unames REGEXP 'panda6{6,6}';

实例:大小写问题

默认正则匹配不区分大小写,使用BINARY区分大小写

SELECT * FROM users 
WHERE unames REGEXP BINARY 'panda6{6,6}';

实例:匹配以p开头的字符串

SELECT * 
FROM panda_table3 
WHERE name REGEXP '[p]{1,100}'

实例:匹配panda或cat

SELECT *
FROM panda_table3
WHERE name REGEXP 'panda|cat{1,100}';

实例:匹配特定符号问题

使用\符号,进行转义

SELECT * FROM users 
WHERE unames REGEXP BINARY '\\(panda\\)';

标签:教程,users,查询,实例,MySQL,DQL,REGEXP,WHERE,SELECT
来源: https://www.cnblogs.com/cqpanda/p/16648545.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有