MySQL 使用DQL命令查询数据的实现方法
本篇文章博主将带大家一起学习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 [偏移量,返回结果记录数]; #指定查询的记录从哪条至哪条
以下例子用student表中的数据。
查询表中所有数据列结果,采用 “*” 符号,效率低
select * from student;
select StudentName,Phone from student;
注意:AS 可省略不写
(1)可给数据列取一个新别名
select StudentName as '学生姓名' from student;
select stu.address from student as stu;
SELECT Phone +1 AS Tel FROM student;
作用:去掉SELECT查询出来的重复值(当所有返回值都相同时,只返回一条记录)
语法:
SELECT DISTINCT 字段名1,字段名2,... from 表名
当过滤多列重复值时,只有当选择过滤的列都存在重复值才进行过滤
SELECT DISTINCT StudentNo,address from student;
SELECT DISTINCT address from student;
SELECT VERSION(),100*3 as 乘积; #返回Mysql 版本和计算结果 SELECT NOW() '当前时间'; #返回当前时间
SELECT VERSION() as MySQL_V,12.3*100 as expression;#返回结果不会与后台开发程序发生混淆
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 '%丽%';# INSELECT * 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 [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条记录
SELECT COUNT(subjectNO) '总数据' from subject;
子查询
在查询语句WHERE 条件子句中,又嵌套了另外一个查询语句
注意:子查询返回的结果一般是集合,建议使用IN关键字
SELECT subjectName from subjectwhere 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 关键字对查询结果分组
- 对所有的数据进行分组统计
- 分组的字段可以有多个,并依次分组
- 与 HAVING 结合使用,进行分组后的数据筛选
以 student 表为例
(1)对student 表按照地址分组统计 group by
SELECT Address,COUNT(Address) FROM student GROUP BY Address;
(2)对 student 表 按照地址分组,满足地址=1的 HAVING
SELECT GROUP_CONCAT(StudentName),COUNT(Address) FROM student GROUP BY Address HAVING COUNT(Address)=1;
- 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 / NOT EXISTS 子查询条件成立则显示父查询的结果,否则不显示结果
(1)子查询条件为真 (grade 表中 gradeid 1~5,存在1)
SELECT subjectName,GradeID FROM subjectWHERE EXISTS (SELECT * FROM grade WHERE GradeID=1);
SELECT subjectName,GradeID FROM subjectWHERE NOT EXISTS (SELECT * FROM grade WHERE GradeID=999);
SELECT subjectName,GradeID FROM subjectWHERE EXISTS (SELECT * FROM grade WHERE GradeID=999);
SELECT subjectName,GradeID FROM subjectWHERE NOT EXISTS (SELECT * FROM grade WHERE GradeID=1);
ANY :判断条件中,若子查询中任意一个值满足条件,则执行父查询
ALL :判断条件中,若子查询中所有值满足条件,则执行父查询
(1)满足条件:存在 subject.gradeid >= grade.gradeid ,执行父查询
SELECT subjectname,gradeid FROM subject WHERE GradeID >=ANY(SELECT GradeID FROM grade);
SELECT subjectname,gradeid FROM subject WHERE GradeID >=ALL(SELECT GradeID FROM grade);
更多相关文章
- Android(安卓)多模拟器使用adb shell
- Linux系统查看磁盘可用空间的5个命令
- ES6 变量声明,箭头函数,数组方法,解构赋值,JSON,类与继承,模块化练习
- 浅谈Java中Collections.sort对List排序的两种方法
- Python list sort方法的具体使用
- python list.sort()根据多个关键字排序的方法实现
- android上一些方法的区别和用法的注意事项
- android实现字体闪烁动画的方法
- Android中dispatchDraw分析