本篇文章博主将带大家一起学习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);

更多相关文章

  1. Android(安卓)多模拟器使用adb shell
  2. Linux系统查看磁盘可用空间的5个命令
  3. ES6 变量声明,箭头函数,数组方法,解构赋值,JSON,类与继承,模块化练习
  4. 浅谈Java中Collections.sort对List排序的两种方法
  5. Python list sort方法的具体使用
  6. python list.sort()根据多个关键字排序的方法实现
  7. android上一些方法的区别和用法的注意事项
  8. android实现字体闪烁动画的方法
  9. Android中dispatchDraw分析

随机推荐

  1. Android短信数据库简析
  2. linux eclipse中运行android AVD 错误
  3. 记录EditText的输入属性InputType以及ime
  4. Android 3.0 r1 API中文文档(108) —— E
  5. Kotlin log 工具类
  6. android简单的乘法运算
  7. Android手动显示和隐藏软键盘
  8. AS Layout布局
  9. Hierarchy Viewer
  10. Android核心基础-3.Android(安卓)开发环