DQL语句表示数据查询语言(凡是带有select关键字的都是查询语句)
目录
简单查询
- 查询单个字段
- selsct 字段名 from 表名;
- 查询多个字段
- 字段名中使用逗号’,‘隔开
- 查询所有字段
- 第一种方法
- 把每个字段都写上
- 第二种方法
- 字段名使用星号’*‘表示查看所有
- 但是这种方法效率低,可读性差。不推荐
- 第一种方法
条件查询(where)
- 语法格式:
- select 字段名 from 表名 where 条件;
- 运算符
- 等于
- =
- 不等于
- != 或<>
- 小于
- <
- 小于等于
- <=
- 大于
- >
- 大于等于
- >=
- between ... and ...
- 等于与 >= and <=
- 使用between and的时候,必须遵循左小右大。between and是闭区间,包括两端的值。
- is
- 表示是
- 在数据库中,查询为null的时,必须使用is null。因为在数据库中null表示不存在,表示一个值,所有不可以使用=号查询
- 表示是
- and
- 和
- or
- 或
- 当and和or同时存在时,存在优先级关系,and优先or,如果需要让or先执行,需要加括号
- in
- 包含(相对于多个or)
- in不是一个区间。后面需要跟具体的值
- not
- 表示取非,注意用于is和in中
- ilke
- 表示模块查询,支持%或下划线匹配
- %表示任意多个字符
- _表示任意一个字符
- 等于
注意:除去where语句外,SQL中还有一种多条件的查询语句:
case..when..then..when..then..else..end
when可以理解为如果,then可以理解为就
排序查询(orber by)
- 语法格式
- select 字段名 from 表名 orber by 需要排序的字段名 排序方法
- 排序方法
- desc
- 降序
- asc
- 升序
- 默认为升序
- desc
- 当需要排序的字段名有多个时,排序方法也可以单独指定,然后使用逗号’,‘隔开,哪个字段名在前,表示这个字段名起主导作用,当这个字段名相同时,则比较下一个字段名内容
- 也可以根据字段的位置进行排序,orber by后面接列数即可,但是不建议使用,列的数据很容易发生改变
分组查询(group by)
在实际的应用中,可能有这样的需求,需要先进行分组,然后对每一组的数据进行操作。这个时候我们需要使用分组查询,
语法格式
- select 字段名 from 表名 group by 需要分组的字段名 having 条件
进行分组后,可以使用having对分组之后的数据的进一步进行条件过滤。having不能单独使用,having不能代替where,having必须和group by联合使用。
连接查询(join)
从一张表中单独查询,称为单表查询。a表和b表联合起来查询数据,从a表中取数据c,从b表中取数据d。这种跨表查询,多张表联合起来查询数据,被称为连接查询。
连接查询的分类
根据表连接的方式分为内连接和外连接。
- 内连接:
- 等值连接
- 非等值连接
- 自连接
- 外连接:
- 左外连接(左连接)
- 右外连接(右连接)
内连接语法格式
select 字段名 from 表名 inner join 另一个表名 on 连接条件
其中inner可以省略
连接条件相等时则叫做等值连接
连接条件不相等时则叫做非等值连接
对同一个表不同数据连接时叫做自连接
外连接语法格式
select 字段名 from 表名 right join 连接表名 on 连接条件
其中right可以换成left。当是right时则表示把join右边的表看成主表,主要是为了将
这张主表的数据全部查询出来,捎带着关联查询左边的表。在外连接当中,两张表连接,产生了主次关系。left表达意思一样,不过是表示左边的是主表。任何一个右连接都有左连接的写法。
任何一个左连接都有右连接的写法。
两种连接区别
外连接的查询结果条数一定是 >= 内连接的查询结果条数
内连接没有主次关系是平等的。而外连接有主次关系。
注意
- 多表连接在后面加join...on即可
- 如果不加连接条件的话,最终查询结果条数,是两张表条数的乘积,这种现象被称为:笛卡尔积现象。(笛卡尔发现的,这是一个数学现象。)
子查询
select语句中嵌套select语句,被嵌套的select语句称为子查询。
子查询都可以出现在哪里呢?
select
..(select).
from
..(select).
where
..(select).
where子句中的子查询
可以解决where子句中不能使用分组函数的问题
from子句中的子查询
from后面的子查询,可以将子查询的查询结果当做一张临时表。
合并查询(union)
使用union关键字,可以将多个表合并。union的效率要高一些。对于表连接来说,每连接一次新表,则匹配的次数满足笛卡尔积,成倍的翻。。。但是union可以减少匹配的次数。在减少匹配次数的情况下,还可以完成两个结果集的拼接。union在进行结果集合并的时候,要求两个结果集的列数相同。在oracle数据库中结构集合合并时列和列的数据类型也要一致。而MySQL不用
limit分页查询
limit作用是将查询结果集的一部分取出来。通常使用在分页查询当中。
完整用法:limit startIndex, length
startIndex是起始下标,length是长度。
起始下标从0开始。
startIndex可以省略,默认从0开始
注意:mysql当中limit在order by之后执行!!!!!!
分页公式
limit (pageNo-1)*pageSize , pageSize
pageNo表示页数。pageSize表示每页记录的条数
distinct关键字
作用是把查询结构去除重复记录。distinct只能出现在所有字段名的最前方
as关键字
作用是给前一个字段名取别名,可以省略,使用空格效果一样
查询顺序
- 关键字顺序不能变:
select
...
from
...
where
...
group by
...
having
...
order by
...
limit
...
... - 以上语句的执行顺序必须掌握:
1.from
2.where
3.group by
4.having
5.select
6.order by
7.limit.. - 查询的字段名可以使用数学表达式