前言
在前面的两篇文章中,我们已经了解了数据库、表、列(字段)的基本增删改查,这篇文章将接着介绍匹配、排序、分组,一些常用函数等。
准备
我们将使用第一篇文章中的表结构和下面的分组练习表进行接下来的学习:超级简单的sql入门(一)
没有表的朋友请先创建表。
分组练习表:
SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for `employee_tbl`
-- ----------------------------
DROP TABLE IF EXISTS `employee_tbl`;
CREATE TABLE `employee_tbl` (
`id` int(11) NOT NULL,
`name` char(10) NOT NULL DEFAULT '',
`date` datetime NOT NULL,
`singin` tinyint(4) NOT NULL DEFAULT '0' COMMENT '登录次数',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of `employee_tbl`
-- ----------------------------
BEGIN;
INSERT INTO `employee_tbl` VALUES ('1', '小明', '2016-04-22 15:25:33', '1'), ('2', '小王', '2016-04-20 15:25:47', '3'), ('3', '小丽', '2016-04-19 15:26:02', '2'), ('4', '小王', '2016-04-07 15:26:14', '4'), ('5', '小明', '2016-04-11 15:26:40', '4'), ('6', '小明', '2016-04-04 15:26:54', '2');
COMMIT;
SET FOREIGN_KEY_CHECKS = 1;
这是我的表结构,一共有3张表:
一、练习题目
1、请查询所有姓王的学生的信息
学习like匹配查询
2、请查询所有学生信息并按ID倒序排序
学习查询排序
3、请查询所有学生信息并按ID正序排序
学习查询排序
4、请查询学生总数
学习count函数
5、请查询张三的三科成绩总和
学习sum函数
6、请查询employee_tbl表中每个人有多少条记录
学习分组
注意:除了第6题,前5题都是用第一篇文章中的表
二、用到的语法
1、select查询条件使用like通配符,请注意like后面的内容要用%匹配,如%xxx、xxx%、%xxx%
select 查询的内容 from 表名 where 字段名 like 内容
下面是一个使用LIKE查询的数据的例子:
SELECT * FROM user WHERE username LIKE '小%';
返回的查询结果:
上面这个例子是找出所有username以"小"开头的记录
注意:小%表示以小开头,而后面可以是任意字符,同样,%小,表示以”小”结尾,而%小%则表示包含“小”这个字符(并一同包含"%小"和"小%"这两种情况)
MySQL LIKE 大小写
MySQL LIKE 匹配字符的时候,默认情况下是不区分大小写的,如果在需要区分大小写的时候,可以加入BINARY操作符:
SELECT * FROM username WHERE LIKE BINARY ‘%azz%’
SELECT * FROM username WHERE LIKE BINARY ‘%Azz%’
2、排序order by`````asc 正序,order by``````desc 倒序
select 查询的内容 from 表名 order by 要排序的字段 asc;
select 查询的内容 from 表名 order by 要排序的字段 desc;
3、函数,我们需要学习两个常用函数sum求和函数,count计数函数,首先要了解先函数是什么,函数是指一段可以直接被另一段程序或代码引用的程序或代码。也叫做子程序、(OOP中)方法。
在mysql中,我们求和、计数这两种方法在系统中已经有现成的方法了,我们只要拿来用就行,这就是mysql中的函数。
COUNT(expression) 返回查询的记录总数,expression 参数是一个字段或者 * 号
返回 Products 表中 products 字段总共有多少条记录:
SELECT COUNT(ProductID) FROM Products;
SUM(expression) 返回指定字段的总和
计算 OrderDetails 表中字段 Quantity 的总和:
SELECT SUM(Quantity) FROM OrderDetails;
4、分组,GROUP BY 语句根据一个或多个列对结果集进行分组。
在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。
SELECT 字段名, 函数(字段名)
FROM 表名
WHERE 条件 #可以没有
GROUP BY 字段名;
三、开始我们的学习
1、请查询所有姓王的学生的信息,这个就比较简单了,我们查询student表,用like去匹配姓名字段以王开头的内容就行
查询:
select * from student where name like "王%";
查询结果:
可以看到我们查到了姓王的数据,因为我的表中只有一个姓王的数据,感兴趣的朋友可以多插几条数据进行查询。
2、请查询所有学生信息并按ID倒序排序,这道题如题,sql这么写
查询:
select * from student order by id desc;
查询结果:
可以看到我们查询的结果是按id倒序排列的
3、请查询所有学生信息并按ID正序排序,这道题和上一题差不多
查询:
select * from student order by id asc;
查询结果:
可以看到我们查询的结果是按id正序排列的
4、请查询学生总数,这道题就要用到函数啦,我们知道了查询所有信息是用“星”号来表示的,那么我要知道数量就要针对“星”号来统计数量啦,所以是count(*)
查询:
select count(*) from student;
查询结果:
可以看到,我们通过count统计的结果是4
5、请查询张三的三科成绩总和,这个就要用道求和函数了,我们要先查出来张三的三科成绩,然后对分数字段进行求和
select sum(fraction) from achievement where student_id =(select id from student where name="张三");
这里为了方便女朋友理解我用了嵌套查询,用连接也是可以的:
select sum(fraction) from achievement ac inner join student st on ac.student_id=st.id where st.name="张三";
查询结果为:
可以看到,两种写法结果是相同的
6、请查询employee_tbl表中每个人有多少条记录,我们要使用 GROUP BY 语句 将数据表按名字进行分组,并统计每个人有多少条记录:
查询:
#先看下数据
SELECT * FROM employee_tbl;
可以看到姓名有重复的,接下来要按姓名分组并统计了:
SELECT name, COUNT(*) FROM employee_tbl GROUP BY name;
查询结果:
查询成功啦
好啦今天的内容就分享完啦,大家快去试试吧!