数据操作重点 查询
1、查询数据(重点):
语法:
select 字段1,字段2 from 表名 [where Clause][LIMIT N][OFFSET M]
² 查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
² SELECT 命令可以读取一条或者多条记录。
² 你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
² 你可以使用 WHERE 语句来包含任何条件。
² 你可以使用 LIMIT 属性来设定返回的记录数。
² 你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。
4.1查询所有的列
select * from 表名;
4.2 使用别名
select 字段1 as ‘新名’,字段2 from 表名
4.3 where条件(逻辑and or 比较>、<、=、>=、<=、<>不等于)
² where子句中可以指定任何条件。
² where中可以使用and或or指定一个或多个条件。
² where可以运用于delete或者update命令中。
例如:select * from 表名 where 字段1>值 and 字段2<值;
使用主键来作为 WHERE 子句的条件查询是非常快速的。
4.4 where条件中between and
select * from 表名 where 字段 between 75 and 90;
4.5 空条件查询 (NULL 值处理)
为了处理这种情况,MySQL提供了三大运算符:
v IS NULL: 当列的值是 NULL,此运算符返回 true。
v IS NOT NULL: 当列的值不为 NULL, 运算符返回 true。
v <=>: 比较操作符(不同于=运算符),当比较的的两个值为 NULL 时返回 true。
注:关于 NULL 的条件比较运算是比较特殊的。你不能使用 = NULL 或 != NULL 在列中查找 NULL 值 。
select * from 表名 where 字段 IS NULL;(IS NOT NULL)
4.6 模糊查询like(重点)
有时候我们需要获取 runoob_author 字段含有 "COM" 字符的所有记录,这时我们就需要在 WHERE 子句中使用 SQL LIKE 子句。
SQL LIKE 子句中使用百分号 %字符来表示任意字符,类似于UNIX或正则表达式中的星号 *。
如果没有使用百分号 %, LIKE 子句与等号 = 的效果是一样的。
例如:select * from 表名 where 字段 like ‘%w%’;
select * from 表名 where 字段 like ‘李_’;
%:表示任意字符;字符可有可无
_:表示一个字符;此字符必须有
4.4去除重复数据(DISTINCT)
select distinct 字段1 from 表名;
查询id 为1. 为2 为5的
Select * from table where id in(1,2,5)
查询id不为1.为2 为5的
Select * from table where id not in(1,2,5)
子查询select * from student where gid =(select id from teacher where name='王老师');
4.5排序(order by),
如果我们想要对读取的数据进行排序,我们可以使用order by子句来设定按那个字段那种方式来排序。
select *from 表名 order by 列名 asc(asc升序默认;desc降序)
² 你可以使用任何字段来作为排序的条件,从而返回排序后的查询结果。
² 你可以设定多个字段来排序。
² 你可以使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列。
² 你可以添加 WHERE...LIKE 子句来设置条件。
2、聚合函数查询:(常用的)
min最小值;max最大值;sum值的和;avg平局值;count统计行数
3、分组查询:
group by:
根据一个或多个列对结果集进行分组。
表示对所取得的数据,以所给定的字段来进行分组。
最后的结果就是将数据分成了若干组,每组作为一个“整体”成为一行数据。
于是,对于分组查询(group by),select中出现的信息,通常就只有两种情况的信息了:
² 分组本身的字段信息;
² 一组的综合统计信息,主要包括:
ü 计数值: count(字段), 表示求出一组中原始数据的行数;
ü 最大值: max(字段),表示求出一组中该字段的最大值;
ü 最小值: min(字段),表示求出一组中该字段的最小值;
ü 平均值: avg(字段),表示求出一组中该字段的平均值;
ü 总和值: sum(字段),表示求出一组中该字段的累加和;
4、分组后筛选使用:
group by 字段 having
having的含义跟where的含义一样,只是having是用于对group by分组的结果进行的条件筛选。
5、分页查询:
limit 起始行,行数;
6、多表联合查询(重点)
我们已经学会了如何在一张表中读取数据,这是相对简单的,但是在真正的应用中经常需要从多个数据表中读取数据。
JOIN 按照功能大致分为如下三类:
- INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
- LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
- RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
join on
select * from 表1 as a join 表2 as b on a.id=b.lid where a.id =3;