示例:创建一张用户表,设计有name姓名、age年龄、email邮箱、sex性别字段。将学生表中name和email复制进来。
创建用户表: DROP TABLE IF EXISTS user; create table user ( id int primary key auto_increment, name varchar(20) comment ‘姓名’, age intcomment ‘年龄’, email varchar(20) comment ‘邮箱’, sex varchar(1) comment ‘性别’ ); 将学生表中的所有数据复制到用户表: insert into user(name, email) select name, email from student;
聚合函数:
函数说明示例COUNT返回查询到的数据的数量select COUNT(*) from sc;SUM返回查询到的数据的总和select sum(math) from sc;AVG返回查询到的数据的平均值select AVG(chinese + math + english) 平均总分 from sc;MAX返回查询到的数据的最大值select MAX(math) from sc;MIN返回查询到的数据的最小值select MIN(math) from sc;GROUP BY 字句: SELECT 中使用 GROUP BY 子句可以对指定列进行分组查询。需要满足:使用 GROUP BY 进行分组查询时,SELECT 指定的字段必须是“分组依据字段”,其他字段若想出现在SELECT 中则必须包含在聚合函数中。
示例:查询每个学生的各科成绩平均分。 select name,avg(chinese),avg(math),avg(english) from sc group by name;
HAVING: GROUP BY 子句进行分组以后,需要对分组结果再进行条件过滤时,不能使用 WHERE 语句,而需要用 HAVING。
示例: select name,avg(chinese),avg(math),avg(english) from sc group by name having avg(math)>90;
联合查询 案例:
班级表: 学生表: 课程表: 分数表:
内连接: 假设A和B两张表进行连接,使用内连接,凡是A表和B表能够匹配上的记录查询出来。AB两张表没有主副之分,两张表是平等的。
select 字段 from 表1 别名1 [inner] join 表2 别名2 on 连接条件 and 其他条件; select 字段 from 表1 别名1,表2 别名2 where 连接条件 and 其他条件;
示例:查询张飞同学的成绩。
select score from student,score where student.id=score.student_id and name=‘张飞’; select score from student inner join score on student.id=score.student_id and name=‘张飞’;
外连接:假设A和B两张表进行连接,使用外连接,AB两张表有一张表是主表,有一张表是副表,主要查询主表中的数据,捎带着查询副表,当副表中的数据没有和主表中的数据匹配上,副表自动模拟出NULL与之匹配。外连接分为左外连接和右外连接。如果联合查询,左侧的表完全显示就说是左外连接(左边的表是主表);右侧的表完全显示就说是右外连接(右边的表是主表)。
– 左外连接,表1完全显示 select 字段名 from 表名1 left join 表名2 on 连接条件; – 右外连接,表2完全显示 select 字段 from 表名1 right join 表名2 on 连接条件;
左外连接:左边表数据行全部保留,右边表保留符合连接条件的行。 右外连接:右边表数据行全部保留,左边表保留符合连接条件的行。自连接: 指在同一张表连接自身进行查询。
子查询: 是指嵌入在其他sql语句中的select语句,也叫嵌套查询。
示例:
合并查询: 在实际应用中,为了合并多个select的执行结果,可以使用集合操作符 union,union all。使用UNION和UNION ALL时,前后查询的结果集中,字段需要一致。
union:该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行。
union all:该操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行。