数据库--SQL
Web:全球广域网(万维网:www),能够通过浏览器访问的网站;
JavaWeb:用Java技术来解决相关web互联网领域的技术栈
网页(展现数据)→JavaWeb程序(逻辑处理)→数据库(存储和管理数据)
数据库(存储和管理数据)→JavaWeb程序(逻辑处理)→网页(展现数据)
关系型数据库:建立在关系模型基础上的数据库,是由多张能互相连接的二维表组成的数据库。数据存储在磁盘中,安全。
常见的关系型数据库:Oracle、MySQL、Microsoft SQL Server(C#,.net等语言常用)、PostgreSQL、DB2、SQLite(嵌入式微型数据库)、MariaDB。
SQL通用语法:
1.SQL语句可单行或多行书写,以分号结尾;
2.MySQL数据库的SQL语句不区分大小写,关键字建议使用大写
3.注释
#/--:(--和注释内容中间有空格:-- 注释)单行注释
/*注释*/:多行注释
SQL分类:
DDL:操作数据库、表等
DML:对表中数据进行增删改
DQL:对表中的数据进行查询
DCL:对数据库进行权限控制
①DDL
1.操作数据库
查询:
SHOW DATABASES;
创建数据库:
create database 数据库名;
先判断是否存在,不存在则创建:
create database if not exists 数据库名;
删除数据库:
drop database 数据库名;
先判断是否存在,存在则删除:
drop database if exists 数据库名;
查看当前使用的数据库:
SELECT DATABASE();
使用数据库:
USE 数据库名;
2.操作表
- 创建(Create):
create table 表名(字段名 数据类型1,字段名 数据类型1,字段名 数据类型1);
- 查询(Retrieve):
查询当前数据库下所有表名称:
show tables;
查询表结构:
DESC 表名;
- 修改(Update)
修改表名:
alter table 表名 rename to 新表名;
添加一列:
alter table 表名 add 列名 数据类型;
修改数据类型:
alter table 表名 modify 列名 新数据类型;
修改列名和数据类型:
alter table 表名 change 列名 新列名 新数据类型;
删除列:
alter table 表名 drop 列名;
- 删除(Delete)
删除表:
DROP TABLE 表名;
删除表时判断表是否存在:
DROP TABLE IF EXISTS 表名;
②DML
1、增:
给指定列添加数据:
insert into 表名(列名1,列名2) values(值,值2);
给所有列添加数据:
insert into 表名 values(值1,值2);
批量添加数据:
insert into 表名(列名1,列名2) values(值1,值2),(值1,值2),(值1,值2); insert into 表名 values(值1,值2),(值1,值2),(值1,值2);
2、删:
delete from 表名 [where 条件];
*删除语句中如果不加条件,则所有数据都删除!
3、修改数据
update 表名 set 列名1=值1,列名2=值2,[where 条件];
*修改语句中如果不加条件,则所有数据都修改!
③DQL
查询:
select 字段列表 from 表名列表 where 条件列表 group by 分组字段 having 分组后条件 order by 排序字段 limit 分页限定
1、基础查询
查询多个字段
select 字段列表 from 表名; select * from 表名;#查询所有数据,不要使用!
去除重复记录
select distinct 字段列表 from 表名;
起别名
AS:-- AS也可以省略
2、条件查询【where】
条件查询语法
select 字段列表 from 表名 where 条件列表;
条件
> < >= <= = <>或!=:不等于 between...and...:在某个范围之内(都包含) in(...):多选... like 占位符:模糊查询 _单个任意字符 %多个任意字符 is null:是null is not null:不是null and或&&:并且 or或||:或者 not或!:非,不是
3、排序查询【order by】
select 字段列表 from 表名 order by 排序字段名1 [排序方式1],排序字段名1 [排序方式1].....; ASC:升序排列(默认值) DESC:降序排列 *如果有多个排序条件,当前边的条件值一样时,才会根据第二条件进行排序
4、分组查询【group by】
聚合函数:将一列数据作为一个整体,进行纵向计算。
函数名 | 功能 |
count(列名) | 统计数量(一般选用不为null的列) |
max(列名) | 最大值 |
min(列名) | 最小值 |
sum(列名) | 求和 |
avg(列名) | 平均值 |
select 聚合函数名(列名) from 表; -- null值不参与所有聚合函数运算
分组查询语法:
select 字段列表 from 表名 [where 分组前条件限定] group by 分组字段名 [having 分组后条件过滤]; -- 分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义 /*where和having区别: 执行时机不一样:where是分组之前进行限定,不满足where条件,则不参与分组,而having是分组之后对结果进行过滤。 可判断的条件不一样:where不能对聚合函数进行判断,having可以 执行顺序:where>聚合函数>having */
5、分页查询【limit】
select 字段列表 from 表名 limit 起始索引,查询条目数; *起始索引:从0开始 -- 计算公式:起始索引=(当前页码-1)*每页显示的条数 /* tips: 分页查询limit是mysql数据库独有的 Oracle分页查询使用rownumber SQL Server分页查询使用top */
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具