MySql教程

MySQL教程 - DQL操作

本文主要是介绍MySQL教程 - DQL操作,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

更新记录
转载请注明出处。
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\\)';
这篇关于MySQL教程 - DQL操作的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!