MySQL基础 -DQL语言(上)

一、基础查询

1.语法

1.1查询列表可以是:表中的字段、常量值、表达式、函数
1.2查询的结果是一个虚拟的表格

2.查询表中的单个字段

select 查询字段 from 表名;

3.查询表中的多个字段

select 查询字段,字段名,字段名... from 表名;
select *from 表名;

4.查询常量值

select 常量;
select 字符串;

5.查询表达式

select 表达式; --如100*98

扫描二维码关注公众号,回复: 10085268 查看本文章

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】;

猜你喜欢

转载自www.cnblogs.com/nnadd/p/12547463.html