MySql查询笔记

关键字

key: as

# 列更名,表更名,id列名更改为uuid
select id uuid, dish_price from dish;
select id as uuid, dish_price from dish;
select ak47.id from dish as ak47;
select ak47.id from dish ak47;

key: not

select id, collect_del del from collect where not collect_del=1;

key: is
作用:判断null

# 在一个集合里,判断空与非空
select * from user where user_age is null;
select * from user where user_age is not null;

key: in

# 在一个集合里,查询非连续段的数据
select * from user where user_age in (20, 40);
# 相当于 where user_age = 20 or user_age = 40;

key: between … and …
作用:范围

# 在一个集合里,查询在连续段的数据
select * from user where not user_age between 1 and 20;
# 相当于 where user_age<1 or user_age>20;

key: group by
作用:分组

# 结果为0, 1
select dish_del from dish group by dish_del;
# 结果为10, 2
select count(dish_del) from dish group by dish_del;

key: group by … having…

# having后是分组后的对象的条件
# 想象10个组,一个组3条记录,
# having后的条件是针对组的条件,
# 满足having的组有4个,12条记录,
# 所以having后条件必须是聚合条件,组合起来在去比较
select dish_del from dish group by dish_del having sum(id)>40;

key: concat
作用:拼接
它连接属性值没有空格或者分隔符

select concat(sid, name) from A;

key: group_concat

# group_concat(distinct id order by id desc separator '-')
# 拼接了同一个组下的id,
# 参数由四部分组成
# distinct 删除重复(可不写)
# id,col,coll 把组内的连接到一起,这是列属性
# order by id desc排序(可不写)
# separator '-',分隔符(可不写,不写时分隔符是','),分割符号仅仅分割不同记录的拼接,见下图
select dish_del, group_concat(distinct id,col,coll order by id desc separator '-') from dish group by dish_del having sum(id)>40;

在这里插入图片描述

key: order by
作用:排序

# desc 表示 正序排序
select ak47.id from dish as ak47 order by id desc;
select ak47.id from dish as ak47 order by id asc;
select ak47.id from dish as ak47 order by id;

key: like
作用:搜索

# %替换1个或者多个
# _替换1个
 
# 查询姓名中以“小”开头的姓名
select * from student where name like "小%";
# 查询姓名中有“小”的姓名
select * from student where name like "%小%";
# 查询有两个字的名字
select * from student where name like "__";
# 查询有两个字以上的名字
select * from student where name like "__%";

key: limit
作用: 限制条数

# a表示起始地址(从0开始计算),b显示条数
select * from A limit a, b;
# 分页,每页3条记录,以下表示第1,2,3页的数据
select * from A limit 0, 3;
select * from A limit 3, 3;
select * from A limit 6, 3;

连接查询

A,B为表,a,b为列属性

  1. 交叉查询,笛卡尔积,多表查询
select * from A, B;
相当于
select * from A join B;
select * from A cross join B;
  1. 内连接, inner join
# inner join 简写为join
select * from A join B on A.id=B.id;
相当于
select * from A, B where A.id = B,id;
  1. 左外连接 left join

保存两种条件下的记录

  • A.id和B.id都存在,且相等
  • A.id存在,但是B.id不存在

它允许右表一条记录全部为null,
只要求左表记录存在(左表只要有一个属性不为null就表示此记录存在)

# left out join ---->  left join
select * from A left join B on A.id=B.id;
  1. 右外连接 right join
  • A.id和B.id都存在,且相等
  • B.id存在,但是A.id不存在

它允许左表一条记录全部为null,只要求右表记录存在,
只要求右表记录存在(右表只要有一个属性不为null就表示此记录存在)

# right out join ---->  right join
select * from A right join B on A.id=B.id;
  1. union

select 后有几个元素就有几列,A的列数必须与B的列数相同,行数=A行数+B行数,
union会自动排序,比union all慢,
AB选中的列名,列名的存储格式可以不一样,属性名以union前的为准

select name, age, id from A
union
select id, email, sex from B;

在这里插入图片描述

  1. 自然连接
# inner join可以省略inner
# using(id), 本来有4列相同,现在只有2列
select * from A join B using(id, cid);
# natural join 使得A,B中的相同属性列变为一列,而且其属性值相等
select * from A natural join B;

函数

if(expr1, expr2, expr3) expr为true时该表达式值为expr2,否则为expr3
left(str, int) 从左截取字符串
right(str, int) 从右截取字符串
count(*)
count(id)
max()
min()
sum()
avg()求平均数
若avg(age) = 25.109
round(a, b)
b为a保存的小数点,见下方解释
则round(avg(age), 1) = 25.1
则round(avg(age), 2) = 25.12
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值