分组函数
- count:计数;sum:求和;avg:求平均值;max:求最大值;min:求最小值;count(*):查询有多少行数据(因为一行数据肯定不会都为null)
- 以上函数会自动忽略
null
先建一张表
count:
SELECT COUNT(age) FROM bank;
结果:
sum:
SELECT SUM(age) FROM bank;
结果:
avg:
SELECT AVG(age) FROM bank;
结果:
max:
SELECT MAX(age) FROM bank;
结果:
min:
SELECT MIN(age) FROM bank;
结果:
union
将两个查询等 语句的结果 拼接起来,想要获得的列数必须相同,满足这个就能查了,字段名不同都可以,但是在oracle不行,其要求数据类型也要一样
bank表:
work表:
查询语句和结果:
SELECT NAME FROM bank
UNION
SELECT NAME FROM WORK ;
但是当他俩所要获得的字段名不同时,依然会拼在一起,结果中的字段名是跟随前面的查询语句的字段名走
SELECT NAME FROM bank
UNION
SELECT career FROM WORK ;
结果:
limit:
限制展示出来的数据条数:
- SELECT
字段名
FROM表名
ORDER BY字段名
LIMIT想要开始的起始下标
,想要展示的数据的长度(null 也显示)
;- 起始下标从
0
开始
bank表:
SELECT NAME FROM bank ORDER BY age LIMIT 1, 4;
结果:null 也显示了
order by排序:将数据排序(一般按照数字之类的好排)
- order by
字段
:默认升序;或者order by字段
asc;- order by
字段
desc:降序- 查询的表中从上到下为序的方向
- 可以写两个字段,当第一个字段相同时,就不好排序了,然后就启动备用方案:第二个字段
bank表:
sql语句(这里使用默认升序)
SELECT NAME FROM bank ORDER BY age ;
结果:
group by分组:
将获得的表进行分组
sql语句:
SELECT any_value(NAME) AS ‘姓名’,gander AS ‘性别’ FROM bank GROUP BY gander; 意为获得bank表中的name和gander字段并起别名,再讲其按照gander进行分组
结果:这里只显示了两个数据,不是sql语句的问题,是MySQL的版本问题,我的是8.0.....
,group by中不能进行select,只能将要查询的数据放入ANY_VALUE()
中 ,并且只会显示每一组的第一条,所以这张图分完组后,男女只显示第一条数据,具体点这里
外键:
- 先创建一个表,在其中一个字段上添加外键标志,就将此字段和另一张表的一个字段联系起来了,此字段以后更新内容时必须保证另一张表中的字段也有此内容,即受另一张表的字段的约束
- 这样就不用把所有数据写在一个表中了,如一张表中的人的班级只分了1班2班,如果班级全称长,那么每个人后面的班级字段都写班级名称,就会资源浪费,于是就把班级名字单独领出来做成一张表,然后在新的表中添加一个字段
number
,将他和bank表中的id
联系起来将他俩联系起来,建立外键的关系,至于谁是谁的外键,就看具体情况了,一般主表中添加外键的约束,外键所在的表在另一个表中
现有bank表:
再来创建含有外键的表:
CREATE TABLE `bank_phone`(
`id` INT COMMENT 'id值',
`phone` INT(11) NOT NULL COMMENT '电话号码',
FOREIGN KEY(id) REFERENCES bank(id)
);
建成的表:id只能在bank中的id1~5
中选择