欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

DQL(数据查询语言)

程序员文章站 2022-05-09 09:22:18
...

DQL(数据查询语言)

一.基础查询
1.1根据列表名查询
注意:查询列表可以使表中的字段,常亮值,表达式,函数。查询结果是一个虚拟的表格。
SELECT last_name FROM t_mysql_employees;

DQL(数据查询语言)

1.2.查询表中的多个字段
SELECT last_name,salary,email FROM t_mysql_employees;
DQL(数据查询语言)
1.3.查询表中的所有字段

SELECT
employee_id,
first_name,
last_name,
phone_number,
last_name,
job_id,
phone_number,
job_id,
salary,
commission_pct,
manager_id,
department_id,
hiredate
FROM
t_mysql_employees ;
注意:推荐使用写字段名代替“*”的方式
DQL(数据查询语言)
1.4查询常亮值
SELECT 100; ------>100
SELECT ‘john’;----->john

1.5查询表达式
SELECT 100%98; ------>2
2.列的别名

2.1方式一:在后面使用as
SELECT last_name AS 姓,first_name AS 名 FROM t_mysql_employees;
DQL(数据查询语言)
给一个列重命名,方便用于计算。别名紧跟列名,也可以在列名和别名之间加入关键字’as‘。
2.2方式二:使用空格
SELECT last_name 姓,first_name 名 FROM t_mysql_employees;
效果一样,用法只在as的位置用空格代替。
3.去重
SELECT DISTINCT department_id FROM t_mysql_employees;

DQL(数据查询语言)
从图中可以看到加入DISTINCT 关键字就使department_id下重复的部门编号给去除了。

4.+号的作用
4.1“+”号在java中有运算符(两个操作数都为数值型)和连接符(只有一个操作数为字符串)的两个作用。
4.2在mysql中:
起到运算符的作用。
select 100+90;---->190 两个操作数都为数值型,直接做加法运算。
DQL(数据查询语言)
从图中可以看到,只要其中乙方为字符型,就是试图将字符数值转换成数值型,如果转换成功,则继续作加法运算。
DQL(数据查询语言)
如果转换失败,则将字符型数值转换成0,
DQL(数据查询语言)
只要其中有一方为null,则结果肯定为null。

在案例中的应用
DQL(数据查询语言)
将员工的名和姓连接成一个字段,并且显示为姓名。

二.过滤和排序
1.过滤的用法:WHERE 子句紧随 FROM 子句。

语法:
select
查询列表
from
表名
where
筛选条件;

2.分类:
2.1 按条件表达式筛选
条件运算符:> < = != <> >= <=.
DQL(数据查询语言)
在这里查询t_mysql_employees表中所有salary>12000的员工信息
DQL(数据查询语言)
查询t_mysql_employees表中department_id不等于90的员工的名和部门编号;
2.2按逻辑表达式筛选
逻辑运算符:
作用:用于连接条件表达式
&& || !
and or not

&&和and:两个条件都为true,结果为true,反之为false
||或or: 只要有一个条件为true,结果为true,反之为false
!或not: 如果连接的条件本身为false,结果为true,反之为false

DQL(数据查询语言)
查询工资z在10000到20000之间的员工名、工资以及奖金
DQL(数据查询语言)
上图查询部门编号不是在90到110之间,或者工资不高于15000的员工信息。

2.3模糊查询
like between and in is null | is not null
2.3.1 like
特点:一般和通配符搭配使用
通配符:
% 任意多个字符,包含0个字符
_ 任意单个字符

DQL(数据查询语言)
上图查询名字中包含字符a的员工信息
DQL(数据查询语言)
上图查询了名字中第三个字符是n,第五个字符是l的员工名名和工资

DQL(数据查询语言)
上图查询员工命中第二个字符为_的员工名,因为_为通配符所以用ESCAPE转义字符,在模式中,当转义符置于通配符之前时,该通配符就解释为普通字符。

2.3.2 between and
①使用between and 可以提高语句的简洁度
②包含临界值
③两个临界值不要调换顺序
DQL(数据查询语言)
上图查询了编号在100到120之间的员工信息

2.3.3 in
含义:判断某字段的值是否属于in列表中的某一项
特点:
①使用in提高语句简洁度
②in列表的值类型必须一致或兼容
③in列表中不支持通配符
DQL(数据查询语言)
DQL(数据查询语言)

上图查询员工的工种编号是 IT_PROG、AD_VP、AD_PRES中的一个员工名和工种编号,可以看出豫剧还是相对简洁。

2.3.4 is null
=或<>不能用于判断null值
is null或is not null 可以判断null值

DQL(数据查询语言)
上图查询没有奖金的员工名和奖金率

安全等于<=>

DQL(数据查询语言)
上图查询没有奖金的员工名和奖金率

is null 和<=>的对比
is null仅仅可以判断null值,可读性较高,建议使用。
<=>即可以判断null值,又可以判断普通的数值,可读性较低

排序
语法:
select 查询列表
from 表名
【where 筛选条件】
order by 排序的字段或表达式;
特点:
1.asc代表的是升序,默认的可以省略。
desc代表的是降序

2.order by 子句可以支持单个字段,别名,表达式,函数,多个字段。
3.order by子句在查询语句的最后面。
DQL(数据查询语言)
上图添加筛选条件再排序:查询部门编号>=90的员工信息,并按员工编号降序
DQL(数据查询语言)
上图按别名排序:查询员工信息 按年薪升序

DQL(数据查询语言)
上图按多个字段排序:查询员工信息,要求先按工资降序,再按employee_id升序

DQL(数据查询语言)
上图按函数排序:查询员工名,并且按名字的长度降序

DQL(数据查询语言)
上图按照多个字段排序:查询员工信息,要求先按工资降序,再按employee_id升序

分组查询
1.概念:分组函数作用于一组数据,并对一组数据返回一个值。
2.组函数:
2.1功能:用作统计使用,又称为聚合函数或者统计函数或组函数。
2.2分类:sum求和, avg平均值, max最大值,min最小值,count计算个数
2.3特点:
2.3.1 sum和avg一般用于处理数值型, max,min和count可以处理任何类型。
2.3.2以上分组函数都忽略null值
2.3.3可以和distinct搭配实现去重的运算。
2.3.4 一般使用count(*)用作统计行数
2.3.4 和分组函数一同查询的字段要求是group by后的字段。

3.简单的使用
slelct sum(salary) from t_mysql_employees;

DQL(数据查询语言)
把hiredate列相加求和,再求平均数

DQL(数据查询语言)
上图找出了t_mysql_employees表中commission_pct的最大值和最小值

和DISTINCT搭配使用
DQL(数据查询语言)
前面一列是去重之后再求和,后面的是直接求和

语法:
select 查询列表
from 表
【where 筛选条件】
group by 分组的字段
【order by 排序的字段】;

特点:
1.和分组函数一同查询的字段必须是group by后出现的字段
2.筛选分为两类:分组前筛选和分组后筛选

	针对的表			位置		连接的关键字

分组前筛选 原始表 group by前 where

分组后筛选 group by后的结果集 group by后 having

DQL(数据查询语言)
上图查询每个部门的员工个数,
DQL(数据查询语言)
上图查询每个公众的员工平均工资

2.可以实现分组前的筛选。

DQL(数据查询语言)
上图查询邮箱中包含a字符的每个部门最高工资。

DQL(数据查询语言)

上图查询了有奖金的每个领导手下员工的平均工资

分组后筛选
DQL(数据查询语言)
上图可以看出是先出来group by结果集,然后再筛选大于5的
DQL(数据查询语言)
上图查询每个工种 有奖金 的员工的 最高工资>12000 的 工种编号和最高工资
DQL(数据查询语言)
在之前的操作基础上加了个排序操作
DQL(数据查询语言)
同时查询每个工种 每个部门的最低工资,并按照最低工资降序。

多表查询
1.笛卡尔集
笛卡尔集产生的条件
– 省略连接条件
– 连接条件无效
– 所有表中的所有行互相连接
• 为了避免笛卡尔集, 可以在 WHERE 加入有 效的连接条件。
多表查询实际就是笛卡尔集

笛卡尔乘积:
假设集合A={a, b, c, d},集合B={0, 1, 2},则两个集合的笛卡尔积为:
{(a, 0), (a, 1), (a, 2),
(b, 0), (b, 1), (b, 2),
(c, 0), (c, 1), (c, 2),
(d, 0), (d, 1), (d, 2)
}
可见,上面的笛卡尔集在oracle中是这样表示的:每一个二元组 如(a, 0) 都相当于虚表中的一条记录,共有4 x 3=12行记录,接下来就是从这临时表中根据where条件筛选了,最后select显示想要字段。

案例:
DQL(数据查询语言)
DQL(数据查询语言)
上表通过两个查询员工的信息