本篇文章小编给大家分享一下MySQL使用DQL命令查询数据方法,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
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);
忍者必须死34399账号登录版 最新版v1.0.138v2.0.72
下载勇者秘境oppo版 安卓版v1.0.5
下载忍者必须死3一加版 最新版v1.0.138v2.0.72
下载绝世仙王官方正版 最新安卓版v1.0.49
下载Goat Simulator 3手机版 安卓版v1.0.8.2
Goat Simulator 3手机版是一个非常有趣的模拟游
Goat Simulator 3国际服 安卓版v1.0.8.2
Goat Simulator 3国际版是一个非常有趣的山羊模
烟花燃放模拟器中文版 2025最新版v1.0
烟花燃放模拟器是款仿真的烟花绽放模拟器类型单机小游戏,全方位
我的世界动漫世界 手机版v友y整合
我的世界动漫世界模组整合包是一款加入了动漫元素的素材整合包,
我的世界贝爷生存整合包 最新版v隔壁老王
我的世界MITE贝爷生存整合包是一款根据原版MC制作的魔改整