mysql学习记录:单表查询(补充1)
2017-12-25 15:17
405 查看
数据库表的增删改查用得最频繁最广泛的就是查询,对于单表主要知识点有:区别重复数据,数据实现简单运算,条件查询,数据排序,限制数据记录查询数量,统计函数。
-:减法;
*:乘法;
/(div):除法;
%(mod):求余;
以下是我的表结构:
Field Type Null Key Default Extra
-------- ------------- ------ ------ ------------ ----------------
id int(11) NO PRI (NULL) auto_increment
bname varchar(100) NO (NULL)
author varchar(10) NO (NULL)
number int(11) NO (NULL)
category varchar(20) NO (NULL)
abstract varchar(1000) NO (NULL)
id bname author number category abstract
------ ---------------- ---------- ------ --------- -----------------------------------
1 java编程思想 Bruce Ecke 100 计算机 java神书,强烈推荐
2 线性代数 李凤霞 120 数学 大学公共课线性代数教材
3 苏菲的世界 Jostein Ga 78 哲学 哲学启蒙读本,强烈推荐
加法:SELECT number+5 FROM t_book;
减法:SELECT number+5 FROM t_book;
乘法:SELECT number*5 FROM t_book;
除法:SELECT number/5 FROM t_book;
求余:SELECT number%5 FROM t_book;
也可以使用别名方式使得显示更优雅更直观:
select number*5 count_book from t_book;
select number*5 ‘数量乘以五’ from t_book;
语法:select field1 [AS] otherfield1,field2 [AS] otherfield2,fieldn [AS] otherfieldn from table_name;
小于:<
等于:=
不等于:!= (<>)
大于等于:>=
小于等于:<= tips:在mybatis中,这个<=是与它一个符号冲突的,所以需要告诉他这个是代表我们的“小于等于”-> <![CDATA[ <= ]]>
select bname from t_book where id>2;
OR(||) 逻辑非
XOR 逻辑异或
NOT(!)
SELECT * FROM t_book WHERE id>1 OR number>90;
SELECT * FROM t_book WHERE id>1 XOR number>90;
NOT:还不会用,如果有知道的同学欢迎评论留言,感激
SELECT * FROM t_book WHERE number NOT BETWEEN 90 AND 110;
%:通配符
只显示 2 条数据(一共有三条数据,显示id=1,id=2)
例如:SELECT * FROM t_book LIMIT 2,1;
结果:显示了 id=3 的那 1 条数据。起始偏移量与数组一样,从 0 开始
AVG():统计表中所选字段的平均值,忽略null值;
SUM():计算所选字段的总和,忽略null值;
MAX():找出所选字段的最大值,忽略null值;
MIN():找出所选字段的最小值,忽略null值;
group by:分组关键字
SELECT MAX(number) FROM t_book;
SELECT bname,GROUP_CONCAT(abstract) FROM t_book WHERE id<3 GROUP BY author;
SELECT bname,GROUP_CONCAT(abstract),AVG(number) FROM t_book WHERE id<3 GROUP BY author,bname;
语法:SELECT function(field) FROM table_name WHERE CONDITION GROUP BY field1,field2,fieldn HAVING CONTITION;
SELECT bname,GROUP_CONCAT(abstract),AVG(number) FROM t_book WHERE id<3 GROUP BY author,bname HAVING AVG(number)>100;
SELECT bname,GROUP_CONCAT(abstract),AVG(number) FROM t_book WHERE id<3 GROUP BY author,bname HAVING COUNT(number);
1.简单查询
1)查询所有 *:
select * from table_name;2)查询指定字段:
select 字段1,字段2,... from table_name;3)区别重复数据 distinct:
select distinct 字段1,字段2,... from table_name;4)实现数学四则运算数据查询:
+:加法;-:减法;
*:乘法;
/(div):除法;
%(mod):求余;
以下是我的表结构:
Field Type Null Key Default Extra
-------- ------------- ------ ------ ------------ ----------------
id int(11) NO PRI (NULL) auto_increment
bname varchar(100) NO (NULL)
author varchar(10) NO (NULL)
number int(11) NO (NULL)
category varchar(20) NO (NULL)
abstract varchar(1000) NO (NULL)
id bname author number category abstract
------ ---------------- ---------- ------ --------- -----------------------------------
1 java编程思想 Bruce Ecke 100 计算机 java神书,强烈推荐
2 线性代数 李凤霞 120 数学 大学公共课线性代数教材
3 苏菲的世界 Jostein Ga 78 哲学 哲学启蒙读本,强烈推荐
加法:SELECT number+5 FROM t_book;
减法:SELECT number+5 FROM t_book;
乘法:SELECT number*5 FROM t_book;
除法:SELECT number/5 FROM t_book;
求余:SELECT number%5 FROM t_book;
也可以使用别名方式使得显示更优雅更直观:
select number*5 count_book from t_book;
select number*5 ‘数量乘以五’ from t_book;
语法:select field1 [AS] otherfield1,field2 [AS] otherfield2,fieldn [AS] otherfieldn from table_name;
5)设置显示格式 concat:
SELECT CONCAT(bname,'这本书的类别是:',category) AS '描述' FROM t_book;2.条件数据记录查询
1)MySQL支持的比较运算符
大于:>小于:<
等于:=
不等于:!= (<>)
大于等于:>=
小于等于:<= tips:在mybatis中,这个<=是与它一个符号冲突的,所以需要告诉他这个是代表我们的“小于等于”-> <![CDATA[ <= ]]>
select bname from t_book where id>2;
2)MySQL支持的逻辑运算符
AND(&&) 逻辑与OR(||) 逻辑非
XOR 逻辑异或
NOT(!)
SELECT * FROM t_book WHERE id>1 OR number>90;
SELECT * FROM t_book WHERE id>1 XOR number>90;
NOT:还不会用,如果有知道的同学欢迎评论留言,感激
3)带 BETWEEN AND 关键字范围查询
SELECT * FROM t_book WHERE number BETWEEN 90 AND 110;SELECT * FROM t_book WHERE number NOT BETWEEN 90 AND 110;
4)带 IN 关键字
SELECT * FROM t_book WHERE number IN(1,2,67,78,89,100,234,456);5)带 LIKE 关键字模糊查询
SELECT * FROM t_book WHERE abstract LIKE '%强烈%';%:通配符
3.排序数据记录
1)升序 ASC
SELECT * FROM t_book ORDER BY number ASC;2)降序 DESC
SELECT * FROM t_book ORDER BY number DESC;3)按照多字段排序
SELECT * FROM t_book ORDER BY id DESC,number ASC;4.限制数据记录查询数量
1)不指定初始位置(起始偏移量)
SELECT * FROM t_book LIMIT 2;只显示 2 条数据(一共有三条数据,显示id=1,id=2)
2)指定初始位置
语法:select field1,field2,fieldn from table_name where condition limit offset_start,row_count;例如:SELECT * FROM t_book LIMIT 2,1;
结果:显示了 id=3 的那 1 条数据。起始偏移量与数组一样,从 0 开始
5.统计函数及记录分组
COUNT():统计表中所选字段的记录条数,【COUNT(*) | 不忽略null值、COUNT(field) | 忽略null值】;AVG():统计表中所选字段的平均值,忽略null值;
SUM():计算所选字段的总和,忽略null值;
MAX():找出所选字段的最大值,忽略null值;
MIN():找出所选字段的最小值,忽略null值;
group by:分组关键字
1)统计函数
SELECT SUM(number) FROM t_book;SELECT MAX(number) FROM t_book;
2)分组数据查询
SELECT * FROM t_book GROUP BY number;3)实现统计功能分组查询
语法:SELECT GROUP_CONCAT(field) FROM table_name WHERE CONDITION GROUP BY field;SELECT bname,GROUP_CONCAT(abstract) FROM t_book WHERE id<3 GROUP BY author;
4)多个字段分组查询
语法:SELECT GROUP_CONCAT(field),function(field) FROM table_name WHERE CONDITION GROUP BY field1,field2,fieldn;SELECT bname,GROUP_CONCAT(abstract),AVG(number) FROM t_book WHERE id<3 GROUP BY author,bname;
5)HAVING子句限定分组查询
如果想实现对分组进行条件限制,不能通过 where 来实现,因为 where 主要用来实现条件限制分组数据记录。官方专门提供了 HAVING 来实现条件限制分组数据记录。语法:SELECT function(field) FROM table_name WHERE CONDITION GROUP BY field1,field2,fieldn HAVING CONTITION;
SELECT bname,GROUP_CONCAT(abstract),AVG(number) FROM t_book WHERE id<3 GROUP BY author,bname HAVING AVG(number)>100;
SELECT bname,GROUP_CONCAT(abstract),AVG(number) FROM t_book WHERE id<3 GROUP BY author,bname HAVING COUNT(number);
相关文章推荐
- mysql学习记录:多表查询、子查询(补充2)
- [MySQL]学习笔记- 用户行为表中,查询每个人的一条最新行为(分组 排序 取时间最大的一条记录)
- MySQl学习记录3 :查询笔记
- MySQL学习记录(子查询+演示分析)八 DML
- MySQL学习笔记(5)——插入、查询记录
- 2017.6.29 学习记录 MySql的运用查询
- mysql 学习记录(一)--建表,增加,删除,修改,基本查询
- mysql学习笔记之八(单表数据记录查询)
- mysql学习笔记之九(多表数据记录查询)
- MySQL学习足迹记录12--使用子查询
- mysql 学习记录(五)--字符串、数值处理、日期、查询的逻辑处理、系统相关内容查询、IP地址相关、密码
- mysql中的联合查询union和union all 学习记录。
- MySQL学习记录(多表连接查询+演示分析)七 DML
- mysql 学习记录(二)--查询,权限,字段控制
- SQL查询前10条记录(SqlServer/mysql/oracle/sybase)[语法分析] (转)
- windows下Mysql学习(三):查询结果排序
- mysql 学习记录(十七)--水平拆分表、垂直拆分表、中间表
- 一步一步学MySQL----9 条件数据记录查询
- 高效查询mysql表的总记录数
- mysql查询第几行到第几行记录