SQL语句的全称叫做(Structured Query Language)结构化查询语言,相信所有的java程序员对SQL都不陌生,因为整个Java数据库中一直有SQL语句的存在。可能Java零基础的小白对于SQL还不是很了解,下面就讲一讲其基础性的知识——SQL语句五种分类以及SQL相关的运算符~
目录
一. 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菜鸟,发布于北京海淀。
好记性不如烂笔头,持续学习,坚持输出~ 可以点赞、评论、收藏啦。