文章目录
说明
一些说明
表结构
1. 基本查询操作
1.1. 基本语法
1.2. * 查询所有数据
1.3. as 给字段取别名
1.4. distinct 消除重复
1.4. 运算符
2. where 条件查询
2.1. where中的比较运算符
2.2. where中的逻辑运算符
2.3. 排序
3. 常用函数
3.1. 字符串函数
3.2. 数值函数
3.3. 日期和时间函数
3.3.1. date_format()函数
3.3.2. date_add()函数
3.4. 流程控制函数
3.4.1. if 流程函数
3.4.2. ifnull 流程函数
3.4.3. case 流程函数
3.5. 聚合函数
3.6. 数据库属性函数
4. group by 分组查询
正文
说明
一些说明
本文中所有中括号扩起的文字均代表可以替换的文字(包括中括号本身)
例如在我博客中的:
select [字段1],[字段2],...,[字段n] from [表名] where [查询条件];
在实际使用时,可以写作:
select name,age from users where id=3;
表结构
users表
工号 | 姓名 | 性别 | 年龄 | 职位 | 办公电话 | 手机号 |
201215121 | 李勇 | 男 | 40 | 主管 | 13650 | 13365245865 |
201215122 | 刘晨 | 女 | 29 | 收银员 | 13622 | 12535468521 |
201215123 | 王敏 | 女 | 29 | 会计 | (Null) | 17685324586 |
201215124 | 刘柳 | 男 | 42 | 总监 | 13623 | 19658245753 |
201215125 | 王辉 | 妖 | 29 | 会计 | (Null) | 16698532547 |
如上users表所示,
- users叫做表名
- “工号”、“姓名”、“性别”、“年龄”和“职位”等叫做一个字段
- 该表的一行(例如:201215122 刘晨 女 29 收银员 13622 12535468521)叫做一个记录
1. 基本查询操作
1.1. 基本语法
表的查询,即查询表中的数据记录,表的查询操作是SQL的基本数据操作之一,也是使用频率最高、最重要的数据操作。
一个一般的查询语法如下:
select [字段1],[字段2],...,[字段n] from [表名] where [查询条件];
关键字解释:
select: 查询语句的起始关键字,表示该操作为查询操作 from: 后接数据源,表示在[表名]中查询[字段i] where: 后接查询条件,表示要对查询做的限制,该操作可以帮助数据库使用者做精确的查找
1.2. * 查询所有数据
查询所有字段会把表内所有的数据都查询出来,在select语句中使用星号" * "通配符来查询表中的所有字段
语法为:
select * from [表名];
例如:
select * from users; --表示从users表中查询所有字段,
查询结果为:
1.3. as 给字段取别名
给字段取别名的意义在于可以清晰的展示某一字段所表示的内容,例如表中有一列“月工资”,要计算“年工资”时可将月工资12,这时候sql会显示该字段的字段名为“月工资12”,这对查询结果的展示很不友好,通常情况下都会给它取一个别名。
取表名的可以使用“as”关键字,或者直接在字段后面接“"[别名]"”
语法为:
select [字段名] as "[别名]", [字段名]"[别名]" from users;
例如下例:
select 工号, 工号 as "工", 姓名, 姓名"姓" from users;
1.4. distinct 消除重复
如果查询结果中出现重复数据,可用关键字“distinct”消除,若没有加上“distinct”关键字,查询结果将默认展示重复数据。
需要注意的是,“distinct”关键字是作用于所有字段的组合,只有在所有字段值都重复的情况下,才会消除重复。
语法如下:
select distinct [字段1],[字段2],...,[字段n] from [表名]
例如:
select 姓名,性别,年龄,职位 from users; select distinct 姓名,性别,年龄,职位 from users;
左边是未加distinct关键字的查询结果,右边是加上distinct关键字的查询结果
1.4. 运算符
SQL提供的基本算术运算符有:
+ :加法 - :减法 * :乘法 / :除法 % :取余
SQL的算术运算符可以在列、常量之间运算,例如:
select 姓名, 年龄, 年龄+2, 年龄*2, 年龄*2, 年龄/2, 年龄%2 from users;
查询结果为
要注意的是,运算符也是有优先级的,优先级规则与我们的数学运算符号规则一致。
2. where 条件查询
在select语句中,可以通过where子句,对数据进行过滤,其语法格式为
select [字段1],[字段2],...,[字段n] from [表名] where [查询条件];
例如:
-- 筛选出年龄大于30的人 select 姓名, 年龄 from users where 年龄 > 30;
2.1. where中的比较运算符
比较运算符 | 作用 | |||
= | 等于 | <> | 不等于 | |
> | 大于 | < | 小于 |
>= | 大于等于 | <= | 小于等于 |
between [值1] and [值2] | 介于[值1]和[值2]之间 | in([值1], [值2],…, [值n]) | 包含在[值1], [值2],…, [值n]之中 |
like | 条件匹配(%:匹配多个字符,_:匹配一个字符) | [值] is null | 判断[值]是否为空 |
例如:
-- 查询年龄不等于40的人 select 姓名, 年龄 from users where 年龄 <> 40;
-- 查询年龄介于20到30之间的人 select 姓名, 年龄 from users where 年龄 between 20 and 30;
-- 匹配姓名中第一个字是‘刘’,第二个字随意的人 select 姓名 from users where 姓名 like '刘_';
2.2. where中的逻辑运算符
逻辑运算符 | 作用 |
[表达式1] and [表达式2] | 两个表达式都为true,才返回true ,否则返回false |
[表达式1] or [表达式2] | 两个表达式其中之一为true,就返回true,两个都为false,才返回false |
not [表达式] | 若表达式为true,则返回false,若表达式为false,则返回true |
例如:
-- 找出年龄大于30的男性 select 姓名, 年龄, 性别 from users where 性别='男' or 年龄>30;
2.3. 排序
对查询结果进行排序使用order by 关键词
语法:
select [字段1], [字段2],..., [字段n] from [表名] order by [字段名1] [排序方式], [字段名2], [排序方式],..., [字段名n] [排序方式];
排序方式有两种:
- asc 顺序排列 (从小到大)
- desc 逆向排列 (从大到小)
例如:
-- 先按年龄顺序排列,再将重复值按照工号逆序排列 select 工号, 姓名, 年龄 from users order by 年龄 asc, 工号 desc;