Sql查询基本知识

一,聚合函数
特点:只对单列进行操作
常见的聚合函数
sum():求某一列的和
avg():求某一列的平均值
max():求某一列的最大值
min():求某一列的最小值
count():求某一列的元素的个数

二,分组
group by || having
注意事项:
1)select语句中的列(非聚合函数),必须出现在group by 子句中
2)group by子句中的列,不一定要出现在select语句中
3)聚合函数只能出现select语句中或者having语句中,一定不能出现在where语句中

select deptId,count(deptId)from admin_user_account GROUP BY deptId;
select deptId,count(deptId) from admin_user_account GROUP BY deptId having avg(deptId)>1000

三,语法顺序
1,select
2,from
3,left join
4,on
5,where
6,group by
7,having
8,order by
9,limit

四,执行顺序
SELECT * FROM user LEFT JOIN order ON user.id = order.uid WHERE order.price > 1000 GROUP BY user.name HAVING count(1) > 5 ORDER BY user.name LIMIT 0,10
1,FROM (将最近的两张表进行笛卡尔积)—VT1
2,ON(将VT1通过条件过滤)—VT2
3,LEFT JOIN(保留左边的表记录)—VT3
4,WHERE (将VT3根据条件筛选生成)—VT4…VTn
5,GROUP BY(对VT4进行分组)—VT5
6,HAVING (对VT5的记录进行过滤)—VT6
7,SELECT (对VT6的记录,选定指定的列)—VT7
8,ORDER BY (对VT7的记录进行排序)—游标
9,LIMIT (对排序之后的值进行分页)

注意:优先级高的部分要去编写过滤力度最大的条件语句
where的过滤条件影响性能
MYSQL:从左往右执行过滤条件
ORACLE:从右往左执行过滤条件

四,外键添加格式
alter table 表名 add [constraint][约束名称] foreign key (主表外键字段) references 从表(从表主键)
主表删除外键的格式:
alter table 表名 drop foreign key 外键约束名称
使用外键的目的:保持数据完整性,(互联网环境下一般不需要加外键,容易形成闭环,删除数据失败)

五, 多表关联查询
1,交叉连接 cross join,(实际没这样用的)
笛卡尔积 表现 A*B(行数相乘,列数相加)
隐式: select * from A,B
显式: select * from A cross join B

2,内连接 inner join
等值连接,使用比较运算符根据每个表共有的列的值匹配两个表中的行
隐式: select * from A,B where A.id=B.id
显示 : select * from A inner join B on A.id=B.id
3,外连接outer join
有主表或保留表的概念
左外连接:select * from A left join B on A.id=B.id
右外连接:select * from A right join B on A.id=B.id
全连接: FUll JOIN 或 FULL OOUTER JOIN(mysql不支持)
4,分页

LIMIT是Mysql独有的
逻辑分页:将数据库的数据查询到内存中再进行分页
物理分页:通过limit关键字再数据库进行分页
selecr * from table limit [offset],rows
offset:偏移量
rows:多少行

5,子查询的位置
select中,from 后,where中

select id,(select name form test t1 where t.id=t1.id) from test t;
select t.* from (select * from test) t;
select * from test where id in(select id from test)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大道至简@EveryDay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值