排序
关键字:order by desc降序 asc升序(默认)
- 示例:
select * from user order by money desc
注意:order by只能通过阿拉伯数字和英文字母排序
聚合函数
- 关键字:count()
- count(*)表示表的行数,不忽略有值为null和0的行数
- count(列名),表示这个列有多少行,忽略这个列行数值为null的行
表:
语句:
select count(*) 行数 from student
select count(name) 行数 from student
结果:
-
count与sum区别
count计算的是列的行数,如果指定某一列,则计算这列有几行,这列的行值为null不计算
sum计算的是列中行内的数值
分组
关键字:group by having(类似where)这两个配合使用
- 将一个表根据group by条件分成多个表
- 如果group by后有两个列名,如
select count(*) from user group by dep,job
,则根据job分表是原表依据dep分好的表的基础上再分一次表
分页
关键字:limit
当查询记录时可能会有大量记录,这时可以通过limit来限制一次的查询数量,这样可以减少查询的数据库压力
语法:SELECT 字段1,字段2… FROM 表名 LIMIT M,N
(M:表示从哪一行的索引(从0开始)开始显示,N表示要显示几行)
第1页: N*(1-1) 第2页: N*(2-1) 第page页: N(page-1)*
连接
关键字:inner join、left join、right join(加不加outer一样)
语句格式:select * from A left join B on condition
内连接:inner join,返回两张表都满足的部分
左连接:left join,以左表为主,让右表一行行匹配左表,不满足则右表结果为null
右连接:right join,以右表为主,让左表一行行匹配右表,不满足则左表结果为null
连接和笛卡尔积的区别:
- 笛卡尔积不管条件是否满足,每一行都匹配
- 连接会先判断条件,再与之匹配,不满足条件的置为null
语句
创建表时创建外键
create table actor_privilege(
FK_aid int not null,
FK_pid int not null, #constraint表示约束,后面的是这个约束的名字,方便以后删除约束
constraint actor_privilege_FK_aid foreign key(FK_aid) references actor(aid),
constraint actor_privilege_FK_pid foreign key(FK_pid) references privilege(pid)
)
通过alter添加外键(注意add)
alter table actor_privilege add foreign key(FK_aid) references actor(aid)
删除表
drop table name
题目
查询价格大于200商品的总条数和商品名
-
NOT操作符:查询姓名**第二个字母不是”A”**且薪水大于800元的员工信息,按年薪降序排列 not()取反
select * from emp where NOT(ename like '_A%') and sal > 800 ORDER BY (sal * 12) desc
-
group by分表:求每个部门每个岗位的最高薪水(分两次表)
select deptno,job, max(sal) from emp group by deptno,job ORDER BY deptno