SQL语句

数据查询语句中有些子句是可以省略的,但各个子句的书写顺序是固定的:

select {*|字段名|表达式|公式|常量|函数}
[ from <表名>]
[ where <筛选条件>] 
[ group by <字段名>] 
[ having <筛选条件>] 
[ order by <字段名> [ asc | desc ] ] 
[ limit [偏移量,]行数 ];

查询指定字段
如果需要查询表中部分字段,可以通过指定字段名的方式来进行查看,多个字段之间用逗号隔开
语法格式:

select <字段名1>[,<字段名2>...,<字段名n>] from <表名1>[,<表名2>...,<表名n>]

示例:

select s_id,score from sc;

查询所有字段
在SELECT语句中使用星号“*”通配符查询表中所有字段。
语法格式:

select * from <表名1>[,<表名2>...,<表名n>]

示例:

select * from sc;

一般情况下,除非需要使用表中所有的字段,否则最好不要使用通配符“*”。使用通配符虽然可以节省输入查询语句的时间,但是获取不需要的字段通常会降低查询和所使用的应用程序的效率。通配符的优势是,当不知道所需的字段名时,可以通过通配符获取。

主键和非空约束字段,取得值不能为空

在SQL查询语句中,可以使用where子句来指定查询条件,对表中的记录进行筛选。

where子句中的查询条件是由运算符构成的逻辑判断表达式,结果取值为1、0或null。条件满足结果为1的记录会出现在结果集中。
语法格式:

select <字段名列表> from 表名 where <查询条件>;
select * from sc where score>=60 and score<=80;

数据库中的空值显示为null,它是一种特殊的未知值,不属于任何一种数据类型,因此它和任何类型的数据进行运算,返回结果都为null。

在where子句中进行条件查询时,就需要使用is [not] null进行空值查询。

语法格式:

select <字段名列表> from <表名> where <字段名> is [not] null;
select * from stu where s_gender is null;

select * from stu where s_gender is not null;

模糊查询

在where子句中,当我们不知道准确的查询条件时,可以使用LIKE关键字和通配符组成比较特定数据的搜索模式对文本字段进行模糊查询。

通配符是用于匹配字符串中的一部分字符的特殊符号,同时使用LIKE关键字在WHERE子句中构成查询条件。

模糊查询只能用于文本字段(字符串),非文本数据类型字段不能使用通配符进行模糊查询。

语法格式:

select <字段名列表> from 表名 where 字段名 like <通配符>;

百分号(%)
当不确定需要匹配的字符数量时,可以使用百分号%来匹配0个或多个字符。
下划线(
当明确知道需要匹配的字符数量时,可以使用下划线
,一个下划线匹配一个字符,通配符的位置应该跟需要匹配的字符位置一致。
示例:

#查询姓李的学生信息
select * from stu where s_name like '李%';

#查询姓名中第二个字符为“菊"的学生信息
select * from stu where s_name like '_菊%';

使用通配符的技巧
使用通配符进行模糊查询一般要比其他条件查询耗费更长的处理时间,所以我们要注意使用通配符的方法。

不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符。
在确实需要使用通配符时,也尽量不要把它们用在搜索模式的开始处。把通配符置于开始处,搜索起来是最慢的。
注意通配符的位置。如果放错地方,可能不会返回想要的数据。

默认先执行and再执行or,可用圆括号改变运算符优先级

在SQL语句中,可以使用order by子句对select语句查询出的结果按一个或多个字段进行排序。

指定多字段排序时,多个字段间用逗号隔开,会先按第一个字段的值进行排序,当第一个字段值均相同时再按第二个字段值进行排序,如果第一个字段值中没有重复数据,则不会按照第二个字段排序,其结果跟按照第一个字段进行单字段排序的结果是一样的。

同时order by子句后每个字段都可以指定排序方向,关键字asc表示升序,关键字desc表示降序,排序方向的关键词与字段名间用空格隔开。当没有指定排序方向时,默认该字段按照升序进行排序。

语法格式:

select 字段1[,字段2,] from 表名 order by 字段1[ 排序方向,字段2 排序方向,];
#查询所有学生考试成绩,按分数高低顺序显示
select * from sc order by score desc;

#查询所有学生考试成绩,按课程编号升序、分数降序显示
select * from sc order by c_id,score desc;
select 字段1[,字段2,] from 表名 limit [偏移量,] 行数;
#查询成绩最高的5名学生
select * from sc order by score desc limit 5;

#查询成绩排名第6-10名的学生
select * from sc order by score desc limit 5,5;

ORDER BY子句中可以不指定排序方向,缺省时默认排序方向为升序。

在SQL语句中允许使用group by子句将查询结果按照一个或多个字段进行分组,字段值相同的为一组,对每个组进行聚合计算,实现数据的分组汇总。

分组后每个组内通常包含多条记录,需要对每个组内的多条记录进行聚合运算,而select子句中只能出现分组字段和聚合字段。

语法格式:

select <字段名列表> from <表名> [where <查询条件>] group by <字段名列表>;
#查询每个学生的平均成绩
select s_id,avg(score) 
from sc 
group by s_id;

SQL语句中对group by子句分组聚合后的结果,如果还需要进一步筛选,可以使用having子句来指定筛选条件。

having子句通常是配合group by子句一起使用,其功能和where 子句非常相似,都是对数据进行过滤,having 子句支持 where 子句中所有的操作符和语法。但区别在于where子句是针对数据表进行筛选的,在对查询结果进行分组前,就将不符合where查询条件的记录去掉,故其查询条件中不能包含聚合函数。而having子句则是对分组聚合后的结果进行过滤,故having子句中的筛选字段必须是可以出现在分组结果中的字段,且其筛选条件中经常包含聚合函数。

语法格式:

select <字段名列表> from <表名> [where <查询条件>] group by <分组字段列表> having <筛选条件>;
select s_id,avg(score) 
from sc 
group by s_id 
having avg(score)>=80;

WHERE是对表中数据的筛选,HAVING是对分组后的结果进行筛选

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis是一个开源的持久层框架,它可以帮助开发者简化数据库操作的代码。MyBatis动态SQL语句是指在编写SQL语句时可以根据不同的条件动态生成不同的SQL语句。 MyBatis提供了以下几种方式来实现动态SQL语句: 1. if元素:通过if元素可以根据条件判断来生成不同的SQL语句片段。例如: ``` <select id="getUserList" parameterType="User" resultType="User"> SELECT * FROM user WHERE 1=1 <if test="name != null"> AND name = #{name} </if> <if test="age != null"> AND age = #{age} </if> </select> ``` 上述示例中,如果传入的User对象中name属性不为空,则会生成AND name = #{name}这段SQL语句。 2. choose、when、otherwise元素:通过choose、when、otherwise元素可以实现类似于switch语句的功能,根据不同的条件选择不同的SQL语句片段。例如: ``` <select id="getUserList" parameterType="User" resultType="User"> SELECT * FROM user WHERE 1=1 <choose> <when test="name != null"> AND name = #{name} </when> <when test="age != null"> AND age = #{age} </when> <otherwise> AND status = 'ACTIVE' </otherwise> </choose> </select> ``` 上述示例中,如果传入的User对象中name属性不为空,则会生成AND name = #{name}这段SQL语句;如果name为空而age不为空,则会生成AND age = #{age}这段SQL语句;如果name和age都为空,则会生成AND status = 'ACTIVE'这段SQL语句。 3. foreach元素:通过foreach元素可以实现对集合类型的参数进行遍历,并生成相应的SQL语句片段。例如: ``` <select id="getUserList" parameterType="List" resultType="User"> SELECT * FROM user WHERE id IN <foreach collection="list" item="id" open="(" separator="," close=")"> #{id} </foreach> </select> ``` 上述示例中,如果传入的List参数中包含[1, 2, 3]三个元素,则会生成SELECT * FROM user WHERE id IN (1, 2, 3)这段SQL语句。 这些是MyBatis动态SQL语句的几种常用方式,通过它们可以根据不同的条件生成不同的SQL语句,提高了SQL语句的灵活性和可复用性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值