一、基础查询
1.语法
1.1查询列表可以是:表中的字段、常量值、表达式、函数
1.2查询的结果是一个虚拟的表格
2.查询表中的单个字段
select 查询字段 from 表名;
3.查询表中的多个字段
select 查询字段,字段名,字段名... from 表名;
select *from 表名;
4.查询常量值
select 常量;
select 字符串;
5.查询表达式
select 表达式; --如100*98
6.查询函数
select version();
7.起别名
1.1 AS 或 省略
1.2 如果起的别名有关键字,则用双引号区分
8.去重
select distinct 字段名 form 表名;
9.连接字段
select concat(字段,字段) as 别名;
10判断空值
ifnull(字段,0) --对列中有空值的使用
二、条件查询
1.1语法:select 查询列表 from 表名 where 筛选条件;
1.2分类:条件表达式筛选 、逻辑表达式筛选、模糊查询(like, between and, in, is null)
例如:
like:select 字段 from 表名 where 字段 like ‘%a%‘; 查询字段中包含a的信息。
like:select 字段 from 表名 where 字段 like ‘__a_b%‘; 查询字段中第三个字母为 a 第五个字母为b的信息。
between and : 包含临界值,条件不可调换位置。
in: 判断某字段的值是否属于in列表中的某一项。类型必须一致或兼容。
is null 或 is not null :判断是否为空值。
三、排序查询
1.select 查询列表
form 表名
【where 筛选条件】
order by 排序列表 asc|desc; --升序(默认)与降序
可以使用表达式、别名、函数排序
多个字段排序:select 字段 from 表名 order by 字段 asc,字段 desc;
一般放在查询语句最后面,limit语句除外。
四.常见函数
类似于java中的方法。
单行函数:
1.1字符函数:
1.length() 获取字符长度,utf-8 汉字是占3个,jdk占两个。
2.concat() 拼接字符串
3.upper()、lower() 改变字符大小写
4.substr()或substring() 字符截取
5.instr() 返回子串第一次出现的索引,如果找不到返回0
6.trim() 删掉字符集两端的字符
7.lpad() 用指定的字符实现左填充指定长度
8.rpad() 用指定的字符实现右填充指定长度
9.replace() 替换
1.2数学函数
1.round() 四舍五入
2.ceil() 向上取整
3.floor() 向下取整
4.truncate() 截断
5.mod() 取余 返回值的正负参照被除数。a-a/b*b
1.3日期函数
1.now() 返回当前系统日期+时间
2.curdate() 返回当前系统日期不包含时间
3.curtime() 返回当前系统时间不包含日期
4.select() YEAR(字段) 年 from 表名; 返回指定的部分,年。
5.str_to_data() 将字符通过指定的格式转换成日期
6.date_format() 将日期转换为字符
7.datediff() 统计两日期之差
1.4流程控制函数
1.if() if else 效果
2.case() switch case 效果。两种方法:
方法一:
case 要判断的字段或表达式
when 常量1 then 要显示的值1或语句1;
when 常量2 then 要显示的值2或语句2;
...
else 要显示的值n或语句n;
end
方法二:
case
when 条件1 then 要显示的值1或语句1;
when 条件2 then 要显示的值2或语句2;
...
else 要显示的值n或语句n;
end
五、分组函数
1.功能:用作统计使用,又称为聚合函数或统计函数或组函数
2.分类:sum 求和、avg 平均值、max最大值、min最小、count个数。
3.特点:sum、avg一般用于处理数值型。max、min、count可以处理任何类型。都忽略null值。
4.可以和distinct搭配实现去重运算。
5.统计行数:select count(*) from 表名;
6.和分组函数一同查询的字段要求是group by后的字段。
六、分组查询
1.添加分组前的筛选
数据源是原始表,关键字where
select 分组函数,列(要求出现在group by的后面)
form 表名
【where 筛选条件】
group by 分组的列表
【order by 语句】;
2.添加分组后的筛选
数据源是分组后的结果集,关键字having,分组函数做条件优先放在having语句中。
select 分组函数,列(要求出现在group by的后面)
form 表名
【where 筛选条件】
group by 分组的列表
【order by 语句】
having 筛选条件;
3.按多个字段分组
select 分组函数,列,列
form 表名
【where 筛选条件】
group by 分组的列表,列表
【order by 语句】;
注意:查询列表必须特殊,要求是分组函数和group by后出现的字段。
七、连接查询(多表查询)sq199版
select 查询列表
from 表1 别名 【连接类型】
join 表2 别名
on 连接条件
【where 筛选条件(主键列)】
【group by 分组】
【having 筛选条件】
【order by 排序列表 desc】;
分类:
内链接:inner
外连接:
左外:left 【outer】
右外:right 【outer】
全外:full 【outer】
交叉连接:cross
内连接
1.等值连接
select 字段1 字段2
from 表1
inner join 表2
on 表1.查询字段 = 表2.查询字段
2.非等值连接
select 字段1 字段2
from 表1
inner join 表2
on 表1.查询字段 between 表2.查询字段1 and 表2.查询字段2
3.自连接
select 字段1 字段2
from 表 别名1
inner join 表 别名2
on 别名1.查询字段1 = 别名2.查询字段2
外连接
应用场景:用于查询一个表中由,另一个表没有的记录
特点:外连接的查询结果为主表中的所有记录,如果从表中有则和它匹配,没有则显示null
左外连接:left join 左边的是主表
右外连接:right join 右边是主表
全外连接 = 内连接的结果 + 表1中有但表2中没有的 + 表2中有但表1中没有的
1.左外连接
select 字段1, 字段2
from 表1
left outer join 表2
on 表1.字段1 = 表2.字段2
【where 表2.key is null】;
2.右外连接
select 字段1, 字段2
from 表1
right outer join 表2
on 表1.字段1 = 表2.字段2
【where 表1.key is null】;
3.全外连接 --MySQL不支持
select 字段1, 字段2
from 表1
full outer join outer join 表2
on 表1.字段1 = 表2.字段2;
4.交叉连接 -- 结果为笛卡尔乘积
select 字段1, 字段2
from 表1
cross join 表2
on 表1.key = 表2.key
【where 表1.key is null or 表2.key is null】;
原文:https://www.cnblogs.com/nnadd/p/12547463.html