mysql学习记录:单表查询(补充1)

数据库表的增删改查用得最频繁最广泛的就是查询,对于单表主要知识点有:区别重复数据,数据实现简单运算,条件查询,数据排序,限制数据记录查询数量,统计函数。


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中,这个<=是与它一个符号冲突的,所以需要告诉他这个是代表我们的“小于等于”-> 


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学习)