数据库 语法(非基础语法)

283 阅读2分钟
  • GROUP BY
  • HAVING
  • 统计相关:COUNT、SUM、MAX、MIN、AVG
  • 连表查询

创建3个表,用于举例

  • 学生表:
CREATE TABLE `student`(
`student_id` int(11)not null auto_increment,
`name`VARCHAR(32)default null,
`age`	int(11)default null,
`sex` varchar(8) default null,
primary key(`student_id`)
)engine=Innodb auto_increment=8 default charset=utf8;
begin;
insert into `student` values ('11','shen','12','girl'),('12','wang','12','boy'),('13','li','12','boy'),('10','zou','12','boy');
commit;
end;
  • 成绩表:
DROP TABLE IF EXISTS	`score`;
create table `score`(
`student_id` int(11)default null,
`couse_id`int(11)default null,
`score`int (11)default null
)engine=INNODB	DEFAULT charset=utf8;
  • 课程表
DROP TABLE IF EXISTS `couse`;
CREATE TABLE `couse`(
`couse_id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(20) DEFAULT null,
PRIMARY KEY(`couse_id`)
)ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
BEGIN;
insert into `couse` VALUES('1','语文'),('2','数学'),('3','物理');
COMMIT;
GROUP BY

定义:GROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行分组

  • 满足"SELECT子句中的列名必须为分组列或者列函数"(要么是group by里用到的列,要么就是带有sum、min等列函数的列)
  • 列函数对于GROUP BY子句定义的每个组各返回一个结果

语法

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;

查询所有同学的学号、选课数、总成绩

  • 表-score:

    表-score

  • sql:

CREATE DEFINER=`root`@`localhost` PROCEDURE `findall`( )
BEGIN
SELECT student_id,COUNT(student_id),sum(score)
FROM	score 
GROUP BY student_id;
END
  • 结果:
HAVING

定义:过滤,在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数(COUNT、SUM、MAX、MIN、AVG)一起使用,HAVING 子句可以让我们筛选分组后的各组数据

  • 通常与GROUP BY子句一起使用
  • WHERE过滤行,HAVING过滤组
  • 出现在统一sql等顺序:WHERE>GROUP BY> HAVING

查询评价成绩大于60的同学的学号和平均成绩

  • sql代码:
BEGIN
SELECT student_id,AVG(score)
FROM score
GROUP BY student_id
HAVING avg(score);
END
  • 结果:

统计相关

COUNT

定义:返回匹配指定条件的行数 语法:

COUNT(*) 函数返回表中的记录数
SELECT COUNT(*) FROM table_name;

返回指定列的不同值的数目:
SELECT COUNT(DISTINCT column_name) FROM table_name;

示例(表-score):

SELECT COUNT(*) FROM score

结果:13

SELECT COUNT(DISTINCT	student_id) FROM score

结果:5

SUM

定义:返回数值列的总数 语法:

SELECT sum(*) FROM score
SELECT sum(DISTINCT  column_name) FROM score

示例(表-score):

SELECT sum(*) FROM score

结果:911

SELECT sum(DISTINCT  score) FROM score

结果:831

其余就不一一举例了
MAXMINAVG