MySQL----DQL

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 数据查询语言

SELECT 要查询的列名称

FROM 表名

[WHERE 满足的行条件]

[GROUP BY 分组的依据]

[ORDER BY 排序的依据]

[LIMIT 限定输出结果];

 

-- 查询所有数据

select * from students;

 

-- 查询指定列

select sname,age,gender from students;

 

-- 查询一个或多个表中的数据

select students.sname,students.age,teachers.tname,teachers.age,teachers.tsubject from students,teachers;

 

运算符                     

名称                                 

示例

=                                 

等于                                     

id=5

!=                                 

不等于                         

id!=5

>                                 

大于                                 

id>5

>=                                 

大于等于                 

id>=5

<                                 

小于         

id<5

<=                                 

小于等于                 

id<=5

!=或<>                 

不等于                         

id!=5

 

 

关键字                                 

名称                                                 

示例

AND                                         

和                                                 

name='lhd' AND age=25

OR                                                

或                                                 

name='lhd' OR name='lt'

IS NULL                         

为空                                         

phone IS NULL

IS NOT NULL         

不为空                                 

id IS NOT NULL

BETWEEN AND         

在...和...区间

id BETWEEN 1 AND 5

IN                                         

在...集合中                         

id IN (3,4,5)

NOT IN                                 

不在...范围里                 

id NOT IN (100,101)

LIKE                                         

模式匹配                                         

name LIKE('a%')

NOT LIKE                         

模式匹配                                         

name NOT LIKE ('a%')

REGEXP                                 

常规表达式                                 

name 正则表达式;

 

 

-- in

select * from students where age in (18,19,20); #in 表示在集合中,not in 表示不在集合中

select * from students where sname not in ('张三','李四');

 

 

-- between and

select * from students where age between 12 and 18;

select * from students where age not between 12 and 18;

 

-- like

select * from students where sname like '小%';

select * from students where hobby like '羽_球';

 

-- is null

select * from students where phone is null;

select sname from students where hobby is not null;

 

-- and

select * from students where age>15 and address='China';

select * from students where sid>1 and sid=4;

 

-- or

select * from students where age>15 or address='China';

select * from students where sid=1 or sid=4;

 

-- distinct 去除查询结果中的重复行

select distinct * from students;

select distinct address from students;

 

-- order by 对查询结果排序

select * from students order by age asc; #默认按升序排列,asc 可省略

select * from students order by age desc; #加 desc 按降序排列

 

-- group by 查询结果只显示每组的一条记录

select sid,sname,age,phone from students group by age; #数据中两个年龄16岁的只显示了一个

select sid,sname,age,phone,group_concat(age) from students group by age; #加上group_concat()函数,可以显示所有数据记录

select sid,sname,age,address,group_concat(age,address) from students group by age,address;

 

-- limit 限定输出行数

select * from students order by age;

select * from students order by age limit 3; #取前三条数据

select * from students order by age limit 0,3; #从第1(编号从0开始)条数据开始查询3条

select * from students order by age limit 2,2; #从第3条数据开始查询2条

 

 

-- regexp 正则表达式

-- ^ 匹配以特定字符或字符串开头的记录

select * from students where sname regexp '^小';

-- $ 匹配以特定字符或字符串结尾的记录

select * from students where address regexp 'na$';

-- . 匹配字符串的任意一个字符,包括回车和换行符

select * from students where phone regexp '1.'; #当.在给定的字符后面,那么查询的结果不能以该字符结尾且包含该字符

select * from students where phone regexp '.1'; #当.在给定的字符前面,那么查询的结果不能以该字符开头且包含该字符

select * from students where phone regexp '.2345.'; #包含指定字符,不能以该字符开头或结尾

select * from students where phone regexp '345'; #包含指定字符

-- [字符集合]

select * from students where gender  regexp '[男]'; #匹配“字符集合”中的任意一个字符

select * from students where gender regexp '[^男]'; #匹配除“字符集合”以外的任意一个字符

-- S1|S2|S3 匹配S1 S2 S3中的任意一个字符串

select * from students where address regexp 'China|北京|西安';

-- * 匹配多个该符号之前的字符,包括0和1个

select * from students where phone regexp '6*';

select * from students where phone regexp '3*567';

select * from students where phone regexp '1*01';

-- + 匹配多个该符号之前的字符,最少一个,且必须紧挨着该字符

select * from students where phone regexp '2+34';

select * from students where phone regexp '234'; #用法和上一样

-- 字符串{N} 匹配字符串连续出现N次

select * from students where phone regexp '3{2}'; #注意:必须是连续出现

-- 字符串{M,N} 匹配字符串出现至少M次,最多N次

select * from students where phone regexp '1{1,4}';

 

 

 

 

 

 

-- 聚合函数查询

-- count()

select count(sname) from students; #不带*,返回非null值行的数目

select count(phone) from students;

select count(age),count(*) from students; #带*,返回所有行的数目

select age,count(*),avg(age) from students group by age; #统计各个年龄的人数

 

 

-- sum() 函数可以求出表中某个字段取值的总和

select sum(age) from students;

select sum(sid) from students;

select s.sname , c.english+c.chinese+c.math as total from student s,score c where s.sid = c.sid order by total desc; #求学生总成绩

 

-- avg() 函数可以求出表中某个字段取值的平均值

select avg(age) from students;

 

-- max() 函数可以求出表中某个字段取值的最大值

select max(age) from students;

 

-- min() 函数可以求出表中某个字段取值的最小值

select min(age) from students;

 

-- round() 保留几位小数

select round(avg(age),1) from students;

 

 

 

 

-- 内连接查询,

select s.sname,s.age,s.grade from students s inner join teachers t where s.grade  = t.grade;

select s.sname,s.age,s.grade from students s, teachers t where s.grade  = t.grade;

# 内连接inner join 可以省略,用逗号代替;

# 内连接关键字 where 可以用 on 替代,外连接只能用on

# 内外连接的条件语句可以加括号

 

 

-- 左外连接查询

select s.sname,t.tname,s.grade from students s left join teachers t on (s.grade = t.grade);

 

-- 右外连接查询

select s.sname,t.tname,t.grade from students s right join teachers t on s.grade = t.grade;

 

-- 复合条件连接查询

select s.sname,t.tname,s.grade from students s,teachers t where s.grade = t.grade and s.grade > 2;

 

 

 

 

-- 子查询

 

-- 带关键字in的子查询

select * from students where sid in(select tid from teachers order by tid);

select tid from teachers order by tid;

 

-- 带比较运算符的子查询

select * from students where grade = (select grade from teachers where tname = '潘老师');

select grade from teachers where tname = '潘老师';

 

-- 带关键字exists的子查询

select * from students where exists (select * from teachers where tid = 1);

select * from students where sid = 2 and exists (select * from teachers where tid = 1);

 

-- 带关键字any的子查询

select * from students where sid > any (select tid from teachers);

select tid from teachers;

 

-- 带关键字all的子查询

select * from students where sid > all (select tid from teachers where tid >3);

select tid from teachers where tid >3;

 

 

-- 合并查询结果

-- union 将所有的查询结果合并到一起,并且去除相同记录

select address from students union select address from teachers;

 

-- union all 只是简单地将结果合并到一起

select address from students union all select address from teachers;

 

 

-- 定义表和字段的别名

select * from students s where s.sid = 2;

select sname s,grade g from students;

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
分布式计算 大数据 Scala
【大数据技术Hadoop+Spark】Spark RDD创建、操作及词频统计、倒排索引实战(超详细 附源码)
【大数据技术Hadoop+Spark】Spark RDD创建、操作及词频统计、倒排索引实战(超详细 附源码)
545 1
|
存储 关系型数据库 MySQL
MySQL数据库进阶第三篇(MySQL性能优化)
MySQL数据库进阶第三篇(MySQL性能优化)
|
10月前
|
机器学习/深度学习 自然语言处理 数据可视化
【由浅到深】从神经网络原理、Transformer模型演进、到代码工程实现
阅读这个文章可能的收获:理解AI、看懂模型和代码、能够自己搭建模型用于实际任务。
1030 56
|
11月前
|
缓存 JavaScript 开发者
网页离线缓存 Service Worke
网页离线缓存 Service Worke
333 4
|
消息中间件 网络协议 Java
消息中间件-ActiveMQ
消息中间件-ActiveMQ
|
数据采集 监控 安全
网络安全产品之认识入侵检测系统
随着计算机网络技术的快速发展和网络攻击的不断增多,单纯的防火墙策略已经无法满足对安全高度敏感的部门的需要,网络的防卫必须采用一种纵深的、多样的手段。因此,入侵检测系统作为新一代安全保障技术,成为了传统安全防护措施的必要、有效的补充。[《安全防御之入侵检测与防范技术》](http://xiejava.ishareread.com/posts/48309864/)介绍了入侵检测技术,今天让我们从入侵检测系统的工作原理、主要功能、主要类型及与入侵防御系统的关系与区别等方面认识入侵检测系统。
388 2
|
自然语言处理 算法 机器学习/深度学习
大语言模型 RAG 论文总结(2023~202404)(2)
大语言模型 RAG 论文总结(2023~202404)
656 0
|
应用服务中间件 nginx
Docsify——部署后显示404且无法访问README.md
Docsify——部署后显示404且无法访问README.md
172 0
|
前端开发 JavaScript NoSQL
全套检验系统(LIS)源码 云LIS系统源码 区域医疗云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件。这套系统通常与其他信息系统比如医院信息系统(HIS)连接。实验室信息系统由多种实验室流程模块构成,这些模块可以依据客户的实际情况进行选择和配置。选择适合的实验室信息系统对于使用者非常重要,往往要通过几个月的研究和计划。系统的安装调试对于不同的研究阶段也从几周到几个月不等,实验室的研究工作有多少种就有多少种实验室信息系统。大型的实验室信息系统几乎包括了所有的实验室研究的学科内容,比如血液学、化学、免疫学、血库、外科病理学、解剖病理学、在线细胞计数和微生物学。这个条目将说明临
230 2
|
Web App开发 Java 测试技术
《手把手教你》系列基础篇之(一)-java+ selenium自动化测试-环境搭建(上)(详细教程)
【2月更文挑战第10天】《手把手教你》系列基础篇之(一)-java+ selenium自动化测试-环境搭建(上)(详细教程) jmeter系列的文章结束,本来想趁热打铁顺别将Jmeter和接口测试介绍一下,但是感觉Jmeter时间太长了怕大家吃腻了,还有一个原因就是许多小伙伴们或者童鞋们私信问宏哥什么时候可以有java版的selenium,因为不会Python,或者现在大多数企业和公司还是把java奉在神坛上,所以宏哥打算就换个口味,介绍一下java+ selenium自动化测试。大致和前边的python+selenium自动化测试差不多。基于java和selenium做自动化测试.
345 0

热门文章

最新文章