Bootstrap

MySQL数据库----查询语句详解

1. 基本查询

#查询所有记录
select * from 表名;

#查询指定字段
select 列名1, 列名2, ... from 表名;

2. DISTINCT查询

查询时可以剔除重复记录,重复的定义是指选取的查询字段对应的记录全部一样,如果只是某一个字段相同不算重复记录。

#剔除重复选项
select distinct * from 表名;

select distinct 列名1, 列名2, ... from 表名;

3. IN查询

查询时可以通过IN关键字,限定查询的某一字段的记录取值范围。

#in查询
select * from 表名 where 列名 in (值1, 值2, ...);

select 列名1, 列名2, ... from 表名 where 列名n in (值1, 值2, ...);

#not in
#in查询
select * from 表名 where 列名 not in (值1, 值2, ...);

select 列名1, 列名2, ... from 表名 where 列名n not in (值1, 值2, ...);
  • 使用IN查询时,如果 in(),括号中有NULL,并不会返回值为NULL的记录
  • 使用not in 查询时,如果not in(),括号中有NULL,一条记录都查不出来

4. between and

IN查询可以限定多个离散的取值点,between and可以限定一个取值范围,但是只能用于数值和时间类型

between n1 and n2,限定的范围是[n1, n2]

#between and
select * from 表名 where 列名 between n1 and n2; 

select 列名1, 列名2, ... from 表名 where 列名n between n1 and n2; 

#not between and
select * from 表名 where 列名 not between n1 and n2; 

select 列名1, 列名2, ... from 表名 where 列名n not between n1 and n2; 

5. like

MySQL中支持使用关键字like通配符进行模糊查询

通配符描述
匹配单个字符
%匹配任意长度字符

  • 模糊查询不仅适用于字符串,数值同样可以模糊查询
  • 不管是数值还是字符串,模糊查询时like后面的限定条件都要是字符串形式,以''或""包括
#like
select * from 表名 where 列名 like '包含通配符的字符串';

select 列名1, 列名2, ... from 表名 where 列名n like '包含通配符的字符串';

#not like
select * from 表名 where 列名 not like '包含通配符的字符串';

select 列名1, 列名2, ... from 表名 where 列名n not like '包含通配符的字符串';

6. order by

使用关键字 order by 可以对查询结果排序。

  • order by后面一般只带一个列名
  • 排序时,记录值为NULL的看作最小值
  • ASC:升序 ;DESC:降序
#order by
select * from 表名 order by 列名 ASC/DESC;

select 列名1, 列名2, ... from 表名 order by 列名n ASC/DESC;

7. group by

使用关键字group by可以进行分组查询

#group by
select 函数名(列名n), group_concat(列名1), group_concat(列名2), ... from 表名 where 条件 group by 列名m; 
  • 分组查询常常和统计函数一起使用
统计函数描述
sum(列名) 求和
avg(列名)统计平均值
count(列名)统计记录条数,不包括NULL
count(*)统计记录条数, 包括NULL
max(列名)统计最大值
min(列名)统计最小值
  • 分组后,如果查询字段除了统计函数,还有其他字段,查询出的内容只显示分组中第一条记录

 

  • 使用group_concat可以显示分组中的多条记录

 

8. 判断NULL

MySQL的判断逻辑有三种结果:truefalseunknow。当判断中有NULL时,一定会形成unknow逻辑,即使两个NULL做相等比较。

在条件判断时,如果相对值为NULL做判断,可以使用is nullis not null

#判断为NULL
select * from 表名 where 列名 is null;

#判断不为NULL
select * from 表名 where 列名 is not null;

9. inner join

使用inner join关键字可以实现多表的联合查询 ---- 内连接查询。

#inner join
select * from 表名1 inner join 表名2 on 联合条件;

#使用别名
select 表别名1.列名1 as 列别名1_1, ... 表别名2.列名1 as 列别名2_1, ... from 表名1 as 表别名1 inner join 表名2 as 表别名2 on 联合条件; 
  • 内连接查询必须带上联合条件
  • 内连接查询是将一个表(表a)的每一条记录,对应另一张表(表2)的所有记录,根据联合条件剔除不符合条件的记录,最终得到查询结果

举例:
class表:两个班级,分别有两个老师

student表:4个学生,分别属于两个班级

不使用联合条件:

联合条件效果:

  • 自连接
  • 内连接有一种特殊情况,连接的表是自己本身,称为自连接。

10. outer join

使用outer join可以实现外连接查询,使用上和内连接类似。

#outer join
select * from 表名1 left/right outer join 表名2 on 联合条件;

#使用别名
select 表别名1.列名1 as 列别名1_1, ... 表别名2.列名1 as 列别名2_1, ... from 表名1 as 表别名1 left/right outer join 表名2 as 表别名2 on 联合条件; 
  • 外连接相比内连接多了参考表的概念,被选为参考的表,所有记录都要显示
  • left outer join选择关键字左边的表为参考表,right outer join相反

举例:
class表:两个班级,分别有两个老师

student表:5个学生,学生e的班级不在班级表中

左外连接:

右外连接:


11. union

union关键字可以将多个select查询的结果合并在一起。

#union
select 列名1, 列名2, ... from 表名1 union select 列名1, 列名2, ... from 表名2; 

#union all
select 列名1, 列名2, ... from 表名1 union select 列名1, 列名2, ... from 表名2; 
  • 使用union时,多个select查询的列名数量必须一致
  • union会将合并的结果去重,union all不会去重

12. 子查询

可以在查询中嵌套查询,以一个查询的结果作为另一个查询的查询范围,称为子查询。

#子查询
select 列名1, 列名2, ... from 表名1 where 列名 运算符|IN|ANY|ALL|EXISTS (select 列名 from 表名2);
  • ANY:满足子查询中任意一条结果即可
  • ALL:要满足子查询的所有结果
  • EXISTS:子查询结果为空返回false,不空返回true

————————————————                        
转载于:https://blog.csdn.net/qq_39281599/article/details/126096682

;