Skip to content

SQL语句(基础理论篇)

更新: 12/31/2024 字数: 0 字 时长: 0 分钟

特别鸣谢

史上最全SQL基础知识总结(理论+举例)-CSDN博客

为什么要学习牢固SQL语法

作为初级后端开发工程师,CRUD是工作中最不可少的部分,可以说是工作的99%都是CRUD,尽管java中存在mybatis与mybatisPlus等一系列框架,但本质都是基于sql语言与JDBC的再封装。

无论是代码层面还是通过navicat等可视化工具对数据库进行操作,SQL语句的熟练掌握永远都是初级开发立住身份的重要一环。

本篇文章终结了自己学习中常用的SQL语法,用于自己复习使用

基础语法

DML(Data Manipulation Language):数据操作语言————对数据库内容进行修改

INSERT 插入数据

sql
insert into 表名 (列名 1,列名 2, …) values (列名 1 插入的值,列名 2 插入的值, …)

eg.

sql
INSERT into db_stu (id,name,sex) VALUES (1,'sad',0)

所有字符串数据必须使用单引用!

UPDTE 更新数据

sql
update 表名 set 列名1=要更新为的值, 列名2=要更新为的值, 列名3=要更新为的值.... where 要更新的列的条件

eg

sql
UPDATE db_stu set sex=1 where id=1

DELETE 删除数据

sql
delete from 表名 where 要删除的列的条件

eg

sql
DELETE FROM db_stu WHERE id=1

DQL(Data Query Language):数据查询语言————对数据库内容进行查询

SELECT 查询数据

sql
select 列名1,列名2,... 
from 表名
where 查询条件
group by 分组查询—————对查询结果分组
having 分组的条件
order by 列名  排序顺序 (desc降序 asc 升序)
limit 起始行, 行数  对查询结果抽取一部分作为最终结果

条件查询

where中用来判断逻辑的词

=、!=、<>、<、<=、>、>=; 不多说(注意:sql中部分字符集的字符串=不区分大小写,可以在字符串判断语句前加binary来区分) 列名 BETWEEN…AND;一个区间内的值 左右均闭合 列名 IN(set);类似于java中的contain函数 判断列的值是不是在set里面 列名 IS NULL;不为空 语句 AND 语句;与 语句 OR 语句;或 NOT 语句;非

模糊查询

sql
SELECT 字段 FROMWHERE 某字段 Like 条件
  1. % :表示任意 0 个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。
  2. _ : 表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字 符长度语句。

eg

sql
LIKE '_____'; 表示该字符串长度为5(我这里打了五个连续的下划线)
sql
like 'z%'; 表示该字符串以z开头
like '%z' 表示该字符串以z结尾
like '%z%' 表示该字段中含有z (%表示0个及以上)
sql
LIKE '_i%'; 表示字符第二个字母为i

字段控制查询

sql
select distinct 列名 from ....

使用distinct关键字表示该列若有重复则只记录第一条数据

sql
SELECT *,sal+comm FROM emp;

我们可以在全部的列外自己自定义想要的列(多的列名就叫sal+comm)

sql
SELECT *, sal+IFNULL(comm,0) AS total FROM emp   使用as
SELECT *, sal+IFNULL(comm,0) total FROM emp;     as可以省略

通过as关键字我们可以让列变成我们想要的名字(下划线转驼峰,与java对应)

排序

sql
SELECT * FROM emp ORDER BY sal DESC ,empno ASC;

没啥说的 就是排序 ,如果order by后跟多个数据 表示优先级 desc降序 asc升序

聚合函数

用来对表数据进行纵向统计(针对某一字段整体)的函数

sql
select count(*) from stu  查修stu的总行数 包含所有列 而由于一个列存在就必须至少有一个字段不为空,因此用于计算总行数

select count(1) from stu  与select(*)没区别

select count(sex) from stu 对sex列进行计数 仅sex上的值不为null时才会计算

COUNT():统计指定列不为 NULL 的记录行数;

sql
select max(sal),min(sal),sum(sal),avg(sal) from emp 记录某一字段的最大/最小/总和/平均

MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;

MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;

SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为 0;

AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为 0;

分组查询

分组查询需要搭配聚合函数一同使用,表示针对某一字段,把所有该字段相同的行全部划分为一组,然后对这组数据使用聚合函数进行统计

sql
SELECT deptno, SUM(salary) FROM emp GROUP BY deptno; 使用 group byselect 后只能跟随聚合函数或者group by后出现的字段

having子句

sql
SELECT deptno, SUM(sal)
FROM emp
where sal>1500
GROUP BY deptno
HAVING SUM(sal) > 9000

having关键字用于在分组后对结果进行再一次筛选,与where不同的是where是在分组前完成了筛选

LIMIT限定行数查询

limit 关键字用于对查询的结果取出一部分

sql
SELECT * FROM emp LIMIT 0, 5  将查询结果取出前五行

注意,这里的两个参数

0表示从第几行开始取 与数组类似 0表示第一行

5表示从该行开始往后取5条数据(包含第0行自己)

多表连接

join 连接表名 on 连接条件

inner join 内连接

sql
-- 隐式连接    不推荐
SELECT staff.name, deptname 
FROM staff, deptno 
WHERE staff.name = deptno.name;

-- INNER JOIN  推荐
SELECT staff.name, deptname 
FROM staff 
INNER JOIN deptno ON staff.name = deptno.name;

内连接表示两个表求交集 即只有两张表均符合on的条件才可以被查出

left join 左连接 right join 右连接

sql
select staff.name,deptname
from staff 
left join deptno 
on staff.name=deptno.name;

select staff.name,deptname
from staff 
right join deptno 
on staff.name=deptno.name;

左连接LEFT JOIN)的指的是连接中第一个出现的表。,的这张表的所有数据会全部被查出来,然后再拼接上右表中符合on条件的数据,如果没有符合的条件,则使用null来填充

同理

右连接RIGHT JOIN)的指的是连接中的第二个表。在 RIGHT JOIN 中,这个“右表”的所有行都会出现在结果中

本站访客数 人次      本站总访问量