文章目录
本文涉及sql语句的基础操作,可用于在操作命令行或者Navivat等软件操作MySQL数据库。
一 、MySQL简介
1.1整体介绍
- javaweb是连接前端和后端的技术栈
1.2 相关概念
- mysql 是数据库管理系统
- 常见的关系型数据库数据库:Oracle(金融)、Mysql(开源)、SQL(C#、.net)、SQLite(嵌入式微小,如安卓内置数据库)、mariaDB(开源中小型)
1.3 MySQL数据库安装
- 一般使用5.7以上的MySQL社区版本
1.4 数据模型
- 关系型:多张表相互连接的二维表,使用通用sql语言操作,用于复杂查询。
- 数据在磁盘中,安全。格式一致,易于维护。
- mysql中的数据库就是data文件夹中的文件。 使用sql操作数据库,从而操作数据库-数据表-数据。
1.5 SQL语言
Structured Query Language 结构化结构语言
通用语法:可以单行或多行,以分号结尾;不区分大小写,关键字建议以大写 。
注释:(空格)-- 或者# 单行注释,/* */ 多行注释
- DDL:操作数据库、表
- DML:对数据增删改查
- DQL:对数据查询
- DCL:对数据库权限控制
二、 DDL & DML
2.1 DDL:
show database; #显示视图(自己的库)
create db1 if not exist db1; #创建不存在的数据库
drop datebase db2 if exist db2; #**删除**
use db; #进入到某一个数据库
2.2 查询表
show tables; 显示所有的表
desc tables1;查询表结构
2.3 创建表
create table1 tb_user(
id int,
username varchar(20),
password varchar(32) # 可以创建多行,但最后一行不加逗号
);
desc table1;
2.4 操作表
数据类型
删除表:
drop table tb_user;
drop table tb_user if not exist tb_user;
修改表:
alter table student rename to stu; 修改student表名字为stu
alter table stu add address varchar(5); 添加一列address
alter table stu modify address varchar(50); 修改数据类型
alter table stu change address addr varchar(30); 修改列的名称跟数据类型
alter table stu drop addr; 删除列
2.5 Navicat的使用
数据库管理、开发使用的图形化软件
新建:连接MySQL的数据库,连接的主机,端口号,用户名,密码
修改表:右键设计表
新建查询:就可以用SQL语句查询
2.6 DML (对表增删改)
添加数据:
insert into stu(id,name) values(1,“张三”);#添加两列
insert into stu (id,name,sex,brithday) values(2,“李四“,‘男’,‘1999-11-11’)#给所有列增加数据
insert into stu values ... ; # 可省略列名
修改数据:
update stu set sex=‘女’,score=99 where name = ‘张三’; #更新某一条件,如果没有加where,则修改所有的数据!
删除数据:
delete from stu where name=‘张三’; #删除某一条件,不加where,则删除整个表
三、 DQL(查询操作 - 开发最多用到)
单表查询,功能:分页查询、升序排列、关键字查询
3.1 基础查询:
select * from stu;# 全部查询,不要使用 星号 在开发的时候不好加注释
select name,age from stu;#只查询两列
select address from stu;#重复查询
select DISTINCT address from stu;#不重复查询
select name,math as 数学成绩,englist 英语成绩 from stu;# 用as起别名,也可以省略(要空格隔开)
3.2 条件查询:
select * from stu where age >20 and age < 30; #可以用&&
select from stu where age between 20 and 30; # 在某个区间
select from stu where date between ‘1998’ and ‘1999’;
select from stu where age != 20;#用<>也可以 , 相等用 =
select from stu where age in (18,20,22);#相当于or
select from stu englist is not null; # null 不能用=,要用is ,is not
3.3 模糊查询:
select * from stu where name like ‘_化%’; #_ 匹配单个字符,% 匹配零个、一个或多个字符
select * from stu where 题干 like "%关键字%";
3.4 排序查询:
select * from stu order by age desc,id asc; # 默认是asc升序查询
3.5 聚合函数:
select func(name) from table;#null值不参与聚合函数运算
count(*) # 统计所有数据行数
3.6 分组查询:
select sex,avg(math)from stu group by sex;#查询**不分组**和**非聚合函数**字段,无意义
select sex,avg(math),count(*) from stu where math>70 group by sex ;# where **分组之前**做筛选
select sex,avg(math),count(*) from stu where math>70 group by sex having count(*)>2;#having **分组之后** 做筛选
/*
where 和 group by区别:
执行顺序:where》聚合函数》having
筛选:where 分组前,having分组后
*/
3.7 分页查询:
不分页内存吃不消,用户体验也不好
select * from stu limit 0,3;#从0开始,查询3条数据
select * from stu limit 0,3;#每页查询3条数据,查询第一页
select * from stu limit 3,3;#每页查询3条数据,查询第二页
select * from stu limit 6,3;#每页查询3条数据,查询第三页
# 起始索引= (当前页码-1)* 每页展现页数