数据库应用+SQL优化+Git

article/2025/7/18 3:23:09

数据库应用

  • 1.1 概念
    • 1.1.1 什么是数据库
    • 1.1.2 关系型和非关系型
    • 1.1.3 关系型数据库
  • 1.2 Mysql数据库
    • 1.2.1 MySQL数据存放在哪里?
    • 1.2.2 MySQL服务端
    • 1.2.3 MySQL客户端1:DOS窗口
    • 1.2.4 MySQL客户端2:可视化工具
  • 1.3 数据库的结构
    • 1.3.1 数据库结构
  • 1.4 SQL语句
    • 1.4.1 定义
    • 1.4.2 分类
  • 1.5 数据库常用操作
    • 1.5.1 建库
    • 1.5.2 删库
    • 1.5.3 查看所有数据库
  • 1.6 表的常用操作
    • 1.6.1 表设计
    • 1.6.2 创建表
    • 1.6.3 修改表
    • 1.6.4 删除表
    • 1.6.5 查看所有表
    • 1.6.6 查看表结构/设计表
  • 1.7 表记录的常用操作
    • 1.7.1 插入记录
    • 1.7.2 查询记录
    • 1.7.3 修改记录
    • 1.7.4 删除记录
    • 1.7.5 排序
    • 1.7.6 记录总数
  • 1.8 数据类型
    • 1.8.1 命名规则
    • 1.8.2 字符
    • 1.8.3 数字
    • 1.8.4 日期
    • 1.8.5 图片
  • 1.9 字段约束
    • 1.9.1 主键约束
    • 1.9.2 非空约束
    • 1.9.3 唯一约束
  • 1.10 准备数据
    • 1.10.1 部门表 dept
    • 1.10.2 员工表 emp
  • 1.11 基础函数
    • 1.11.1 lower
    • 1.11.2 upper
    • 1.11.3 length
    • 1.11.4 substr
    • 1.11.5 concat
    • 1.11.6 replace
    • 1.11.7 ifnull
    • 1.11.8 round & ceil & floor
    • 1.11.9 uuid
    • 1.11.10 now
    • 1.11.11 year & month & day
    • 1.11.12 转义字符
  • 1.12 条件查询
    • 1.12.1 distinct
    • 1.12.2 where
    • 1.12.3 like
    • 1.12.4 null
    • 1.12.5 between and
    • 1.12.6 limit
    • 1.12.7 order by
  • 1.13 统计案例
    • 1.13.1 入职统计
    • 1.13.2 年薪统计
    • 1.14 聚合 aggregation
    • 1.14.1 count
    • 1.14.2 max / min
    • 1.14.3 sum / avg
  • 1.15 分组 group
    • 1.15.1 group by
    • 1.15.2 having
  • 1.16 小结
    • 1.16.1 char和varchar有什么区别?
    • 1.16.2 datetime和timestamp有什么区别?
    • 1.16.3 中文乱码
    • 1.16.4 注释
    • 1.16.5 主键、外键、唯一索引的区别?
    • 1.16.6 drop、delete和truncate之间的区别?
  • 1.17 事务 transaction
    • 1.1.1 什么是事务
    • 1.17.1 事务4个特性ACID
    • 1.17.2 隔离级别
    • 1.17.3 查询mysql的隔离级别
    • 1.17.4 事务处理
    • 1.17.5 提交 commit
    • 1.17.6 回滚 rollback
  • 1.18 表关联 association
    • 1.18.1 概念
  • 1.19 考试系统mysql版
    • 1.19.1 表设计
    • 1.19.2 创建数据库
    • 1.19.3 创建表
    • 1.19.4 生成建表SQL
    • 1.19.5 插入测试数据
  • 1.20 表强化:6约束 constraints
    • 1.20.1 非空约束 not null
    • 1.20.2 唯一约束 unique
    • 1.20.3 主键约束 primary key
    • 1.20.4 外键约束 forgrein key
    • 1.20.5 默认约束 default
    • 1.20.6 检查约束 check
  • 1.21 多表联查 join
    • 1.21.1 笛卡尔积 Cartesian product
    • 1.21.2 三种连接 join
    • 1.21.3 案例:列出research部门下的所有员工的信息
    • 1.21.4 案例:怎么用内链接 INNER JOIN 实现上面的需求?
    • 1.21.5 案例:列出tony的扩展信息
    • 1.21.6 inner join、left join、right join的区别?
  • 1.22 索引 index
    • 1.22.1 定义
    • 1.22.2 分类
    • 1.22.3 创建索引
    • 1.22.4 索引扫描类型
    • 1.22.6 为何索引快?
    • 1.22.7 小结
  • 1.23 SQL面试题
    • 1.23.1 查询所有记录
    • 1.23.2 只查询指定列
    • 1.23.3 查询id为100的记录
    • 1.23.4 模糊查询记录
    • 1.23.5 查询之间范围之间的所有记录
    • 1.23.6 查询满足两个条件的记录
    • 1.23.7 查询用户住址
    • 1.23.8 查询19岁人的名字
    • 1.23.9 按age升序查询记录
    • 1.23.10 以name升序、age降序查询记录
    • 1.23.11 查询总人数
    • 1.23.12 查询各个城市的人数
    • 1.23.13 查询至少有2人的地址
    • 1.23.14 查询记录中最年长和最年轻
    • 1.23.15 查询大于平均年龄的记录
    • 1.23.16 查询年龄最大的用户信息
    • 1.23.17 查询各部门的最高薪
    • 1.23.18 查询各科的平均工资
    • 1.23.19 查询id是100或200的记录
    • 1.23.20 查询存在部门的员工信息
    • 1.23.21 查询没划分部门的员工信息
    • 1.23.22 查询同名的员工记录
    • 1.23.23 全部学生按出生年月排行
    • 1.23.24 每个班上最小年龄的学员
    • 1.23.25 查询学生的姓名和年龄
    • 1.23.26 查询男教师及其所上的课程
    • 1.23.27 查询每个老师教的课程
    • 1.23.28 查询女老师的信息
    • 1.23.29 查询得分前3名的学员信息
    • 1.23.30 查询课程是“计算机导论”的,得分前3名的学员信息
    • 1.23.31 课程号“3-105”的倒数最后3名学员排行
  • 1.24 SQL的执行顺序
    • 1.24.1 SQL语句
  • 1.25 考试系统oracle版
    • 1.25.1 PD创建Oracle模型
    • 1.25.2 表设计
  • 1.26 Oracle数据库
    • 1.26.1 安装
    • 1.26.2 Oracle10g EX
    • 1.26.3 配置本地服务
    • 1.26.4 链接错误
  • 1.27 创建数据库
    • 1.27.1 注意事项
    • 1.27.2 密码安全
    • 1.27.3 创建用户
  • 1.28 PL/SQL客户端操作
    • 1.28.1 常见错误
    • 1.28.2 选择自己的内容
    • 1.28.3 常用对象
    • 1.28.4 SQL窗口
  • 1.29 准备数据
  • 1.30 SQL差异
    • 1.30.1 概念
    • 1.30.2 日期
    • 1.30.3 性别
    • 1.30.4 decode()
    • 1.30.5 casewhen
    • 1.30.6 第一条
  • 1.31 独特技术
    • 1.31.1 过气技术
    • 1.31.2 虚表 dual
    • 1.31.3 序列 sequence
    • 1.31.4 授权视图
    • 1.31.5 视图 view
    • 1.31.6 触发器 trigger
    • 1.31.7 存储过程 procedure
  • 1.32 分页
    • 1.32.1 rownum伪列
    • 1.32.2 分页SQL
  • 1.33 存储过程实现分页
    • 1.33.1 创建包同时创建游标
    • 1.33.2 创建分页存储过程
    • 1.33.3 测试
    • 1.33.4 预习TestJDBC.java
  • 1.34 JDBC
    • 1.34.1 概念
    • 1.34.2 idea 创建项目导驱动包
    • 1.34.3 Statement 语句
    • 1.34.4 PreparedStatement 语句
  • 1.35 Git版本控制
    • 1.35.1 开发难题
    • 1.35.2 主流的版本控制产品
    • 1.35.3 介绍
    • 1.35.4 组成结构图
    • 1.35.5 命令速查
    • 1.35.6 常用命令
  • 1.36 码云配置环境
    • 1.36.1 注册账号
    • 1.36.2 登录
    • 1.36.3 安装GIT
    • 1.36.4 设置字体
    • 1.36.5 查询git
  • 1.36.6 配置身份信息
    • 1.36.7 查看配置信息
  • 1.37 码云创建仓库
    • 1.37.1 创建远程仓库
    • 1.37.2 创建本地仓库
  • 1.38 每日任务
    • 1.38.1 新文件
    • 1.38.2 推送
    • 1.38.3 拉取
  • 1.39 常见错误
    • 1.39.1 Authentication failed for
    • 1.39.2 To the same ref
  • 1.40 SQL表准备
    • 1.40.1 mysql-db库
    • 1.40.2 student表
    • 1.40.3 tb_dept表
    • 1.40.4 tb_user表
  • 1.41 基础SQL优化
    • 1.41.1 查询SQL尽量不要使用select *,而是具体字段
    • 1.41.2 避免在where子句中使用or来连接条件
    • 1.41.3 使用varchar代替char
    • 1.41.4 尽量使用数值替代字符串类型
    • 1.41.5 查询尽量避免返回大量数据
    • 1.41.6 使用explain分析你SQL执行计划
    • 1.41.7 是否使用了索引及其扫描类型
    • 1.41.8 创建name字段的索引
    • 1.41.9 优化like语句
    • 1.41.10 字符串怪现象
    • 1.41.11 索引不宜太多,一般5个以内
    • 1.41.12 索引不适合建在有大量重复数据的字段上
    • 1.41.13 where限定查询的数据
    • 1.41.14 避免在索引列上使用内置函数
    • 1.41.16 避免在where子句中使用!=或<>操作符
    • 1.41.17 去重distinct过滤字段要少
    • 1.41.18 where中使用默认值代替null
  • 1.42 高级SQL优化
    • 1.42.1 批量插入性能提升
    • 1.42.2 批量删除优化
    • 1.42.3 伪删除设计
    • 1.42.4 提高group by语句的效率
    • 1.42.5 复合索引最左特性
    • 1.42.6 排序字段创建索引
    • 1.42.7 删除冗余和重复的索引
    • 1.42.8 不要有超过5个以上的表连接
    • 1.42.9 inner join 、left join、right join,优先使用inner join
    • 1.42.10 in子查询的优化

1.1 概念

1.1.1 什么是数据库

简而言之,就是存储数据,管理数据的仓库。
常见的数据库分为:

  • 关系型数据库, Oracle、MySQL、SQLServer、Access
  • 非关系型数据库, MongoDB、Redis、Solr、ElasticSearch、Hive、HBase

在这里插入图片描述

1.1.2 关系型和非关系型

早期发展的数据库建立在数据的紧密关系基础之上(如:父子关系、师生关系),我们称其为关系型数据库,也称为传统数据库;现今数据库建立在数据的松散关系基础之上(如:中国人和美国人、中国人和印度人、视频、音频),我们称其为非关系型数据库nosql(not only sql)。业界总在争论nosql能否干掉传统数据库,很多初学者也有这个困惑。以我来看,两者没有矛盾,它们各有特点,根据业务情况互补才是真谛。但总的来说原来关系型数据库一统天下的格局早被打破,领土不断被蚕食,规模一再的缩小,虽然无法全面被替代,但却早已风光不在,沦落到一偶之地,Oracle的衰落就是最好的证明,早期只要是全球大企业无一例外都是部署Oracle,但现在都在去Oracle化,阿里就已经全面排斥Oracle。

在这里插入图片描述
既然干不掉,很多传统项目的还是围绕关系型数据库的居多,所以我们先来学习关系型数据库,目前最流行的关系型数据库是MySQL。

1.1.3 关系型数据库

关系型数据库有特定的组织方式,其以行和列的形式存储数据,以便于用户理解。关系型数据库这一系列的行和列被称为表,一组表组成了数据库。用户通过查询来检索数据库中的数据,而查询是一个用于限定数据库中某些区域的执行代码。关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据集合。
在这里插入图片描述

1.2 Mysql数据库

1) mysql服务端,它来处理具体数据维护,保存磁盘

2) mysql客户端,CRUD新增,修改,删除,查询

1.2.1 MySQL数据存放在哪里?

在MySQL的配置文件my.ini中会进行默认配置
在这里插入图片描述

1.2.2 MySQL服务端

mysql-5.5.27-winx64.msi
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Mysql数据库默认的编码是latin1等价于iso-8859-1,修改为utf-8
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意:配置完,mysql开始执行,最后一步出错有时仍可以使用,使用SQLyog工具测试,如不行,再执行安装程序,选择remove,删除,然后重新安装。同时注意必须是管理员权限。

1.2.3 MySQL客户端1:DOS窗口

mysql -uroot -proot语法:mysql.exe执行文件代表参数-u 用户名,紧接着写的-p 密码,紧接着写的

1.2.4 MySQL客户端2:可视化工具

在这里插入图片描述

1.3 数据库的结构

1.3.1 数据库结构

在这里插入图片描述

1.4 SQL语句

1.4.1 定义

结构化查询语言(Structured Query Language)简称SQL(发音:/ˈes kjuː ˈel/ “S-Q-L”),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。

SQL 是1986年10 月由美国国家标准局(ANSI)通过的数据库语言美国标准,接着,国际标准化组织(ISO)颁布了SQL正式国际标准。

1.4.2 分类

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

如:insert,delete,update,select(插入、删除、修改、检索)简称CRUD操新增Create、查询Retrieve、修改Update、删除Delete

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

如:create table之类

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

如:grant、deny、revoke等,只有管理员才有相应的权限

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

注意:SQL不区分大小写

1.5 数据库常用操作

1.5.1 建库

  • 创建数据库,数据库名称:cbg2011
create database cbg2011 DEFAULT CHARACTER SET utf8;

1.5.2 删库

  • 删除名称是cbg2011的数据库
drop database cbg2011;

1.5.3 查看所有数据库

  • 查看所有数据库
show databases;

1.6 表的常用操作

使用数据库:use cbg2011;

1.6.1 表设计

门店表:tb_door
在这里插入图片描述
订单详情表:tb_order_detail
在这里插入图片描述

1.6.2 创建表

  • 创建tb_door表,有id,door_name,tel字段
create table tb_door(id int primary key auto_increment,door_name varchar(100),tel varchar(50));

1.6.3 修改表

  • 添加列
alter table tb_door add column see NUMERIC(7,2)

1.6.4 删除表

  • 删除名称是tb_door的表
drop table tb_door;

1.6.5 查看所有表

  • 查看所有表
show tables;

1.6.6 查看表结构/设计表

  • 查看tb_door表结构
desc tb_door;

1.7 表记录的常用操作

1.7.1 插入记录

  • 向tb_door表中插入2条记录
insert into tb_door values(null,’永和大王1店’,666);
insert into tb_door values(null,’ 永和大王2店’,888);

1.7.2 查询记录

  • 查询tb_door表中的所有记录
SELECT * FROM tb_door;

1.7.3 修改记录

修改tb_door表中id为1的记录

update tb_door set tel=555 where id=1;

1.7.4 删除记录

  • 删除tb_door表中id为2的数据
Delete from tb_door where id=2;

1.7.5 排序

  • 将tb_door表记录按照tel排序
Select * from tb_door order by tel desc;

1.7.6 记录总数

  • 查询tb_door表中的总记录数
Select count(*) from tb_door;

1.8 数据类型

1.8.1 命名规则

  • 字段名必须以字母开头,尽量不要使用拼音

  • 长度不能超过30个字符(不同数据库,不同版本会有不同)

  • 不能使用SQL的保留字,如where,order,group

  • 只能使用如下字符az、AZ、0~9、$ 等

  • Oracle习惯全大写:USER_NAME,mysql习惯全小写:user_name

  • 多个单词用下划线隔开,而非java语言的驼峰规则

1.8.2 字符

  • char长度固定,不足使用空格填充,最多容纳2000个字符,char(11)存储abc,占11位。查询速度极快但浪费空间

  • varchar变长字符串,最多容纳4000个字符,varchar(11)存储abc,只占3位。查询稍慢,但节省空间。Oracle为varchar2

  • 大文本: 大量文字(不推荐使用,尽量使用varchar替代)

以utf8编码计算的话,一个汉字在u8下占3个字节

注:不同数据库版本长度限制可能会有不同

1.8.3 数字

  • tinyint,int整数类型

  • float,double小数类型

  • numberic(5,2) decimal(5,2)—也可以表示小数,表示总共5位,其中可以有两位小数

  • decimal和numeric表示精确的整数数字

1.8.4 日期

  • date 包含年月日

  • time时分秒

  • datetime包含年月日和时分秒

  • timestamp时间戳,不是日期,而是从1970年1月1日到指定日期的毫秒数

1.8.5 图片

  • blob 二进制数据,可以存放图片、声音,容量4g。早期有这样的设计。但其缺点非常明显,数据库庞大,备份缓慢,这些内容去备份多份价值不大。同时数据库迁移时过大,迁移时间过久。所以目前主流都不会直接存储这样的数据,而只存储其访问路径,文件则存放在磁盘上。

1.9 字段约束

1.9.1 主键约束

主键约束:如果为一个列添加了主键约束,那么这个列就是主键,主键的特点是唯一且不能为空。通常情况下,每张表都会有主键。

添加主键约束,例如将id设置为主键:

主键自增策略:当主键为数值类型时,为了方便维护,可以设置主键自增策略(auto_increment),设置了主键自增策略后,数据库会在表中保存一个AUTO_INCREMENT变量值,初始值为1,当需要id值,不需要我们指定值,由数据库负责从AUTO_INCREMENT获取一个id值,作为主键值插入到表中。而且每次用完AUTO_INCREMENT值,都会自增1. AUTO_INCREMENT=1

create table abc(id int primary key auto_increment);insert into abc values(null);insert into abc values(null);insert into abc values(null);select * from abc;

在这里插入图片描述

1.9.2 非空约束

非空约束:如果为一个列添加了非空约束,那么这个列的值就不能为空,但可以重复。

添加非空约束,例如为password添加非空约束:

create table user(id int primary key auto_increment,password varchar(50) not null
);
show tables;
insert into user values(null,null);//不符合非空约束
insert into user values(null,'123');//OK

1.9.3 唯一约束

唯一约束:如果为一个列添加了唯一约束,那么这个列的值就必须是唯一的(即不能重复),但可以为空。

添加唯一约束,例如为username添加唯一约束及非空约束:

create table test(id int primary key auto_increment,username varchar(50) unique--唯一约束
);
show tables;
insert into test values(null,'lisi');
insert into test values(null,'lisi');--username的值要唯一,重复会报错的
select * from test;

1.10 准备数据

1.10.1 部门表 dept

字段名称数据类型是否为空备注
deptnoint部门编号,PK主键
ldnamevarchar(20)Y部门名称
locvarchar(13)Y部门所在地点
CREATE TABLE dept(deptno int primary key auto_increment NOT NULL,dname VARCHAR(20),loc VARCHAR(13)
); 
INSERT INTO dept VALUES(1,'accounting','一区');
INSERT INTO dept VALUES(2,'research','二区');
INSERT INTO dept VALUES(3,'operations','二区');

1.10.2 员工表 emp

字段名称数据类型是否为空备注
empnoint员工编号,PK主键
enamevarchar(10)Y员工名称
jobvarchar(10)Y职位
mgrintY上级编号
hiredatedatetimeY月工资
saldoubleY奖金
commNUMERIC(8,2)Y奖金
deptnointY所属部门 FK外键

Mysql:

CREATE TABLE emp(empno int primary key auto_increment NOT NULL,ename VARCHAR(10),job VARCHAR(10),mgr int,hiredate DATE,sal double,comm NUMERIC(7,2),deptno int
);
INSERT INTO emp VALUES(100,'jack','副总',NULL,'2002-05-03',90000,NULL,1);
INSERT INTO emp VALUES(200,'tony','总监',100,'2015-02-02',10000,2000,2);
INSERT INTO emp VALUES(300,'hana','经理',200,'2017-02-02',8000,1000,2);
INSERT INTO emp VALUES(400,'leo','员工',300,'2019-02-22',3000,200.12,2);
INSERT INTO emp VALUES(500,'liu','员工',300,'2019-03-19',3500,200.58,2);

1.11 基础函数

1.11.1 lower

SELECT 'ABC',LOWER('ABC') from dept; --数据转小写

1.11.2 upper

select upper(dname) from dept --数据转大写

1.11.3 length

select length(dname) from dept --数据的长度

1.11.4 substr

SELECT dname,SUBSTR(dname,1,3) FROM dept; --截取[1,3]

1.11.5 concat

select dname,concat(dname,'123') X from dept --拼接数据

1.11.6 replace

select dname,replace(dname,'a','666') X from dept --把a字符替换成666

1.11.7 ifnull

select ifnull(comm,10) comm from dept2 #判断,如果comm是null,用10替换

1.11.8 round & ceil & floor

round四舍五入,ceil向上取整,floor向下取整

--直接四舍五入取整select comm,round(comm)  from emp--四舍五入并保留一位小数select comm,round(comm,1)  from emp--ceil向上取整,floor向下取整select comm,ceil(comm) ,floor(comm)  from emp

1.11.9 uuid

SELECT UUID()返回uuid:a08528ca-741c-11ea-a9a1-005056c00001

1.11.10 now

select now() -- 年与日 时分秒select curdate() --年与日select curtime() --时分秒

1.11.11 year & month & day

--hour()时  minute()分 second()秒select now(),hour(now()),minute(now()),second(now()) from emp ;--year()年 month()月 day()日select now(),year(now()),month(now()),day(now()) from emp ;

1.11.12 转义字符

’作为sql语句符号,内容中出现单撇就会乱套,进行转义即可

select 'ab'cd'  -- 单引号是一个SQL语句的特殊字符select 'ab\'cd' --数据中有单引号时,用一个\转义变成普通字符

1.12 条件查询

1.12.1 distinct

使用distinct关键字,去除重复的记录行

SELECT loc FROM dept;SELECT DISTINCT loc FROM dept;

1.12.2 where

注意:where中不能使用列别名!!

select * from emp
select * from emp where 1=1 --类似没条件
select * from emp where 1=0 --条件不成立
select * from emp where empno=100 --唯一条件
select * from emp where ename='tony'  and deptno=2 --相当于两个条件的&关系
select * from emp where ename='tony'  or deptno=1 --相当于两个条件的|关系
select name, sal from emp where sal=1400 or sal=1600 or sal=1800;
-- 或
select name, sal from emp where sal in(1400,1600,1800);
select name, sal from emp where sal not in(1400,1600,1800);

1.12.3 like

通配符%代表0到n个字符,通配符下划线_代表1个字符

select * from emp where ename like 'l%' --以l开头的select * from emp where ename like '%a' --以a结束的select * from emp where ename like '%a%' --中间包含a的select * from emp where ename like 'l__'  --l后面有两个字符的 _代表一个字符位置

1.12.4 null

select * from emp where mgr is null --过滤字段值为空的select * from emp where mgr is not null --过滤字段值不为空的

1.12.5 between and

SELECT * FROM empselect * from emp where sal>3000 and sal<10000select * from emp where sal>=3000 and sal<=10000--等效select * from emp where sal between 3000 and  10000--等效

1.12.6 limit

分数最高的记录:按分数排序后,limit n,返回前n条。Oracle做的很笨,实现繁琐,后期有介绍,而mysql做的很棒,语法简洁高效。在mysql中,通过limit进行分页查询:

select * from emp limit 2 --列出前两条
select * from emp limit 1,2 --从第二条开始,展示2条记录
select * from emp limit 0,3 --从第一条开始,展示3条记录--前三条

1.12.7 order by

SELECT * FROM emp order by sal #默认升序SELECT * FROM emp order by sal desc #降序

1.13 统计案例

1.13.1 入职统计

#2015年以前入职的老员工
SELECT * FROM emp WHERE DATE_FORMAT(hiredate,'%Y-%m-%d')<'2015-01-01';
SELECT * FROM emp WHERE YEAR(hiredate)<2015#2019年以后签约的员工,日期进行格式转换后方便比较
SELECT * FROM emp WHERE YEAR(DATE_FORMAT(hiredate,'%Y-%m-%d'))>=2019;#2015年到2019年入职的员工
SELECT * FROM empWHERE
STR_TO_DATE(hiredate,'%Y-%m-%d')>='2015-01-01'AND
STR_TO_DATE(hiredate,'%Y-%m-%d')<='2019-12-31'

1.13.2 年薪统计

公司福利不错13薪,年底双薪,统计员工的年薪=sal13+comm13

SELECT empno,ename,job,sal*13+comm*13  FROM emp;SELECT empno,ename,job,sal*13+comm*13 as 年薪 FROM emp;--用as给列起个别名SELECT empno,ename,job,sal*13+comm*13 年薪 FROM emp; --as也可以省略select ename, sal+comm from empselect ename, sal , comm, sal+ifnull(comm,0) from emp--用0替换掉null

1.14 聚合 aggregation

根据一列统计结果

1.14.1 count

s

elect count(*) from emp --底层优化了select count(1) from emp --效果和*一样select count(comm) from emp  --慢,只统计非NULL的

1.14.2 max / min

select max(sal) from emp --求字段的最大值
select max(sal) sal,max(comm) comm from emp select min(sal) min from emp --获取最小值
select min(sal) min,max(sal) max  from emp --最小值最大值
SELECT ename,MAX(sal) FROM emp group by ename --分组

1.14.3 sum / avg

平均值

select count(*) from emp --总记录数select sum(sal) from emp --求和select avg(sal) from emp --平均数

1.15 分组 group

用于对查询的结果进行分组统计

group by表示分组, having 子句类似where过滤返回的结果

1.15.1 group by

#每个部门每个岗位的最高薪资和平均薪资,结果中的非聚合列必须出现在分组中,否则业务意义不对
SELECT deptno,MAX(sal),AVG(sal) FROM emp
GROUP BY deptno #按照deptno分组 SELECT job,MAX(sal),AVG(sal) FROM emp
GROUP BY job #按照job分组SELECT deptno,job,MAX(sal),AVG(sal) FROM emp
GROUP BY deptno,job #deptno和job都满足的

1.15.2 having

#平均工资小于8000的部门
select deptno, AVG(sal)  from emp 
group by deptno  #按部门分组
having AVG(sal) <8000 #查询条件,类似where,但是group by只能配合having#deptno出现的次数
SELECT deptno,COUNT(deptno)  FROM emp
GROUP BY deptno #按deptno分组
HAVING COUNT(deptno)>1 #次数多的

1.16 小结

1.16.1 char和varchar有什么区别?

  • char为定长字符串,char(n),n最大为255
  • varchar为不定长字符串,varchar(n),n最大长度为65535
  • char(10)和varchar(10)存储abc,那它们有什么差别呢?
  • char保存10个字符,abc三个,其它会用空格补齐;而varchar只用abc三个位置。

1.16.2 datetime和timestamp有什么区别?

  • 数据库字段提供对日期类型的支持,是所有数据类型中最麻烦的一个,慢慢使用就会体会出来。

  • date 是 年与日

  • time是 时分秒

  • datetime年月日时分秒,存储和显示是一样的

  • timestamp时间戳,存储的不是个日期,而是从1970年1月1日到指定日期的毫秒数

1.16.3 中文乱码

如果在dos命令下执行insert插入中文数据,数据又乱码,那现在sqlYog客户端执行下面命令:

set names utf8;set names gbk;

设置客户端字符集和服务器端相同。如果不知道它到底用的什么


http://chatgpt.dhexx.cn/article/rBs4oZh6.shtml

相关文章

PHP大神课程,[项目实战教程] PHP大神零础班+就业班 大神极速PHP基础入门视频教程 基础课程...

资源介绍 ├<39期基础班> │xa0xa0├xa0 │xa0xa0│xa0xa0├1BS网络结构.wmv │xa0xa0│xa0xa0├2html介绍.wmv │xa0xa0│xa0xa0├3字体修饰标记.wmv │xa0xa0│xa0xa0├4editplus设置.wmv │xa0xa0│xa0xa0├5排版标记.wmv │xa0xa0│xa0xa0├6项目符号和编号.wmv │xa…

mysql(一):数据库概述、mysql概述与安装配置、sql语言、DDL、DML、索引

目录 数据处理1. 数据库1.1概述1.1.1 数据存储1.1.2 数据库应用领域1.1.3 基本概念1.1.4 数据库分类和常见数据库 1.2 MySQL1.2.1 MySQL特点1.2.2 MySQL安装1.2.3 启动和连接MySQL服务1.2.4 MySQL数据库结构1.2.5 基本概念解析 2 SQL语言2.1 什么是SQL2.2 SQL语言特点2.2.1 SQL…

PHP-待续...

PHP 1. 认识PHP 1.1 什么是PHP PHP 是 “PHP Hypertext Preprocessor(超级文本预处理器)” 的首字母缩略词&#xff0c;动态网页编程语言PHP文件可包含文本&#xff0c;HTML&#xff0c;JavaScript代码和PHP代码PHP代码在服务器上执行&#xff0c;结果以纯HTML形式返回给浏览…

数据库的安装卸载与使用

一、数据库概述 1.为什么软件测试工程师还需要学习数据库以及开发方面的知识&#xff1f; 测试工程师的目的是找出软件的不足&#xff0c;并告诉开发工程师&#xff0c;出现问题的环境&#xff0c;操作步骤和输入输出数据&#xff1b;优秀的测试工程师&#xff0c;需要告诉开…

C# “配置系统未能初始化” 异常解决

使用App.config配置参数&#xff0c;读取参数出现错误 “System.Configuration.ConfigurationErrorsException”类型的未经处理的异常在 System.Configuration.dll 中发生 其他信息: 配置系统未能初始化 验证App.config文件没有结构错误 解决办法&#xff1a; 如果配置文件中…

解决winform中的异常【配置系统未能初始化】

最近在讲课演示的时候&#xff0c;偶尔会发生如下的异常。“配置系统未能初始化”&#xff0c;当时也没有时间深究到底什么原因造成的。 今天再一琢磨&#xff0c;以上的InnerException提示说&#xff1a;无法识别的配置节userSettings。 再一深入找下去&#xff0c;我们找到下…

解决打开EXCEL插件时报错“配置系统未能初始化”的问题

今天客户提了一个在打开NC系统的预算EXCEL预算客户端时报错&#xff0c;提示“配置系统未能初始化”的问题&#xff0c;ISM中没有类似用户提示&#xff0c;经过EXCEL插件后&#xff0c;问题依然存在。应该是系统环境问题或有配置信息导致。 网上查询&#xff0c;大部分都是因为…

安装sql server出现配置系统未能初始化

解决方法 1.找到C:\Windows\Microsoft.NET\Framework64\v2.0.50727\CONFIG目录下的machine.config文件 2.删除 <system.serviceModel>xxxxxx</system.serviceModel>整个节点 3.如果遇见删除之后提示保存不了machine.config文件&#xff0c;在这里 搜索记事本 并用…

C# “配置系统未能初始化”

运行程序时&#xff0c;出现这个问题。 问题应该是出在App.config文件上。 我曾手动打开这个文件修改了一些内容&#xff0c;但修改后&#xff0c;没发现XML内容及格式有错。 或许是用第三方的编辑软件在修改及保存App.config内容时&#xff0c;加了一些不可见的字符。 后来导…

.NET 配置系统未能初始化”异常

最近在讲课演示的时候&#xff0c;偶尔会发生如下的异常。“配置系统未能初始化”&#xff0c;当时也没有时间深究到底什么原因造成的。 今天再一琢磨&#xff0c;以上的InnerException提示说&#xff1a;无法识别的配置节userSettings。 再一深入找下去&#xff0c;我们找到下…

RAD Studio 安装之后出现“配置系统未能初始化“

我最近在我的 Win10 64位电脑上安装 RAD Studio 10 Seattle 成功后出现了莫名其妙的问题&#xff0c; 我百度了很久都没解决&#xff0c;直到发现一篇博客试了一试&#xff0c;解决了&#xff0c;我太开心了&#xff0c;觉得还是把这些坑都写清楚&#xff0c;方便大家避坑 原文…

莫名其妙的“配置系统未能初始化”异常

最近在讲课演示的时候&#xff0c;偶尔会发生如下的异常。“配置系统未能初始化”&#xff0c;当时也没有时间深究到底什么原因造成的。 今天再一琢磨&#xff0c;以上的InnerException提示说&#xff1a;无法识别的配置节userSettings。 再一深入找下去&#xff0c;我们找到下…

如何解决未能初始化战场服务器,microsoft net framework配置系统未能初始化

怎么解决这个问题?——一开机就跳出来!!! 有关调用实时(JIT)调试而不是此对话框的详细信息, 请参见此消息的结尾。 ************** 异常文本 ************** System.Configuration.ConfigurationErrorsException: 配置系统未能初始化 ---> System.Configuration.Config…

Error:配置系统未能初始化

Error&#xff1a;配置系统未能初始化 调试自己软件的时候&#xff0c;VS弹出了个提示&#xff1a;应用程序错误&#xff1a;信息配置系统未能初始化 跟踪堆栈的时候&#xff0c;发现所有类序列化失败 最后在C盘AppData找到相关软件相关版本的user.config文件&#xff0c;删…

“配置系统未能初始化” 的异常一种产生原因

今天VS2017造成电脑死机&#xff0c;重启电脑后打开VS进行调试发现程序启动失败&#xff0c;原因是读取Settings配置信息时产生“配置系统未能初始化”异常&#xff0c;但是App.config文件并未修改&#xff0c;所以网上的一些解决办法在这里并不适用了&#xff0c;由于C#的配置…

计算生物化学中计算RMSD的方法

vmd 中计算RMSD的方法:(http://www.ks.uiuc.edu/Training/Tutorials/vmd/tutorial-html/node7.html&#xff09; amber中计算RMSD的方法:&#xff08;http://ambermd.org/tutorials/analysis/tutorial1/)

gnuplot软件学习笔记

gnuplot&#xff0c;一个命令行交互式的绘图工具 gnuplot学习资料&#xff1a; gnuplot本身自带的官方使用教程&#xff0c;输入help交互式打开 help 可以找马欢老师的gnuplot中文教程&#xff1a;http://ouc.ai/zhenghaiyong/courses/tutorials/gnuplot/gnuplot-zh.pdf g…

Nature | 基于深度神经网络和改进的片段测序方法从头预测蛋白质结构

Nature子刊 Machine Intelligence发布了八月份最新接收论文&#xff0c;共4 篇。一篇是清华生命学院龚海鹏和澳大利亚格里菲斯大学周耀旗等人用神经网络进行蛋白质结构预测方面的工作。 DeepMind提出的AlphaFold证明了深度学习能大幅度提高蛋白质结构预测准确度。2019年8月&…

回归分析中的评价方法

回归&#xff08;Regression&#xff09;不同于分类问题&#xff0c;在回归方法中我们预测一系列连续的值&#xff0c;在预测完后有个问题是如何评价预测的结果好坏&#xff0c;关于这个问题目前学术界也没有统一的标准。下面是我在论文中的看到的一些常用方法&#xff0c;希望…