MySQL知识汇总(二):select
select语句
-- select语句 select 字段 from 表
-- 查询全部信息 select * from 表
SELECT * FROM `student2`
-- 查询指定字段 select `name` from 表
SELECT `name` FROM `student2`-- 起别名 给查询结果用 AS 起个其他的名字,可以是字段也可以是表
SELECT `name` AS '名字' FROM `teacher`
-- 拼接查询结果 concat(" ",字段) from 表
SELECT CONCAT('学号:',id) AS '新数据' FROM `teacher`
别名如下name为字段名,'名字'是别名
去重查询 关键字distinct
-- select distinct 字段名 from 表名
SELECT DISTINCT `name` FROM `student2`
select加表达式,查询表达式
where模糊查询
比较运算符 | 描述 |
IS NULL | 如果操作符为null,返回true |
IS NOT NULL | 如果操作符为null,返回false |
between a AND b | 若结果在a,b之间,返回true |
like | SQl匹配,字段匹配指定格式,若匹配返回true |
in(a1,a2,a3) | 字段若在指定值中,返回true |
like 通配符 %与_
% 表示在这里有0到任意个字符
_ 表示在这里有一个字符
如查找名字以王开头,后面有0到任意个字符的数据
SELECT `name` AS 'Mingzi' FROM `student2` WHERE `name` LIKE '王%'
查找表的name字段数据,限制条件是有一个“林”字符,该字符前至少有一个字符,后面有0到任意个字符
SELECT `name` AS '名字' FROM `student2` WHERE `name` LIKE '_%林%'
联表查询
图片来源于网络
联表查询将不同表中不同字段数据通过表中共有字段进行连接,提升查询效率
连表查询关键字join ,将返回两个表所有字段相等的行
-- join联表查询
SELECT s.`id`,`data`,`grade`,`name`
FROM student2 AS s
JOIN `result` AS r
ON s.`id`=r.`id`
内连接inner join, 返回左右表字段匹配行,与join相似
-- inner join 联表查询
SELECT s.`id`,`name`,`grade`,`data`
FROM `student2` AS s
INNER JOIN `result` AS r
ON s.`id`=r.`id`
左连接left join,以左表为基准,返回左表所有行,若有两表字段未匹配行,右表相关字段值以null填充
相似的,right join也是如此,但基准为右表
-- inner join 联表查询
SELECT s.`id`,`name`,`grade`,`data`
FROM `student2` AS s
INNER JOIN `result` AS r
ON s.`id`=r.`id`
对于共同字段一定要指定是谁的字段,否则会报错
自连接(了解)
自连接就是通过不同别名的方法对一张表按两张表进行处理
如该例子
我们创建一张包含三个字段的表存储有从属关系的书籍,三个字段分别是本书序号,父序号,本书名称
要求查询字段为父书籍与子书籍
SELECT s.`shu` AS '父栏目',r.`shu` AS '子栏目'
FROM `book` AS s,`book` AS r
WHERE s.`myId`=r.`fatherId`
结果
分页与排序
排序 关键字order by
order 用于排序的字段名 升序ASC/降序DESC
分页 关键字limit
格式limit 查询起始下标,页面大小
语句顺序where,order by,limit
子查询
子查询与联表查询相似,在查询过程中都涉及到了不同表的各个字段,与联表查询不同的是,子查询采用在where限定条件中嵌套了一次查询
如下
-- 子查询
-- 查询成绩大于30分的学生的名字和地址
select `name`,`address`
from student2
where `id` in(
select `id` from result where `data` >30
)
聚合函数
count()对数据表中记录进行统计
count(字段) 统计时忽略目标字段为null的数据
count(1),count(*) 统计所有数据
其他聚合函数
sum(字段) 该字段数据值总和
avg(字段) 平均值
max(字段) 最大值
min(字段) 最小值
分组过滤
分组 group by
group by 字段
按指定字段进行分组,指定字段值相同的数据分为一组,对各个组进行操作主要是方便对数据使用聚合函数操作。
过滤 having
对分组后数据进行过滤不能使用where语句,需要使用having语句,写在group by后面