本篇文章博主将带大家一起学习MySQL中常用的数据查询语言。
DQL(Data Query Language 数据查询语言)
SELECT 语法
SELECT [ALL | DISTINCT]
{ * | table.* | [table.field1 [as alias1][,table.field2] [as alias2][,...]]}
FROM table_name [as table_alias]
[left | out | inner join table_name2] #联合查询
[WHERE ...] #指定结果需要满足的条件
[GROUP BY ...] #指定结果按照哪几个字段来分组
[HAVING ...] #过滤分组的记录必须满足的次要条件
[ODER BY ...] #指定查询记录按一个或者多个条件排序
[LIMIT [偏移量,返回结果记录数]; #指定查询的记录从哪条至哪条
基本查询语句&AS
以下例子用student表中的数据。
查询表中所有数据列结果,采用 “*” 符号,效率低
select * from student;
可指定查询列,效率高
select StudentName,Phone from student;
AS 子句的作用和用法
注意:AS 可省略不写
(1)可给数据列取一个新别名
select StudentName as '学生姓名' from student;
(2)给表取别名
select stu.address from student as stu;
(3)可把计算或总结的结果用另一个新名称来代替
SELECT Phone +1 AS Tel FROM student;
DISTINCT 关键字
作用:去掉SELECT查询出来的重复值(当所有返回值都相同时,只返回一条记录)
语法:
SELECT DISTINCT 字段名1,字段名2,... from 表名
注意:ALL 关键字是默认的,返回所有记录,与之相反
当过滤多列重复值时,只有当选择过滤的列都存在重复值才进行过滤
SELECT DISTINCT StudentNo,address from student;
过滤单列:查询学生表中的地址
SELECT DISTINCT address from student;
SQL语句中的表达式
SELECT VERSION(),100*3 as 乘积; #返回Mysql 版本和计算结果
SELECT NOW() '当前时间'; #返回当前时间
避免SQL返回结果中包含“.” ,“*”,和括号等干扰开发语言程序
SELECT VERSION() as MySQL_V,12.3*100 as expression;
#返回结果不会与后台开发程序发生混淆
拼接 CONCAT
SELECT CONCAT(studentName,'@.com') as Email from student;
数值类型相加
select StudentNo+100 from student;
比较运算符&通配符
where条件语句:用于检索数据表中符合条件的记录
搜索条件可以由一个或多个逻辑表达式组成,结果一般为真或假
搜索条件的组成:逻辑操作符、比较操作符
#where 条件语句
select * from student where address='四川';
#查询学生表中电话号码不为空的学员姓名
select StudentName from student where Phone is not null;
#查询学生表中电话号码为空的学员姓名
select StudentName from student where Phone is null;
#查询刚删掉的数据——空值
select StudentName from student where Phone = '';
# BETWEEN AND 适用于时间范围
逻辑操作符
比较操作符
使用 LIKE 关键字进行模糊查询
与“%”一起使用,表示匹配0个或任意个字符
与“_”一起使用 表示匹配单个字符
#查询学生表中姓张*的学生姓名
SELECT StudentName from student where studentname like '张_';
SELECT StudentName from student where studentname like '%丽%';
# IN
SELECT * from student where Address in ('四川','上海');
注意:
数值数据类型的记录之间才能进行算数运算
相同的数据类型的数据之间才能进行比较
NULL
null 代表“无值”
区别于零值0和空字符串“ ”
只能出现在定义允许为NULL的字段
须使用 IS NULL 或 IS NOT NULL 比较操作符去比较
内连接&自查询
如果需要多张数据表的数据进行查询,则可以通过连接运算符实现多个查询。
分类包括:
内连接(inner jion):
等值和非等值的连接查询
自身连接查询
外连接(out jion)
左连接(LEFT JION)
右连接(RIGHT JION)
ORDER BY 排序查询
对select 语句查询得到的结果,按某些字段进行排序
与DESC(降序)或ASC(升序)搭配使用,默认为ASC
以subject表和grade表数据为例:
SELECT * from subject ORDER BY classhour; #升序
SELECT * from subject ORDER BY classhour desc; #降序
多字段排序:先按照第一个字段排序,再按照第二个字段排序。如果第一个字段数据相同,再按照第二个字段排序。
SELECT * from subject ORDER BY classHour,GradeID;
LIMIT分页
LIMIT [m,] n 或 LIMIT n OFFSET m
限制SELECT返回结果的行数
m为第一个返回记录行的偏移量
n返回记录行的数目
注意:
m不指定,则偏移量为0,从第一条开始返回前n条记录
LIMIT 常用于分页显示
如果超出表中数据,则显示全部
例如:
SELECT * FROM grade LIMIT 3; #返回前3条记录
SELECT * FROM grade LIMIT 1,3; #返回2~4条记录
总记录数:total
SELECT COUNT(subjectNO) '总数据' from subject;
总页数:int totalPage = total % pagesize ==0 ? total / pagesize : total / pagesize + 1
子查询
在查询语句WHERE 条件子句中,又嵌套了另外一个查询语句
注意:子查询返回的结果一般是集合,建议使用IN关键字
SELECT subjectName from subject
where gradeID IN
(SELECT GradeID from grade);
聚合函数
常用的统计函数:COUNT()、SUM()、AVG()、MAX()、MIN()
SELECT COUNT(StudentNo) '总数据' FROM student;
SELECT sum(classHour) '总学时'from subject;
SELECT AVG(classHour) '平均学时' FROM subject;
SELECT MAX(classHour) '最长学时' FROM subject;
SELECT MIN(classHour) '最短学时' FROM subject;
分组 GROUP BY
使用 GROUP BY 关键字对查询结果分组
对所有的数据进行分组统计
分组的字段可以有多个,并依次分组
与 HAVING 结合使用,进行分组后的数据筛选
以 student 表为例
(1)对student 表按照地址分组统计 group by
SELECT Address,COUNT(Address) FROM student GROUP BY Address;
HAVING 过滤分组的记录必须满足的次要条件
(2)对 student 表 按照地址分组,满足地址=1的 HAVING
SELECT GROUP_CONCAT(StudentName),COUNT(Address) FROM student GROUP BY Address HAVING COUNT(Address)=1;
合并 UNION 、UNION
ALLUNION #合并完全相同数据
UNION ALL #合并所有数据
注意:合并两张表时,列数必须一样才能合并。
两表列数不同时,会报以下错误:
[SQL]SELECT * FROM grade UNION SELECT * FROM student;
[Err] 1222 - The used SELECT statements have a different number of columns
(1)合并 subject 表和 student表
SELECT * FROM subject UNION SELECT * FROM student;
SELECT * FROM subject UNION ALL SELECT * FROM student;
子查询 EXISTS ——>true false
EXISTS / NOT EXISTS 子查询条件成立则显示父查询的结果,否则不显示结果
(1)子查询条件为真 (grade 表中 gradeid 1~5,存在 1)
SELECT subjectName,GradeID FROM subject
WHERE EXISTS
(SELECT * FROM grade WHERE GradeID=1);
或
SELECT subjectName,GradeID FROM subject
WHERE NOT EXISTS
(SELECT * FROM grade WHERE GradeID=999);
(2)子查询条件为假 (grade 表中 gradeid 1~5,不存在 999)
SELECT subjectName,GradeID FROM subject
WHERE EXISTS
(SELECT * FROM grade WHERE GradeID=999);
或
SELECT subjectName,GradeID FROM subject
WHERE NOT EXISTS
(SELECT * FROM grade WHERE GradeID=1);
子查询(any & all)
ANY :判断条件中,若子查询中任意一个值满足条件,则执行父查询
ALL :判断条件中,若子查询中所有值满足条件,则执行父查询
(1)满足条件:存在 subject.gradeid >= grade.gradeid ,执行父查询
SELECT subjectname,gradeid FROM subject
WHERE GradeID >=ANY
(SELECT GradeID FROM grade);
(2)不满足条件:所有subject.gradeid >= grade.gradeid ,不执行父查询
SELECT subjectname,gradeid FROM subject
WHERE GradeID >=ALL
(SELECT GradeID FROM grade);
来源:https://blog.csdn.net/weixin_43817064/article/details/97936194


猜你喜欢
- Oracle提供了不少方法用于数据空间的使用、监控和维护,同时也在各版本中陆续对这方面的功能进行了增强,目的在于简化这方面工作的复杂度,提高
- 本人之前写了一套基于unnitest框架的UI自动化框架,但是发现了pytest框架之后觉得unnitest太low,现在重头开始学pyte
- drop procedure sp_name//在此之前,小编给大家讲述过MYSQL语法的基本知识,本篇内容,小编通过下面的一个实例,给读者
- 1.了解oracle外部表 外部表定义:结构被存放在数据字典,而表数据被放在OS文件中的表 作用:在数据库中查询OS文件的数据,还可以将OS
- 本文实例为大家分享了python图片插入文字的具体代码,供大家参考,具体内容如下问题如何在图片中插入大量文字并且自动换行效果原始图效果图注明
- vue3 ref构建响应式变量失效问题描述在Vue3中使用ref声明响应式变量,同时用函数对值进行变化,但是无法响应式改变值<temp
- python 中有6大标准类型:数字(Number)字符串(String)列表(List)元组(Tumple)集合(Set)字典(Dicti
- 查看字符编码:import chardetresponse = chardet.detect(b'\xe5\xbd\x93\xe5\
- Python脚本有一个毛病,当使用相对路径时,被另一个不同目录下的py文件中导入时,会报找不到对应文件的问题。感觉是当前工作目录变成了导入p
- 本文实例讲述了Python实现将蓝底照片转化为白底照片功能。分享给大家供大家参考,具体如下:import cv2import numpy a
- 1.使用nuget下载:Microsoft.Extensions.Configuration.JsonPomelo.EntityFramew
- 发现问题在使用pip install下载其他包时,报了错,如图:提示:“You are using pip versio
- python库-dotenv包 | .env配置文件背景我们开发的每个系统都离不开配置信息,这些信息都非常敏感,一旦泄露出去后果非常严重,被
- 问题你需要将一个Python对象序列化为一个字节流,以便将它保存到一个文件、存储到数据库或者通过网络传输它。解决方案对于序列化最普遍的做法就
- df.fillna主要用来对缺失值进行填充,可以选择填充具体的数字,或者选择临近填充。官方文档DataFrame.fillna(self,
- 译者按:原文写于2011年末,虽然文中关于Python 3的一些说法可以说已经不成立了,但是作为一篇面向从其他语言转型到Python的程序员
- 今天打包selenium一个简单的请求,打完包本机运行exe没有问题,换台机器就闪退,非常蛋疼找了半天原因。下面简述下,防止踩坑,如果闪退十
- Python爬虫可以爬取的东西有很多,Python爬虫怎么学?简单的分析下:如果你仔细观察,就不难发现,懂爬虫、学习爬虫的人越来越多,一方面
- 几年前,看到一台湾人写的一段程序(好像是《日语基础》),在网页上实现音视频与文字的同步播放(就是音视频播到哪部分,相应的文字就亮显,点击某一
- 目的:在numpy数组中知道指定元素的索引函数: np.argwhere>>>x>>>array([[0