SQL查询语句


单表查询

命令格式

select 列名1,列名2,...
from 数据表名
[where 条件]
[group by 列名 [having 条件]]
[order by 列名 [asc|desc]]
[limit 起始位置,返回数量]

使用示例

1、select * from 数据表名:查询所有数据,星号(*)代表所有字段。

mysql

2、select 列名1,列名2,列名3,... from 数据表名:查询所有数据的指定字段。

mysql

3、where 条件:查询符合条件的所有记录。

3.1、条件表达式:=(等于)、!=(不等于)、>(大于)、<(小于)、>=(大于等于)、<=(小于等于)、like(字符串模糊查询)。

3.1.1、=(等于)、!=(不等于)。

mysql
  • 查询所有sex值为‘男’的记录。

3.1.2、>(大于)、<(小于)、>=(大于等于)、<=(小于等于)。

mysql
  • 查询所有birthday值大于‘2005-01-01’的记录。

3.1.3、like(字符串模糊查询):表达式中的通配符(%)代表一串字符。

mysql
  • 查询所有username值以‘li’开头的记录。

3.2、逻辑表达式:and(与)、or(或)、not(非)。

3.2.1、and(与):and两边的表达式都成立时最终结果成立,否则不成立。

mysql
  • 查询所有birthday值大于等于‘2003-01-01’且小于等于‘2005-12-31’的记录。

3.2.2、or(或):or两边的表达式都有一个成立时最终结果成立,否则不成立。

mysql
  • 查询所有birthday值小于‘2003-01-01’或大于‘2005-12-31’的记录。

3.2.3、not(非):not是对后面表达式的否定,后面表达式成立时最终结果不成立,反之后面表达式不成立时最终结果成立。

mysql
  • 查询所有sex值不等于‘男’的记录。

4、order by 列名 [asc|desc]:对返回结果按指定字段排序,asc为升序,desc为降序,默认为升序。

mysql
  • 查询结果按birthday值降序排列。

5、limit 起始位置,返回数量:返回从起始位置开始的指定数量的记录,起始位置从0开始。

mysql
  • 查询结果按birthday值降序排列,并且只返回前5条。

6、group by 列名 [having 条件]:按指定字段进行分组查询,通常用于分组统计,最终结果可使用having进行条件过滤。

6.1、分组查询:按字段值进行分组。

mysql
  • 按sex值分组查询记录数量。count(*)为聚合函数,返回记录条数。

6.2、条件过滤:对分组结果进行过滤输出。

mysql
  • 按sex值分组查询记录数量,只输出sex值为'男'的结果。

多表查询

命令格式

select 列名1,列名2,...
from 数据表1
[inner | left | right] join
数据表2
on 连接条件

使用示例

1、示例表格。

1.1、用户表user,其中字段rid为外键,引用角色表role的主键rid。

mysql

1.2、角色表role,rid为自增主键。

mysql

2、连接查询。

2.1、内连接:一个表中的主键(外键)值与另一个表的外键(主键)值有对应关系时才出现在最终的查询结果中。

2.1.1、select 列名1,列名2,... from 数据表1,数据表2 where 连接条件:隐式内连接。

mysql
  • 角色表role中无rid为4的角色,所以在最终结果中,user表rid为4的用户不会出现在结果中。

2.1.2、select 列名1,列名2,... from 数据表1 [inner] join 数据表2 where 连接条件:显式内连接。

mysql
  • user u, role r:为了使表达更为方便,数据表user使用了别名u,role使用了别名r。

2.2、外连接:一个表中的主键(外键)值与另一个表的外键(主键)值没有对应关系时使用空值null填充。

2.2.1、select 列名1,列名2,... from 数据表1 left join 数据表2 where 连接条件:左连接,左表(数据表1)中的所有记录都会出现在查询结果中。

mysql
  • 结果包含左表user的所有数据,因为角色表role中无rid为4的角色,所以在最终结果中,user表rid为4的用户角色名称使用null填充。

2.3、select 列名1,列名2,... from 数据表1 right join 数据表2 where 连接条件:右连接,右表(数据表2)中的所有记录都会出现在查询结果中。

mysql
  • 结果包含右表role的所有数据,因为用户表user中无rid为3的用户,所以在最终结果中,role表rid为3的用户信息使用null填充。

发表评论

评论数量:0