数据库相关(三)

SQL语句的全称叫做(Structured Query Language)结构化查询语言,相信所有的java程序员对SQL都不陌生,因为整个Java数据库中一直有SQL语句的存在。可能Java零基础的小白对于SQL还不是很了解,下面就讲一讲其基础性的知识——SQL语句五种分类以及SQL相关的运算符~


目录

一. SQL语句的分类

1.1 数据库查询语言(DQL)

1.2 数据库操作语言(DML)

1.3 数据库定义语言(DDL)

1.4 事务控制语言(TCL)

1.5 数据控制语言(DCL)

二. MySQL中的运算符

2.1 算数运算符

2.2 比较运算符

2.2.1 关于 = 运算符

2.2.2 IS NULL 和 IS NOT NULL

2.2.3 BETWEEN … AND …

2.2.4 LIKE

2.25 IN 和 NOT IN

2.3 逻辑运算符

三. DISTINCT去重

四. 排序 ORDER BY 

五. 分页查询 LIMIT 

六. 聚合函数

七. 分组查询 GROUP BY

八. HAVING关键字

九. 别名 


一. SQL语句的分类

SQL语句的五种分类分别是DQL、DML、DDL、TCL和TCL,下面对SQL语句的五种分类进行列举:

1.1 数据库查询语言(DQL)

数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE 子句组成的查询块,简称DQL,Data Query Language。代表关键字为select。

1.2 数据库操作语言(DML)

数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE 子句组成的查询块,简称DQL,Data Query Language。代表关键字为select。

1.3 数据库定义语言(DDL)

数据定义语言DDL用来创建数据库中的各种对象,创建、删除、修改表的结构,比如表、视图、索引、同义词、聚簇等,简称DDL,Data Denifition Language。代表关键字为create、drop、alter。和DML相比,DML是修改数据库表中的数据,而 DDL 是修改数据中表的结构。

1.4 事务控制语言(TCL)

TCL经常被用于快速原型开发、脚本编程、GUI和测试等方面,简称:TCL,Trasactional Control Languag。代表关键字为commit、rollback。

1.5 数据控制语言(DCL)

数据控制语言DCL用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,对数据库实行监视等。简称:DCL,Data Control Language。代表关键字为grant、revoke。

二. MySQL中的运算符

2.1 算数运算符

算术运算符,包括 +、-、*、/ 或者 DIV、% 或者 MOD(求余或求模)。

  • MySQL中,+ 只做数值相加,如果遇到非数值类型,MySQL会先尝试将其转换为数值,如果转换失败,则当作数值0处理。也就是说,这里存在 隐式转换。
    SELECT 99 + '1'
    FROM DUAL; -- 返回100
    
    SELECT 100 + 'a'
    FROM DUAL; -- 返回100
    
    SELECT 'A' + 'B'
    FROM DUAL; -- 返回0
  • MySQL中,字符串拼接使用函数CONCAT(str1,str2,...)实现。
    # MySQL中,字符串拼接使用函数CONCAT()实现
    SELECT CONCAT('HEL','LO')
    FROM DUAL; -- 返回HELLO
    
  • 空值参与运算,运算结果仍为空值。
    SELECT 100 + NULL
    FROM DUAL; -- 返回NULL
  • MySQL中,除数为0时,结果为空值,即NULL。
    SELECT 100/0
    FROM DUAL; -- 返回NULL

2.2 比较运算符

比较运算符,包括 =、<=>、<> 或者 !=、<、<=、>、>=,也包括 IS NULL、IS NOT NULL、BETWEEN AND、IN()、NOT IN()、LIKE等。

2.2.1 关于 = 运算符

=,等号运算符。如果一侧为数值,另一侧为非数值,则存在隐式转换。即,先尝试将非数值转换为数值,如果转换失败,则当作数值0处理。
=,等号运算符。如果两侧都是字符串,则比较字符串中字符的ANSI编码。
=,等号运算符,如果任一侧出现NULL,比较结果为NULL。
<=>,安全等于运算符。和=类似,区别在于,<=>可以对NULL进行判断。

2.2.2 IS NULL 和 IS NOT NULL

判断字段是NULL:字段 IS NULL、ISNULL(字段)。
判断字段不是NULL:字段 IS NOT NULL、NOT ISNULL(字段)。 

2.2.3 BETWEEN … AND …

BETWEEN 条件下界 AND 条件上界,包含边界。

2.2.4 LIKE

%,代表不确定个数的字符。可以代表0个字符,可以代表1个字符,也可以代表多个字符。
_,代表任意一个字符。
\,转义字符。ESCAPE 字符,指定某个字符为转义字符。

2.25 IN 和 NOT IN

MySQL 中的 IN 运算符用来判断表达式的值是否位于给出的列表中;如果是,返回值为 1,否则返回值为 0。

NOT IN 的作用和 IN 恰好相反,NOT IN 用来判断表达式的值是否不存在于给出的列表中;如果不是,返回值为 1,否则返回值为 0。

2.3 逻辑运算符

逻辑运算符,包括 NOT 或 !,AND 或 &&、OR 或 || 、XOR (逻辑异或)。AND和OR可以一起使用,且AND的优先级比OR的优先级高。

三. DISTINCT去重

去掉重复的数据

//查询员工表中出现了哪几种不同的工作
select distinct job from emp;
//查询员工表中出现了哪几个部门的id
select distinct dept_id from emp;

四. 排序 ORDER BY 

格式: order by 字段名 asc升序(默认)/desc降序;

//查询员工姓名和工资,按照工资升序排序
select name,sal from emp order by sal;
select name,sal from emp order by sal desc;
//查询工资高于2000的员工姓名和工资, 按照工资降序排序
select name,sal from emp where sal>2000 order by sal desc;
//查询每个员工的姓名,工资和部门id 按照部门id升序排序,如果部门id一致则按照工资降序
select name,sal,dept_id from emp order by dept_id,sal desc;

五. 分页查询 LIMIT 

格式: limit 跳过的条数

请求的条数(每页的条数)跳过的条数= (请求的页数-1)*每页的条数

查询第一页的5条数据(1-5)   limit 0,5  

查询第2页的5条数据(6-10)   limit 5,5

//查询工资最低的3个人的信息
select * from emp order by sal limit 0,3;
//查询工资最高的员工信息
select * from emp order by sal desc limit 0,1;
//按照入职日期排序 查询第2页的3条数据
select * from emp order by hiredate limit 3,3;
//按照工资升序排序查询第3页的2条数据
select * from emp order by sal limit 4,2; 

六. 聚合函数

通过聚合函数可以对查询的多条数据进行统计查询

//平均值avg()
//查询1号部门的平均工资
select avg(sal) from emp where dept_id=1;

//最大值max()
//查询1号部门的最高工资
select max(sal) from emp where dept_id=1;

//最小值min()
//查询1号部门的最低工资
select min(sal) from emp where dept_id=1;

//求和sum()
//查询程序员的工资总和
select sum(sal) from emp where job="程序员";

//计数count(*)
//查询员工表的人数
select count(*) from emp;

七. 分组查询 GROUP BY

可以将某个字段相同值的数据划分为一组,然后以组为单位进行统计查询

如果题目中出现每个或每种这样的关键字 并且查询的内容为聚合函数的结果

//查询每个部门的平均工资
select dept_id,avg(sal) from emp group by dept_id;
//查询每个部门的最高工资
select dept_id,max(sal) from emp group by dept_id;
//查询每种工作的平均工资
select job,avg(sal) from emp group by job;

八. HAVING关键字

where后面只能写普通字段条件,不能写聚合函数条件

having后面专门写聚合函数条件,而且需要和group by分组查询结合使用,写在group by 的后面。

//查询每个部门的平均工资,要求平均工资大于2000
select dept_id,avg(sal) from emp group by dept_id having avg(sal)>2000;
select dept_id,avg(sal) a from emp group by dept_id having a>2000;
//查询每种工作的人数,只查询人数大于1的
select job,count(*) c from emp group by job having c>1;
//查询每个部门的工资总和,只查询有领导的员工, 并且要求工资总和大于5400
select dept_id,sum(sal) s from emp where manager is not null group by dept_id having s>5400;

九. 别名 

select name as "名字" from emp;

select name "名字" from emp;

select name 名字 from emp;

各种查询相关的关键字顺序:

select 字段信息 from 表名 where 普通字段条件 group by 分组字段名 having 聚合函数条件 order by 排序字段名 limit 跳过条数,请求条数.


本文完!

写在结尾:

2022 年 10 月 24 日  一个java菜鸟,发布于北京海淀。

好记性不如烂笔头,持续学习,坚持输出~  可以点赞、评论、收藏啦。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码云说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值