数据库相关知识

  • SQL(Structured Query Language): 关系型数据库通用编程语言。

  • 登录MySQL: mysql -uroot -p

  • MySQL登录参数: mysql -u(用户名) -p(密码) -h(要连接的mysql服务器的ip地址-默认为127.0.0.1) -P(端口号-默认3306)

  • 退出MySQL: exit 或者 quit 或者 \q

  • 查询MySQL的版本号select version();

  • 查看MySQL数据库的安装目录: select @@basedir as basePath from dual;

  • 查询当前数据库文件: show databases;

  • 单行注释: -- 注释内容#注释内容(MySQL独有)

  • 多行注释: /* 注释内容 */

  • char 和 varchar

    char(定长字符串) 存储性能高 浪费空间 确定字符串时候用
    varchar(变长字符串) 存储性能低 节约空间 不确定字符串长度时用
  • 创建表: (最后一行不能有逗号)

    c 复制代码
    create table 表名 (字段名1 数据类型1,
    				   字段名2 数据类型2,
    				   ... 
    				   字段名n 数据类型n);

DDL(Data Definition Language)数据定义语言:

操作数据库、表等。

  • 查询数据库: show databases;
  • 新建数据库: create database 数据库名称;
  • 新建数据库前判断: create database if not exists 数据库名称;
  • 删除数据库: drop database 数据库名称;
  • 删除数据库前判断: drop database if exists 数据库名称
  • 使用数据库: use 数据库名称;
  • 查看当前使用的数据库: select database();
  • 删除表: drop table 表名;
  • 删除表前判断: drop table if exists 表名;
  • 修改表名: alter table 表名 rename to 新的表名;
  • 添加一列: alter table 表名 add 列名 数据类型;
  • 修改数据类型: alter table 表名 modify 列名 新数据类型;
  • 修改列名和数据类型: alter table 表名 change 列名 新列名 新数据类型;
  • 删除列: alter table 表名 drop 列名;

DML(Data Manipulation Language)数据操纵语言:

对表中的数据进行增删改。

  • 给指定的列添加数据: 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,...)...;
  • 修改数据: update 表名 set 列名1=值1,列名2=值2,...[where 条件]; (注意:如果update语句没有加where条件,则会将表中所有数据进行修改!)
  • 删除数据: delete form 表名 [where 条件]

DQL(Data Query Language)数据查询语言:

对表中数据进行查询。

  • 查询表格: show tables;
  • 查询表的结构信息: desc 表的名称;
  • 查询表的内容: select 字段列表 from 表名列表 where 条件列表 group by 分组字段 having 分组后条件 order by 排序字段 limit 分页限定

一、基础查询:

  • 查询多个字段:
    select 字段列表 from 表名;
    select * from 表名;--查询所有数据(不建议使用)
  • 查询去除重复值的记录: select distinct 字段列表 from 表名;
  • 起别名: as: as也可省略

二、条件查询:

  • select 字段列表 from 表名 where 条件列表; (举例:select * from stu where age >= 20 and age<=30;)
  • null 值的比较不能用 = null!=null ,需要使用 is nullis not null

三、模糊查询(like)

  • 通配符: _ 匹配单个字符,% 匹配多个字符。

排序查询(order by):

  • select 字段列表 from 表名 oder by 排序字段名1 [排序方式1], 排序字段名2 [排序方式2]...;
  • ASC:升序排列(默认),
  • DESC:降序排序。

四、聚合函数

  • 聚合函数分类: (null值不参与聚合函数的运算)
    count 统计数量:select count(id) from stu; (count 统计的列名不能为null)
    max 最大值:SELECT max(math) FROM stu;
    min 最小值
    sum 求和
    avg 平均值
  • 聚合函数语法: select 聚合函数名(列名) from 表名;

五、分组查询(group by)

  • 分组查询语法: select 字段列表 from 表名 [where 分组前条件限定] group by 分组字段名 [having 分组后条件过滤]
    查询男生/女生的数学平均分:SELECT sex, avg(math) from stu GROUP BY sex;
    查询男生/女生的数学平均分以及各自人数:SELECT sex, AVG(math), count(*) from stu GROUP BY sex;
    查询男生/女生的数学平均分以及各自人数(分数低于70的不参与分组):
    SELECT sex,AVG(math),COUNT(*) FROM stu where math>70 GROUP BY sex;
    查询男生/女生的数学平均分以及各自人数(分数低于70的不参与分组,且分组之后人数要大于2):
    SELECT sex,AVG(math),COUNT(*) FROM stu where math>70 GROUP BY sex HAVING count(*)>2;
    where 和 having 的区别:
    • 执行时机不一样: where是分组前的限定,不满足where条件的不参与分组。having是对分组后的结果进行筛选。
    • 可判断的条件不同: where 不能对聚合函数进行判断,having可以。
    • 执行顺序: where > 聚合函数 > having。

六、分页查询(limit)

  • 分页查询语法: select 字段列表 from 表名 limit 起始索引,查询条目数;
    每页显示三条数据,查询第一页数据(从0开始查询,查询3条数据):SELECT * from stu limit 0,3;

DCL(Data Control Language)数据控制语言:

对数据库进行权限控制。

TCL(Transaction Control Language)事务控制语言:

约束

约束类型:

约束名 描述 关键字
非空约束 保证列中所有数据不能null值。 NOT NULL
唯一约束 要求该列唯一,允许为空,但只能出现一个空值。 UNIQUE
主键约束 主键是一行数据的唯一标识,要求非空且唯一。 PRIMARY KEY
检查约束 某列取值范围限制、格式限制等。 CHECK
默认约束 某列的默认值。 DEFAULT
外键约束 用于在两表之间建立关系,需要指定引用主表的哪一列。 FOREIGN KEY
  • 案例:

    sql 复制代码
    DROP TABLE IF EXISTS emp;
    -- 员工表
    CREATE TABLE emp(
    	id INT PRIMARY KEY auto_increament, -- 员工ID,主键且自增长
    	ename VARCHAR(50) Not NULL UNIQUE, -- 员工姓名,非空并且唯一
    	joindate DATE NOT NULL, -- 入职日期,非空
    	salary DOUBLE(7,2) NOT NULL, -- 工资,非空
    	bonus DOUBLE(7,2) DEFAULT 0 -- 奖金,如果没有奖金默认为0
    );
  • 外键约束:

    sql 复制代码
    	-- 创建表时添加外键约束
    	CREATE TABLE 表名(
    		 列名 数据类型,
    		 ...
    		 [CONSTRAINT] [外键名称] FOREIGN KEY(外键列名) REFERENCES 主表(主表列名) 
    	); 
    sql 复制代码
    	-- 建完表后添加外键约束
    	ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);
    sql 复制代码
    	-- 删除约束
    	ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

多表查询

  • 连接查询
    • 内连接查询 :相当于查询AB交集数据

      sql 复制代码
      	-- 隐式内连接
      	SELECT 字段列表 FROM 表1,表2... WHERE 条件;
      	-- 显示内连接
      	SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 条件;
    • 外连接查询

      • 左外连接查询 :相当于查询A表所有数据和交集部门数据
      • 右外连接查询 : 相当于查询B表所有数据和交集部分数据
  • 子查询:查询中嵌套查询,称嵌套查询为子查询。
相关推荐
float_六七29 分钟前
SQL六大核心类别全解析
数据库·sql·oracle
Code季风2 小时前
将 gRPC 服务注册到 Consul:从配置到服务发现的完整实践(上)
数据库·微服务·go·json·服务发现·consul
Boilermaker19922 小时前
【Java EE】SpringIoC
前端·数据库·spring
霸王龙的小胳膊2 小时前
泛微虚拟视图-数据虚拟化集成
数据库
灵犀学长3 小时前
解锁Spring Boot多项目共享Redis:优雅Key命名结构指南
数据库·redis
轩情吖3 小时前
Qt的信号与槽(二)
数据库·c++·qt·信号·connect·信号槽·
ZeroNews内网穿透3 小时前
服装零售企业跨区域运营难题破解方案
java·大数据·运维·服务器·数据库·tcp/ip·零售
可观测性用观测云3 小时前
达梦数据库监控观测最佳实践
数据库
时序数据说3 小时前
IoTDB:专为物联网场景设计的高性能时序数据库
大数据·数据库·物联网·开源·时序数据库·iotdb
码农小站5 小时前
ClickHouse 时间范围查询:精准筛选「本月数据」
数据库