目录
前言:
大家好啊!
最近博主也开始学习数据库了,
既然咱是第一次遇见MySQL,它MySQL也是第一次也是见到我,
那我凭什么要让着它?就要吃定它!拿捏它!把它给拿下!
相关概念:
数据库:指的是长期存在计算机内、有组织、可共享的、大量数据的集合。数据是按照特定的数据模型来组织、存储在数据库中的。
DB(database):数据库,保存一组有组织的数据的容器
DBMS(Database Management System):数据库管理系统,又称为数据库软件(产品),用于管理DB中的数据
常见DBMS:MySQL、Oracle、DB2、SqlServer等
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 等
1、基础查询:
1. 查询表中所有记录
select * from 表名;
2. 基础查询
1. 多个字段的查询
select 字段名1,字段名2... from 表名;
注意:
如果查询所有字段,则可以使用*来替代字段列表。
2. 去除重复:
distinct
3. 计算列
一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)
ifnull(表达式1,表达式2):null参与的运算,计算结果都为null
表达式1:哪个字段需要判断是否为null
如果该字段为null后的替换值。
4. 起别名:
as(可以省略)
2、条件查询:
1. where子句后跟条件
2. 运算符
> 、< 、<= 、>= 、= 、<>
BETWEEN...AND
IN( 集合)
LIKE:模糊查询
占位符:
_:单个任意字符
%:多个任意字符
IS NULL
and 或 &&
or 或 ||
not 或 !
3、排序查询:
语法:
select
要查询的东西
from
表
where
条件
order by 排序的字段|表达式|函数|别名 【asc|desc】
排序方式:
ASC:升序,默认的
DESC:降序
4、分组查询:
分组函数(又称为聚合函数或统计函数或组函数):
count 计算个数
一般选择非空的列:主键
count(*)max 计算最大值 min
计算最小值 sum
计算和 avg 计算平均值 语法:
select 查询的字段,分组函数
from 表
group by 分组的字段
面试相关:
where 和 having 的区别?
1. where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来
2. where 后不可以跟聚合函数,having可以进行聚合函数的判断。
5、连接查询:
含义:当查询中涉及到了多个表的字段,需要使用多表连接
笛卡尔乘积:当查询多个表时,没有添加有效的连接条件,导致多个表所有行实现完全连接。
内连接:
SQL99语法:(推荐使用)
select 字段列表
from 表名1
[inner] join 表名2 on 条件
where 筛选条件
group by 分组条件
having 分组后的筛选条件
order by 排序字段分类:
等值连接、非等值连接、自连接
注意:
1. 使用表名前缀在多个表中区分相同的列
2. 在不同表中具有相同列名的列可以用表的别名加以区分
3. 如果使用了表别名,则在select语句中需要使用表别名代替表名
4. 表别名最多支持32个字符长度,但建议越少越好
外连接:
分类:左外连接、右外连接、全外连接
左外连接:
右外连接:
全外连接:
特点:
1.查询的结果等于主表中所有的行,如果从和它匹配的将显示匹配行,如果从表没有匹配的则显示null
2.left join左边的就是主表,right join 右边的就是主表, full join两边都是主表
3.一般用于查询除了交集部分的剩余的不匹配的行
6、子查询:
含义:
查询中嵌套查询,称所嵌套查询为子查询或内查询,外部的查询语句则称为主查询或外查询。
理解:类似于我们学习java时的循环嵌套,一个for循环里面嵌套着另一个for循环,就是这种套娃的感觉。
特点:
1、子查询都放在小括号内
2、子查询可以放在from后面、select后面、where后面、having后面,但一般放在条件的右侧
3、子查询优先于主查询执行,主查询使用了子查询的执行结果
4、子查询根据查询结果的行数不同分为以下两类:
① 单行子查询
结果集只有一行
一般搭配单行操作符使用:> < = <> >= <=
非法使用子查询的情况:
a、子查询的结果为一组值
b、子查询的结果为空
② 多行子查询
结果集有多行
一般搭配多行操作符使用:any、all、in、not in
in: 属于子查询结果中的任意一个就行
any和all往往可以用其他查询代替
7、分页查询:
语法:
select 查询的字段,分组函数
from 表
limit [offset],sizeoffset:起始的条目索引,从0开始
size:代表显示的条目数
8、联合查询:
语法:
select 字段|常量|表达式|函数 from 表 where 条件 union 【all】
select 字段|常量|表达式|函数 from 表 where 条件 union 【all】
select 字段|常量|表达式|函数 from 表 where 条件 union 【all】
.....
select 字段|常量|表达式|函数 from 表 where 条件