DQL(Data Query Language)数据查询语言查询是使用评率最高的一个操作,可以从一个表中查询数据,也可以从多个表中查询数据
一.语法:
select 查询列表 from 表名 [where 条件]
特点:1.查询列表可以是一个表中的字段,常量,表达式,函数
2.查询的结果是一个虚拟的表
查询结果处理:
查询常量值 SELECT 100;
查询表达式:select 100*98;
查询函数:select 函数; / 例如version()
特定列查询:select column1,column2 from table
全部列查询: select * from table
排除重复行: select distinct column1,column2 from table
算数运算符:+ - * /
二.函数:类似于java中的方法,将一组逻辑语句事先定义在数据库中,用户可以直接调用
优点:隐藏了实现细节,提高代码的重用性.调用:select 函数名(实参列表)[from 表]
分类:
三.单行函数:concat,length,ifnull等
分组函数:统计时使用,又称统计函数,聚合函数,组函数
单行函数:
1.字符函数:
length():获取参数值的字节个数
char_length()获取参数值的字符个数
concat(str1,str2,.....):拼接字符串
upper()/lower():将字符串变成大写/小写
substring(str,pos,length):截取字符串 位置从1开始
instr(str,指定字符):返回子串第一次出现的索引,如果找不到返回0
trim(str):去掉字符串前后的空格或子串,trim(指定子串 from 字符串)
lpad(str,length,填充字符):用指定的字符实现左填充将str填充为指定长度
rpad(str,length,填充字符):用指定的字符实现右填充将str填充为指定长度
replace(str,old,new):替换,替换所有的子串
2.逻辑处理
case when 条件 then 结果1 else 结果2 end;可以有多个when
ifnull(被检测的值) 函数检测是否为null,如果为null,则返回指定的值,否则返回原本的值
if函数:if (条件,结果1,结果2) if else的效果
3.数学函数:
round(数值):四舍五入
ceil(数值):向上取整,返回>=该参数的最小整数
floor(数值):向下取整,返回<=该参数的最大整数
truncate(数值,保留小数的位数):截断,小数点后截断到几位
mod(被除数,除数):取余,被除数为正,则为正;被除数为负,则为负
rand():获取随机数,返回0-1之间的小数
4.日期函数
now():返回当前系统日期+时间
curdate():返回当前系统日期,不包含时间
curtime():返回当前时间,不包含日期
str_to_date:将日期格式的字符转换成指定格式的日期
date_format:将日期转换为字符串
datediff:返回两个日期之间的隔得天数
日期格式:
%Y 年,4 位
%m 月,数值(00-12)
%d 月的天,数值(00-31)
%H 小时 (00-23)
%i 分钟,数值(00-59)
%s 秒(00-59)
%f 微秒
%T 时间, 24-小时
%j 年的天 (1-366)
%w 周的天 (0-6)
四.分组函数:
功能:用于统计使用,又称为聚合函数或统计函数或组函数
分类:
求和(sum),处理数值型
平均值(avg),处理数值型
最大值(max),处理任何类型
最小值(min),处理任何类型
计数(count)处理任何类型,一般使用count(*)用作统计行数
1.条件查询:
(1)模糊查询
like:是否匹配与一个模式,一般和通配符搭配使用,可以判断字符型数值或数值型
通配符:%任意多个字符,包含0个字符 _任意单个字符
between and 两者之间 包含临界值
is null(为空的) 或 is not null (不为空的)
(2)union:当使用union时,mysql会把结果集中重复的记录删掉,而使用union时mysql会将所有的记录返回,且效率高于union
[查询语句1]
union/union all
[查询语句2]
(3)排序:查询的结果出来后使用order by语句排序 asc(升序)/desc(降序) 默认升序
order by语句中可以支持多个字段,单个字段,表达式,函数,别名
(4)数量限制:
limit语句:对查询的结果进行数目限制的显示
(5)分组查询:需用到group by语句
group by 后加分组的列表,若分组前筛选的是原始表,条件使用where语句,当在分组后筛选的是分组后的结果集,需使用having来执行条件语句
(6)子查询:出现在其他语句中的select语句,称为子查询或内查询,外部的查询语句称为主查询或外查询.
分类:(按照子查询出现的位置)
select后面:仅仅支持标量子查询
from后面:支持表子查询
where或having后面:支持标量子查询,列子查询,行子查询
(按功能,结果集的行列数不同):
标量子查询(结果集只有一行一列)
列子查询(结果集只有一列多行)
行子查询(结果集有一行多列)(较少)
表子查询(结果集一般为多行多列)
五.关联查询
1.第一范式(确保每列保持原子性):第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值就说明该 数据库表满足了第一范式。
2.第二范式(要有主键,要求其他字段都依赖于主键):没有主键就没有唯一性,没有唯一性在集合中就定位不到这行记录,其他字段组成的这行记录和主键表示的是同一个东西,而主键是唯一的,它们只需要依 赖于主键,也就成了唯一的.
3.第三范式(消除传递依赖,可以看做是“消除冗余”)
4.外键:
外键与主键类型保持 一致,数据表之间的关联或引用关系是依靠具体的主键(primary key)和外键(foreign key)建立起来的
添加外键约束:
alter table 表名 add constraint 约束名 foreign key(外键列)references 关联表(主键);
删除外键:
alter table 表名 drop foreign 外键约束名
5.关联标的性质
(1).当主表中没有对应的记录时,不能将记录添加到从表
(2).不能更改主表中的值而导致从表中的记录孤立
(3).从表存在与主表对应的记录,不能从主表中删除该行
(4).删除主表前,先删从表
6.关联查询:又称多表查询,当查询的字段来自于多个表时,就会用到连接查询笛卡尔积现象:表1有m行,表2有n行,结果=m*n
改良方法:因为没有有效的连接条件,所以我们就添加有效的连接条件
按功能分类:
内连接:将满足了条件的两张表中的交集数据查询出来
Select 结果 from 表1,表2 where 表1.列名 = 表2.列名
(1).等值连接
(2).非等值连接
(3).自然连接
外连接:
(1).左外连接:
左表全部拿到,将右表满足条件的查询出来
select 结果 from 表1 left join 表2 on 表1.列名 = 表2.列名
(2).左外连接
右表全部拿到,将左表满足条件的查询出来
select 结果 from 表1 right join 表2 on 表1.列名 = 表2.列名