在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
本篇文章博主将带大家一起学习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 关键字进行模糊查询
#查询学生表中姓张*的学生姓名 SELECT StudentName from student where studentname like '张_'; SELECT StudentName from student where studentname like '%丽%'; # IN SELECT * from student where Address in ('四川','上海'); 注意:
NULL
内连接&自查询 如果需要多张数据表的数据进行查询,则可以通过连接运算符实现多个查询。 分类包括:
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返回记录行的数目 注意:
例如: 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 关键字对查询结果分组
以 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
注意:合并两张表时,列数必须一样才能合并。 两表列数不同时,会报以下错误:
(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 :判断条件中,若子查询中任意一个值满足条件,则执行父查询 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); 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持极客世界。 |
请发表评论