目录
1、数据库和SQL概述
1.1、数据库简介
数据库指的是长期存在计算机内、有组织、可共享的、大量数据的集合。数据是按照特定的数据模型来组织、存储在数据库中的。
1.2、数据库的好处
- 持久化数据到本地
- 可以实现结构化查询,方便管理
1.3、数据库相关概念
- DB(database):数据库,保存一组有组织的数据的容器
- DBMS(Database Management System):数据库管理系统,又称为数据库软件(产品),用于管理DB中的数据常见DBMS:MySQL、Oracle、DB2、SqlServer等
- SQL:结构化查询语言,用于和数据库通信的语言
1.4、SQL的语言分类
- DML(Data Manipulate Language)**:数据操纵语言,用于添加、删除、修改数据库记录,并检查数据完整性---( 关键字:insert, delete, update 等)
- DDL(Data Define Languge)**:数据定义语言,用于库和表的创建、修改、删除---(关键字:create, drop,alter等)
- TCL(Data Control Language)**:数据事务语言
- DQL(Data Query Language)**:数据查询语言,用来查询数据库中表的记录(数据)---(关键字:select, where 等)
2 、MySQL介绍和安装
2.1、MySQL介绍
MySQL 是一款安全、跨平台、高效的,并与 PHP、Java 等主流编程语言紧密结合的数据库系统。该数据库系统是由瑞典的 MySQL AB 公司开发、发布并支持,由 MySQL 的初始开发人员 David Axmark 和 Michael Monty Widenius 于 1995 年建立的
官方网址:https://www.mysql.com/
2.2 、MySQL安装
进入网址后是这样
之后进入DOWNLOADS下拉到这个地方点MySQL Community (GPL) Downloads »
而后点这个MySQL Installer for Windows
下载好之后点
- 根据电脑系统位数,点击中间的箭头
点击Excute,然后Next
默认选择Standalone MySQL Server,点击Next
选择Server Computer,默认端口号为3306,点击Next。也可以自己设置端口号
设置MySQL密码,建议root,点击Next
服务器名称无需更改,点击Next
后面进行傻瓜式是下一步,点击Excute,完成安装
2.3 、MySQL服务的启动和停止
- 方式一:计算机——右击管理——服务——MySQL
- 方式二:通过管理员身份运行cmd命令提示行
- net start mysql(启动服务)
- net stop mysql(停止服务)
2.4、 MySQL服务的登录和退出
- 方式一:通过MySQL自带的客户端-------注:只限于root用户
- 方式二:通过cmd命令提示行关闭,未配置MySQL环境变量,需在MySQL安装的bin下启动cmd
- 登录: mysql 【-h主机名 -P端口号 】-u用户名 -p密码
- 退出: exit或ctrl+C
2.5 、MySQL的语法规范
- 不区分大小写
- 使用“;”结尾
- 各子句一般分行写
- 关键字不能缩写也不能分行
- 合理使用缩进
- 注释
- 单行注释:#注释文字
- 单行注释:-- 注释文字
- 多行注释:/* 注释文字 *
3、 DQL语言
3.1 、查询
- 查询表中所有记录
- select * from 表名;
- 基础查询
- 多个字段的查询
- select 字段名1,字段名2... from 表名;
注意:如果查询所有字段,则可以使用*来替代字段列表。
- select 字段名1,字段名2... from 表名;
-
去除重复:
-
distinct
-
- 计算列
- 一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)
- ifnull(表达式1,表达式2):null参与的运算,计算结果都为null
- 表达式1:哪个字段需要判断是否为null
- 如果该字段为null后的替换值。
- 一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)
- 起别名: as(可以省略)
- 多个字段的查询
3.2、排序查询
3.2.1、语法:
- select 要查询的东西
- from 表
- where 条件
- order by 排序的字段|表达式|函数|别名 【asc|desc】
3.2.2、排序方式:
- ASC:升序,默认的
- DESC:降序
3.2.3、排序分类:
- 按单个字段进行排序
- 按多个字段排序
- 按表达式排序
- 按别名排序
- 按函数排序
- 注意: 如果有多个排序条件,则当之前的条件值一样时,才会判断第二条件
3.3、常见函数
3.3.1、字符函数
- concat: 拼接
- substr: 截取子串
- upper: 转换成大写
- lower: 转换成小写
- trim: 去前后指定的空格和字符
- ltrim: 去左边空格
- rtrim: 去右边空格
- replace: 替换
- lpad: 左填充
- rpad: 右填充
- instr: 返回子串第一次出现的索引
- length: 获取字节个数
3.3.2、数学函数
- round: 四舍五入
- rand: 随机数
- floor: 向下取整
- ceil: 向上取整
- mod: 取余
- truncate: 截断
3.3.3、日期函数
- now: 当前系统日期+时间
- curdate: 当前系统日期
- curtime: 当前系统时间
- str_to_date: 将字符转换成日期
- date_format: 将日期转换成字符
3.3.4、流程控制函数
- if 处理双分支
- case语句 处理多分支
- 情况1:处理等值判断
- 情况2:处理条件判断
3.3.5、其他函数
- version: 版本
- database: 当前库
- user: 当前连接用户
3.4、分组函数
- count:计算个数
- 一般选择非空的列:主键 例如:count(*)
- max:计算最大值
- min:计算最小值
- sum:计算和
- avg:计算平均值
- 特点:
- 1、以上五个分组函数都忽略null值,除了 count(*)
- 2、sum和avg一般用于处理数值型,max、min、count可以处理任何数据类型
- 3、都可以搭配distinct使用,用于统计去重后的结果
- 4、count的参数可以支持:字段、*、常量值,一般放1
- 注意:聚合函数的计算,排除null值。
- 解决方案:
- 选择不包含非空的列进行计算
- IFNULL函数
- 解决方案:
3.5、分组查询
- 语法:
- select 查询的字段,分组函数
- from 表
- group by 分组的字段
- 特点:
- 可以按单个字段分组
- 和分组函数一同查询的字段最好是分组后的字段
- 可以按多个字段分组,字段之间用逗号隔开
- 可以支持排序
- having后可以支持别名
- where 和 having 的区别?
- where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来
- where 后不可以跟聚合函数,having可以进行聚合函数的判断。
3.6、多表连接查询
3.6.1、笛卡尔集
- 产生条件
- 省略连接条件
- 连接条件无效
- 所有表中所有行互相连接
- 解决方案
- 添加有效对应的筛选条件
3.6.2、内连接
由于sql中版本的不同分为sql92和sql99俩种语法规则
SQL92语法
- SELECT 查询列表
- FROM 表名1 别名1 ,表名2 别名2
- WHERE 连接条件
- AND 筛选条件
- GROUP BY 分组列表
- HAVING 分组后筛选条件
- ORDER BY 排序列表
SQL99语法
- select 字段列表
- from 表名1
- [inner] join 表名2 on 条件
- where 筛选条件
- group by 分组条件
- having 分组后的筛选条件
- order by 排序字段组列表
- HAVING 分组后筛选条件
- ORDER BY 排序列表
注意:
1. 使用表名前缀在多个表中区分相同的列
2. 在不同表中具有相同列名的列可以用表的别名加以区分
3. 如果使用了表别名,则在select语句中需要使用表别名代替表名
4. 表别名最多支持32个字符长度,但建议越少越好
3.6.3、外连接
外连接分为俩种一种是左外连接(左边为主表,从右边找交集部分)和右外连接(右边为主表,从左边找交集部分)
其中语法规则左外连接为
- select 字段列表
- from 表1
- left [outer] join 表2 on 条件
右外连接为
- select 字段列表
- from 表1
- right [outer] join 表2 on 条件
3.6.4、子查询
其概念:查询中嵌套查询,称嵌套查询为子查询
特点:
- 子查询都放在小括号内
- 子查询可以放在from后面、select后面、where后面、having后面,但一般放在条件的右侧
- 子查询优先于主查询执行,主查询使用了子查询的执行结果
- 子查询根据查询结果的行数不同分为以下两类:
- 单行子查询
- 结果集只有一行
- 一般搭配单行操作符使用:> < = <> >= <=
- 非法使用子查询的情况:
- 子查询的结果为一组值
- 子查询的结果为空
- 多行子查询
- 结果集有多行
- 一般搭配多行操作符使用:any、all、in、not in
- in: 属于子查询结果中的任意一个就行
- any和all往往可以用其他查询代替
- 单行子查询
3.6.5、分页查询
语法:
- select 字段|表达式,...
- from 表
- where 条件
- group by 分组字段
- having 条件
- order by 排序的字段
- limit 起始的条目索引,条目数;
特点:
- 起始条目索引从0开始
- limit子句放在查询语句的最后
- 公式:select * from 表 limit (page-1)*sizePerPage,sizePerPage
3.6.6、联合查询
语法:
- select 字段|常量|表达式|函数 from 表 where 条件 union 【all】
- select 字段|常量|表达式|函数 from 表 where 条件 union 【all】
- .....
- select 字段|常量|表达式|函数 from 表 where 条件
特点:
- 多条查询语句的查询的列数必须是一致的
- 多条查询语句的查询的列的类型几乎相同
- union代表去重,union all代表不去重