MySQL简单查询详解


MySQL的查询操做mysql

单表查询:简单查询正则表达式

多表查询:链接查询sql

联合查询缓存



布尔条件表达式操做符bash

   = 等值比较
   <=>:跟空值比较不会产生额外信息的等值比较
   <>:不等值
   <: 
   <=:
   >
   >=
   IS NULL
   IS NOT NULL    
   LIKE: 
      支持的通配符: %(任意长度的任意字符),_(任意单个字符)
   RLIKE,REGEXP: 支持使用正则表达式
   IN: 判断指定字段的值是否在给定在列表中;  
   BETWEEN ... AND ...: 位于指定的范围之间(x>=10 and x<=40 --> x BETWEEN 10 AND 20)



示例ide

新建立一个表
mysql> create table tests (sid int unsigned auto_increment not null unique key,name char(30) 
    not null,age tinyint unsigned not null,gender enum('F','M') not null,tutor char(30));


wKiom1hTNDLBAEgaAAApZBokJ-s251.png-wh_50



添加几个用户
mysql> insert into tests values (1,'Guo Jing',27,'M','Song Jiang'),
    (2,'Yang Guo',28,'M','Hu Sanniang'),(3,'Guo Polu',21,'M','Jia Baoyu');
    
mysql> insert into tests values (4,'Xue Baochai','19','F','Rong Momo'),
      (5,'Xia Yuhe',37,'F','Shi Qian'),(6,'Wu Yong',51,'M','Lin Daiyu');


wKiom1hTNMfyCL4zAAAkRowALu0842.png-wh_50


BETWEEN...AND...语法演示

mysql> select name,age from tests where age between 25 and 40;


wKioL1hTNQugwUMJAAAwjSSZK5A453.png-wh_50


IN 语法演示

mysql> select name,age from tests where age in (25,26,27,28,29);


wKiom1hTNTaj4SA-AAArigU_LR8193.png-wh_50


LIKE 语法演示

mysql> select name from tests where name like 'x%';


wKioL1hTNWngiLSRAAAlWHYtHM8572.png-wh_50


RLIKE 语法演示

mysql> select name from tests where name rlike '^x.*';


wKioL1hTNZWgwvzBAAAUnsT5KQM953.png-wh_50



//添加两行新的数据
//NULL不是字符串 不须要加引号
mysql> insert into tests values (7,'tom',11,'M','jerry'),(8,'tomy',13,'M',NULL);


wKiom1hTNbvDAH16AABaK5CMRbE229.png-wh_50


IS NULL

mysql> select name,tutor from tests where tutor is null;


wKiom1hTNfiyJWd2AAAYaYvv0c4906.png-wh_50


NOT NULL

mysql> select name,tutor from tests where tutor is not null;



组合条件测试函数

NOT, !
AND, &&
OR, ||


示例测试


mysql> select name,gender,age from tests where age > 25 and gender='M';spa


wKioL1hTNlmR8FESAABEs5MJBwY441.png-wh_50



排序3d

order by ‘排序字段’
默认为升序:ASC
降序:DESC


示例

mysql> select name,gender,age from tests where age > 25 and gender='M' order by name;
mysql> select name,gender,age from tests where age > 25 and gender='M' order by name desc;


wKiom1hTNp-Tan6qAAB-_2XPQVw799.png-wh_50



聚合函数

 SUM(), AVG(), MAX(), MIN(), COUNT()


示例

mysql> select sum(age) from tests;
mysql> select avg(age) from tests;
mysql> select max(age) from tests;
mysql> select count(age) from tests;


wKioL1hTNu2D21TaAABOWsrT0Io301.png-wh_50


mysql> select count(*) from tests where age > 25;
//年龄大于25的有4个


wKiom1hTNxSB0us5AAAQiDn-Pbk525.png-wh_50


mysql> select sum(age) from tests where age > 25;
//年龄大于25的全部年龄之和


wKioL1hTNzaRvkPFAAARRWQNqtg946.png-wh_50


分组

group by


示例

mysql> select gender,sum(age) from tests group by gender;


wKiom1hTN2-A_LB9AAAsH5KLCcQ659.png-wh_50


mysql> alter table tests add classid tinyint unsigned;
//为表新添加一个字段


wKioL1hTN5GAHik5AABm7GJgei8550.png-wh_50


插入数据
mysql> update tests set classid=1 where sid=1;
...
...


wKioL1hTN8ajzhXgAAAsyme3mF0695.png-wh_50


mysql> select classid,count(*) from tests group by classid; 或者
mysql> select classid,count(name) from tests group by classid;
//按班级分类 每班有多少人


wKiom1hTN-WS7XdHAAAjIIeeers342.png-wh_50


mysql> select classid,count(name),sum(age) from tests group by classid;
每一个班的人的年龄之和



对分组(group by)的条件过滤

having
    注意:使用having和不是使用where


示例

mysql> select classid,count(*) from tests group by classid having count(*) >= 2;


wKioL1hTODLwfk1vAAApEvuWx0M298.png-wh_50


mysql> select classid,count(*),sum(age) from tests group by classid having sum(age) <= 50;


wKiom1hTOFPi6yAyAAAXmB8wgME791.png-wh_50


mysql> select classid,count(name),sum(age) from tests where classid in (1,2) group by classid havingsum(age) <= 50;
//注意where过滤和having过滤 分别出现的位置



只返回有用的行

LIMIT 
一个数为显示的行数
两个数字为偏移第一个数字行,显示第二个数字


示例

mysql> select * from tests limit 2;
mysql> select * from tests limit 2,3;


wKioL1hTOLfhtCADAABlZ1WzwZg558.png-wh_50



select语句

distinct   重复的只显示一次
SQL_CACHE  缓存查询结果
SQL_NO_CACHE 不缓存查询结果


示例

mysql> select age from tests order by age; 
mysql> select distinct age from tests order by age;

 



总结


select语句的执行流程

  from clause --> where clause --> group by --> having clause -->order by --> 

  select -->limit


常见用法

select
from
order by


select
from
group by
having


select
from
where


select -->调用内部函数


select
from
where
group by
limit
相关文章
相关标签/搜索