283 views
Mysql

3.MySQL查询01

文章目录

MySQL查询

select基础语法

select * from 表名字;
select * from students;

select完整语法

select 去重选项 字段列表 [as 字段别名] from 数据源 [where子句] [group by 子句] [having子句] [order by 子句] [limit子句];
- 查询所有字段
- 查询指定字段
- 使用 as 给字段起别名
- 可以通过 as 给表起别名

条件查询where

使用where子句对表中的数据筛选,结果为true的行会出现在结果集中
--语法
select * from 表名 where 条件;
例:
select * from students where id=1;
---------------------------------------------------------
--比较运算符
- 等于: =
- 大于: >
- 大于等于: >=
- 小于: <
- 小于等于: <=
- 不等于: != 或 <>
--逻辑运算符
- and
- or
- not
--模糊查询
- like
- %表示任意多个任意字符
- \_表示一个任意字符
--范围查询
- in表示在一个非连续的范围内
- between ... and ...表示在一个连续的范围内
--空判断
- 注意:null(占用空间地址的)与""(空字符串,不占空间地址的)是不用的
- 判断空`is null`,这里注意不能用等于(=)
- 判断非空`is not null`

比较运算符

#select .... from 表名 where .....
#查询 大于18岁 的信息
select * from students where age > 18;
#查询小于18岁的信息
select * from students where age < 18;
#查询小于或者等于18岁的信息
select * from students where age <= 18;
#查询年龄为18岁的所有学生的名字
select * from students where age = 18;
#查询姓名不是影的
select * from students where name != '影';

逻辑运算符

#18到28之间的所有学生信息
select * from students where age >18 and age < 28;
#18岁以上的女性
select * from students where age > 18 and gender='女';
# 查询编号小于4或没被删除的学生
select * from students where id < 4 or is_delete = 0;
#查询年龄不是18岁的   女性 这个范围内的信息
select * from students where not (age = 18 and gender = '女'); -- 可读性 更高
select * from students where age != 18 and gender = '女';
#年龄不是小于或者等于18 并且是女性
select * from students where (not age <= 18)  and gender = 2;
select * from students where age > 18  and gender = 2;
#MySQL数据库中优先级:not>and>or 

模糊查询

-- like 
-- % 替换任意多个
-- _ 替换1个

#查询姓名中 以 "小" 开始的名字 
select * from students where name like '小%';  -- '小于' '小张' '小xx' 
#查询姓名中 有 "小" 所有的名字
select * from students where name like '%小%';       -- '小于' '小张' '小xx' 'x小x'
#查询有2个字的名字
select * from students where name like '__';        -- xx  xx
#查询至少有2个字的名字
select * from students where name like '__%';
#rlike 正则
#查询以 周开始的姓名
select name from students where name rlike "^周.*";
#查询以 周开始、伦结尾的姓名
select name from students where name rlike "^周.*伦$";

范围查询

#in (1, 3, 8)表示在一个非连续的范围内
#查询 年龄为18、34的姓名
select name from students where age in (18,34); 
#查询 姓名为影,老王的
select * from students where name in ('影','python');  
#not in 不非连续的范围之内
#年龄不是 18、34岁之间的信息
select name from students where age not in (18,34); 
#between ... and ...表示在一个连续的范围内
#查询 查询id是3到8的学生
select * from students where id between 3 and 8;
select * from students where id between 3 and 8;
#查询学生id是3到8的男生
select * from students where id between 3 and 8 and gender=1;
select * from students where (id between 3 and 8) and gender=1; -- 可读性高
#not between ... and ...表示不在一个连续的范围内
#查询 年龄不在在18到34之间的的信息
select * from students where age not between 18 and 34;
select * from students where not age between 18 and 34;

空判断

#判空is null  不能用 = 
#查询身高为空的信息
select * from students where name is null;
#判非空is not null
select * from students where name is not null;

聚合函数

- count(\*)表示计算总行数,括号中写星与列名,结果是相同的
- max(列)表示求此列的最大值
- min(列)表示求此列的最小值
- sum(列)表示求此列的和
- avg(列)表示求此列的平均值

#总数
#count查询学生总数
select count(*) from students;
#查询男性有多少人,女性有多少人
select count(*) as 男性人数 from students where gender = 1;
select count(*) as 女性人数 from students where gender = 2;
#最大值max
#查询最大的年龄
select max(age) from students;
#查询女性的最大编号
select max(id) from students where gender = 2;
#查询最大年龄的女性id
select max(age) from students where gender=2;
#最小值min
#查询未删除的学生最小编号
select min(id) from students where is_delete=0;
#求和sum
#查询男生的年龄和
#求和字段 是varchar则为0 如果字段内容是数字的话会进行相加
select sum(age) from students where gender = 1;  
#平均值avg
#查询未删除女生的年龄的平均值
select avg(age) from students where gender=2 and is_delete = 0; -- 默认保留4位小数
#计算平均年龄 sum(age)/count(*)
#四舍五入 round(123.23 , 1) 保留1位小数
#计算所有人的平均年龄,保留2位小数
select round(avg(age),2)  from students;
select round(sum(age)/count(*),2)  from students;
影子专属博客 赣ICP备17013143号