myaql 语句的查询
简单查询
最基础的查询,直接从表中查处需要的数据
select 列名 from 表名
还可以加上别名
select 列名 as 别名 from 表名
条件查询
在简单查询的基础上在后面加上条件
select 列名 from 表名 where 条件
case....end
用法:
case stu_sex when 1 then '男' else '女' end as 性别
表示在查询出来的表中,stu_sex
列中如果为1则显示为男,否则就为女,将stu_sex
别名为性别
当数据中有空值时不能用 数据=null
,而应该表示为 数据 is null
or 数据 is not null
注意:
分组以前的数据筛选使用where
,分组以后的筛选使用having
在条件筛选过程中还要注意 =
和 in
的使用。
例:
-- 查询1111、2222、3333这三门课平均成绩大于等于90的学生学号和平均成绩
select
stu_id as 学号,
round(avg(score),2) as 平均成绩
from tb_record
where cou_id in (1111,2222,3333)
group by stu_id
having 平均成绩>=90;
聚合函数
排序: 升序:order by 数据 asc;
;降序:order by 数据 desc;
去重: 在需要去重的数据前面加上distinct
curdate()
:计算当前时间
datediff()
: 计算时间差
floor()
: 向下取整
max()、min()、avg()、sum()、std()
:计算最大、最小、平均值、总和、标准差
ifnull()
: 遇到空值将其替换成指定值
limit x,y
:跳过x条数据拿到y条数据
limit x
:拿到x条数据
offset x
:跳过x条数据
round()
:原来保留几位小数
子查询(嵌套查询)
在查询语句中有两个或多个select
-- 查询年龄最大的学生的姓名(子查询)
select
stu_name as 姓名 from tb_student
where stu_birth=(
select min(stu_birth) from tb_student
);
连接查询
当要查询的数据在多个表中,需要将多个表连接起来
内连接
表1 inner join 表2 on 表1.key=表2.key
表1,表2 where 表1.key=表2.key
表1 natural join 表2
外连接
– 左外连接:确保左表(写在join前面的表)中所有记录都能查出来,不满足连接条件的补充null
表1 left outer join 表2 on 表1.key=表2.key
– 右外连接:确保右表(写在join后面的表)中所有记录都能查出来,不满足连接条件的补充null
表1 right outer join 表2 on 表1.key=表2.key
– 全外连接:确保左表,右表中所有记录都能查出来,不满足连接条件的补充null
– mysql不支持全外连接,可以用左外连接并右外连接