怎么在MySQL中使用DQL命令查询数据

52次阅读
没有评论

共计 4668 个字符,预计需要花费 12 分钟才能阅读完成。

自动写代码机器人,免费开通

怎么在 MySQL 中使用 DQL 命令查询数据?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

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 表中的数据。

怎么在 MySQL 中使用 DQL 命令查询数据

怎么在 MySQL 中使用 DQL 命令查询数据

查询表中所有数据列结果,采用“*”符号,效率低

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()  当前时间  # 返回当前时间 

怎么在 MySQL 中使用 DQL 命令查询数据

怎么在 MySQL 中使用 DQL 命令查询数据

避免 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  适用于时间范围 

逻辑操作符

怎么在 MySQL 中使用 DQL 命令查询数据

比较操作符

怎么在 MySQL 中使用 DQL 命令查询数据

使用 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 表数据为例:

怎么在 MySQL 中使用 DQL 命令查询数据

怎么在 MySQL 中使用 DQL 命令查询数据

SELECT * from subject ORDER BY classhour; # 升序
SELECT * from subject ORDER BY classhour desc; # 降序 

多字段排序:先按照第一个字段排序,再按照第二个字段排序。如果第一个字段数据相同,再按照第二个字段排序。

SELECT * from subject ORDER BY classHour,GradeID;

怎么在 MySQL 中使用 DQL 命令查询数据

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 条记录 

怎么在 MySQL 中使用 DQL 命令查询数据

怎么在 MySQL 中使用 DQL 命令查询数据

  总记录数:total

SELECT COUNT(subjectNO)  总数据  from subject;

怎么在 MySQL 中使用 DQL 命令查询数据

总页数:int  totalPage = total % pagesize ==0 ? total / pagesize : total  / pagesize  + 1

子查询

在查询语句 WHERE 条件子句中,又嵌套了另外一个查询语句

注意:子查询返回的结果一般是集合,建议使用 IN 关键字

SELECT subjectName from subject
where gradeID IN
(SELECT GradeID from grade);

怎么在 MySQL 中使用 DQL 命令查询数据

聚合函数

常用的统计函数: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 表为例

怎么在 MySQL 中使用 DQL 命令查询数据

(1)对 student 表按照地址分组统计   group by

SELECT Address,COUNT(Address) FROM student GROUP BY Address;

怎么在 MySQL 中使用 DQL 命令查询数据

HAVING 过滤分组的记录必须满足的次要条件

(2)对 student 表 按照地址分组,满足地址 = 1 的 HAVING

SELECT GROUP_CONCAT(StudentName),COUNT(Address) FROM student GROUP BY Address HAVING COUNT(Address)=1;

怎么在 MySQL 中使用 DQL 命令查询数据

合并 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;

怎么在 MySQL 中使用 DQL 命令查询数据

子查询    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);

怎么在 MySQL 中使用 DQL 命令查询数据

(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);

怎么在 MySQL 中使用 DQL 命令查询数据

子查询(any all)

ANY:判断条件中,若子查询中任意一个值满足条件,则执行父查询
ALL:判断条件中,若子查询中所有值满足条件,则执行父查询
 (1)满足条件:存在 subject.gradeid = grade.gradeid , 执行父查询  

SELECT subjectname,gradeid FROM subject 
WHERE GradeID  =ANY
(SELECT GradeID FROM grade);

怎么在 MySQL 中使用 DQL 命令查询数据

(2)不满足条件:所有 subject.gradeid = grade.gradeid,不执行父查询  

SELECT subjectname,gradeid FROM subject 
WHERE GradeID  =ALL
(SELECT GradeID FROM grade);

怎么在 MySQL 中使用 DQL 命令查询数据

看完上述内容,你们掌握怎么在 MySQL 中使用 DQL 命令查询数据的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注丸趣 TV 行业资讯频道,感谢各位的阅读!

向 AI 问一下细节

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-04发表,共计4668字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)