数据库DQL语句

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.列名

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值