一、基本概念
——后续的内容将会记录作者在计科学习内容
- DB(数据库):存储数据的仓库,数据是有组织进行存储
- DBMS(数据库管理系统):操纵和管理数据库的大型软件
- SQL:操纵关系数据库的编程语言,是一套标准
- 有Mysql,Oracle,SQLSever,PostgreSQl
RDBMS(关系型数据库):建立在关系模型基础上,有多张相互连接的二维表组成的数据库
特点:
- 使用表存储数据,格式统一,便于维护
- 使用sql语句操作,标准统一,使用方便
SQL的通用语法:
- SQL语句可以单行或者多行书写,以分号结尾
- SQL语句可以使用空格/缩进来增强语句的可读性
- Mysql数据库的SQL语句部分区分大小写,关键词建议使用大些
- 注释:单行注释–注释内容或# ;多行注释/* */
SQL的分类:
- DDL:数据定义语言,定义数据对象(数据库,表字段)
- DML:数据操作语言,对数据库表中的数据进行增删改
- DQL:数据查询语句,查询数据库中表的记录
- DCL:数据控制语言,用来创建数据用户,控制DB的访问权限
二、操作 DDL操作:(所用软件DataGrip)
- 查询:
- 查询所有数据库:
Show databases;
- 查询当前数据库:
Select database ();
- 创建:
Creat database [if not exists]数据库名 [default charset 字符集] [collate排序规则];
- 查询所有数据库:
- 删除:
drop database[if exists]数据库名;
- 使用:
use 数据名;
- 删除:
- DDL表操作——查询
- 查询当前数据库所有的表:
Show tables;
- 查询表结构:
desc 表名;
- 查询指定表的建表语句:
Show create table 表名;
DDL——表操作——创建:
Create table 表名( 字段1 字段1类型[comment 字段1注释], 字段2 字段2类型[comment 字段2注释])[comment 字段注释];
字符串类型:
- char(10):性能好
- varchar(10):性能较差
- 例如:用户名 user name varchar(50)
- 例如:性别 gender char (1)
- 查询当前数据库所有的表:
- DDL——表操作——修改
- 添加字段:
Alter table 表名 add 字段名 类型(长度)[comment注释][约束]
- 修改数据类型:
Alter table 表名 modify 字段名 新数据类型(类型)
- 修改字段名和字段类型:
Alter table 表名 change 旧字段名 新字段名 类型(长度)[comment注释][约束]
- 删除字段:
Alter table 表名 drop 字段名;
- 修改表名:
Alter table 表名 rename to 新表名;
- 添加字段:
- DDL表操作——删除
- 删除表:
drop table [if exsits]表名;
- 删除指定表,并重新创建该表:
truncate table 表名;
- 删除表:
DML:用来对数据库中表的数据记录进行增删改操作
- 给指定字段添加数据:
Insert into 表名 (字段名1,字段名2...)Values(值1,值2...);
- 给全部字段添加数据:
Insert into 表名 values(值1,值2...);
- 批量添加数据:
Insert into 表名(字段名1,字段名2)values(值1,值2...),(值1,值2...);Insert into 表名 values(值1,值2...),(值1,值2...);
- 注意:插入数据时,指定的字段顺序需要与值的顺序是一一对应的。
- 字符串和日期数据应该包含在引号内
- 插入的数据大小,应该在字段的规定范围
DML:修改数据
update 表名 set 字段名1=值1,字段名2=值2,...[where条件];
删除数据:
delete from 表名[where 条件];
DQL:用来查询库中表的记录
- select字段列表
- from表名列表
- where条件列表
- group by分组字段列表
- having分组后条件列表
- order by排序字段列表
- limit分页参数
- 查询多个字段
select 字段1,字段2...from 表名;select *from 表名;
- 设置别名
select 字段1 [As 别名1],字段1 [As 别名1]...from 表名;
- 去除重复记录
select distinct 字段列表 from 表名;
> >= < <==或!=between...and在某个范围之内(含最小值,最大值)in(...)在in之后的列表中的值,多选一Like 占位符,模糊匹配(匹配单个字符,%匹配任意字符): select * from 表名where name Like '%666'is Null是Nulland或&&OR或||NOT或!
聚合函数:将一列数据作为一个整体,进行纵向计算
- 常见的聚合函数
- count统计数量
- max最大值
- min最小值
- avg平均值
- sum求和
select 聚合函数(字段列表) from 表名;select count(*) from employee;
分组查询
- 语法:
select 字段列表 from 表名 [where条件] group by 分组字段名[having 分组后过滤条件];
where与having区别
- 执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组,而having 是分组后对结果进行过滤。
- 判断条件不同:where不能对聚合函数进行判断,having可以
1例如,根据性别分组,统计男性员工和女性员工的数量select gender count(*) from employment group by gender;
2例如,根据性别分组,统计男性员工和女性员工的平均年龄select gender avg(age) from employee group by gender
3例如,年龄小于45的员工,并根据工作地址分组,获取员工数大于等于3的工作地址select count(*) from employee where age<45 group by workdress having count(*)>=3
注意:
- 执行顺序:where>聚合函数>having
- 分组之后,查询的字段一般为聚合函数和分组字段
- 查询其他字段无任何意义
DQL-排序查询
- 语法:
select 字段列表 from 表名 order by 字段1 排序方式1,字段2,排序方式2;
- 排序方式:
- ASC:升序(默认值)
- DESC:降序
- 注意:如果是在多字段排序,当第一个字段值相同时,才会根据第二个字段进行排 例如:select * from employee order by age asc;
- 语法:
select 字段列表 from 表名 limit 启始索引,查询记录数;
- 注意:
- 启始索引从0开始,启始索引=(查询页码-1)*每页显示记录数
- 分页查询是数据库的方言,不同的数据库有不同的实现,如果查询的第一页数据,其实索引可以省略,直接简写limit 10
DQL——分页查询
- 语法: