DQL语言

数据库中常见函数

单行函数

一、字符函数

length 获取参数值的字节个数

concat 拼接字符串

substr 截取从指定索引处指定字符长度的字符

instr 返回子串第一次出现的索引,如果找不到返回0

trim 去除前后空格字符

upper 将字符变成大写

lower 将字符变成小写

lpad 左填充

rpad 右填充

replace 替换

二、数学函数

round 四舍五入

ceil 向上取整

floor 向下取整

truncate 截断

mod 取余

rand 获取随机数,返回0-1之间的小数

三、日期函数

now 返回当前系统日期+时间

curdate 返回当前系统日期,不包含时间

curtime 返回当前时间,不包含日期

获取指定部分的年,月, 日,小时,分钟,秒

year

month

monthname 返回英文

day

hour

minute

second

str_to_date 将日期格式的字符转换为指定格式的日期

date_format 将日期转换成字符

datediff 返回两个日期相差的天数

四、其他函数

version 当前数据库服务器的版本

datebase 当前打开的数据库

user 当前用户

password(’字符‘) 返回该字符的密码形式

MD5(’字符‘):返回该字符的MD5加密

五、控制函数

if(条件表达式1,表达式2)如果表达式成立,则返回表达式1,否则返回表达式2.(if else的效果)

case

使用一:switch case 的效果

case 要判断的字段或表达式

when 常量1 then 要显示的值1或语句1;

when 常量2 then 要显示的值2或语句2;

else 要显示的值n或语句n;

end

使用二:多重if的效果

case

when 条件1 then 要显示的值1或语句1

when 条件2 then 要显示的值2或语句2

else 要显示的值n或语句n

end

分组函数

功能:用作统计使用,又称为聚合函数或统计函数或组函数

分类:sum、avg、min、max、count

特点:1. sum、avg一般用于处理数值型

max、min、count可以处理任何类型

  1. 以上分组函数都忽略null

  2. 可以和distinct搭配实现去重的运算

  3. count具体介绍

    count(字段):统计该字段非空值的个数

    count(*):统计结果集的行数

    count(1):统计结果集的行数

    效率上:

    ​ MyISAM存储引擎,count(*)最高

    ​ InnoDB存储引擎,count(*)和count(1)效率>count(字段)

  4. 和分组函数一同查询的字段要求是group by后的字段

分组查询

语法:

select 分组函数 分组后的字段(要求出现在group by后面的字段)

from 表名

【where 筛选条件】

group by 分组的字段

【having 分组后的筛选】

【order by 排序列表】

注:查询列表必须特殊,要求是分组函数和group by后出现的字段

特点:

1.分组查询中的筛选条件分为两类

						数据源									位置 							关键字

分组前筛选 原始表 group by 子句的前面 where

分组后筛选 分组后的结果集 group by 子句的前面 having

注:分组函数做条件肯定是放在having子句中;

​ 能用分组前筛选的,就优先考虑分组前的筛选

  1. group by子句支持单个字段分组,多个字段分组(多个字段之间用逗号隔开没有顺序要求),表达式或函数(用的较少)

连接查询

一、含义:又称为多表查询,当查询的字段涉及到多个表时,就会用到多表查询;

select 字段1,字段2

from 表1,表2,,,;

笛卡尔乘积:当查询多个表时,没有添加有效的连接条件,导致多个表所有行实现完全连接;

如何解决:添加有效的连接条件

二、分类

按年代分类:sq192:

​ 等值

​ 非等值

​ 自连接

​ 也支持一部分外连接(用于Oracle、SqlServer、mysql不支持)

sq199(推荐使用)

​ 内连接

​ 等值

​ 非等值

​ 自连接

​ 外连接

​ 左外

​ 右外

​ 全外(mysql不支持)

​ 交叉连接

三、SQL92语法

  1. 等值连接

    语法:

    select 查询列表

    from 表1 别名,表2,别名

    where 表1.key=表2.key

    【and 筛选条件】

    【group by 分组字段】

    【having 分组后的筛选】

    【order by 排序字段】

    特点:

    一般为表起别名;

    多表的顺序可以调换;

    n表连接至少需要n-1个连接条件;

    等值连接的结果是多表的交集部分;

    2.非等值连接

    语法:

    select 查询列表

    from 表1 别名,表2,别名

    where 非等值的连接条件

    【and 筛选条件】

    【group by 分组字段】

    【having 分组后的筛选】

    【order by 排序字段】

3.自连接

语法:

select 查询列表

from 表 别名1,表,别名2

where 等值的连接条件

【and 筛选条件】

【group by 分组字段】

【having 分组后的筛选】

【order by 排序字段】

四、SQL99语法

1.内连接

语法:

select 查询列表

from 表1 别名

【inner】 join 表2 别名 on 连接条件

where 筛选条件

group by 分组列表

having 分组后的筛选

order by 排序列表

limit 子句;

特点:

1)表的顺序可以调换

2)内连接的结果=多表的交集

3)n表连接至少需要n-1个连接条件

2.外连接

语法:

select 查询列表

from 表1 别名

left|right|full【outer】 join 表2 别名 on 连接条件

where 筛选条件

group by 分组列表

having 分组后的筛选

order by 排序列表

limit 子句;

特点:

1)查询结果=主表中所有的行,如果从表和它匹配的将显示匹配行,如果从表没有匹配的则显示null

2)left join 左边的就是主表,right join 右边的就是主表

​ full join 两边都是主表

3)一般用于查询除了交集部分的剩余的不匹配的行

3.交叉连接

语法:

select 查询列表

from 表1 别名

cross join 表2 别名;

特点:

类似于笛卡尔乘积

子查询

一、含义

嵌套在其他语句内部的select语句称为子查询或内查询

外面的语句可以是insert、update、delete、select等,一般select作为外面语句较多;

外面如果为select语句,则此语句称为外查询或主查询;

二、分类

1、按出现位置

select后面

​ 仅仅支持标量子查询

from后面

​ 表子查询

where或having后面

​ 标量子查询

​ 列子查询

​ 行子查询

exists后面

​ 标量子查询

​ 列子查询

​ 行子查询

​ 表子查询

2、按结果集的行列

标量子查询(单行子查询):结果集为一行一列

列子查询(多行子查询):结果集为多行一列

行子查询:结果集为多行多列

表子查询:结果集为多行多列

三、示例

where或having后面

1、标量子查询

案例:查询最低工资的员工姓名和工资

1)最低工资

select min(salary) from employees

2)查询员工的姓名和工资,要求工资=1)

select last_name,salary

from employees

where salary=(

select min(salary) from employees

);

2、列子查询

案例:查询所有是领导的员工姓名

1)查询所有员工的manager_id

select manager_id

from employees

2)查询姓名,employee_id属于1)列表的一个

select last_name

from employees

where employee_id in (

​ select manager_id

​ from employees

);

分页查询

一、应用场景

当要查询的条目数太多,一页显示不完

二、语法

select 查询列表

from 表

limit 【offset,】size;

注:offset代表的是起始的条目索引,默认为0

size代表的是显示的条目数

公式:

假如要显示的页数为page,每一页条目数为size

select 查询列表

from 表

limit (page-)*size,size;

联合查询

一、含义

union 联合 合并:将多条查询语句的结果合并为一个结果

二、语法

查询语句1

union 【all】

查询语句2

union 【all】

……

三、意义

1.将一条比较复杂的查询语句拆分成多条语句

2.适用于查询多个表的时候,查询的列基本一致

应用场景:

要查询的结果来自于多个表,且多个表没有直接的连接关系,但查询的信息一致时;

四、特点

1、要求多条查询语句的查询列数是一致的

2、要求多条查询语句的查询的每一列的类型和顺序最后一致

3、union 关键字默认去重,如果使用union all 可以包含重复项

查询总结

语法:

select 查询列表 (7)

from 表1 别名 (1)

连接类型 join 表2 (2)

on 连接条件 (3)

where 筛选 (4)

group by 分组列表 (5)

having 筛选 (6)

order by 排序列表 (8)

limit 起始条目索引,条目数; (9)

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值