mysql 笛卡尔去重_MySQL基础 -DQL语言(上)

一、基础查询

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值