MySQL核心查询
2021-08-16 20:18:13 0 举报
AI智能生成
MySQL核心查询语句
作者其他创作
大纲/内容
四、合并查询
UNION
合并两个或多个select语句的结果集,并消除重复行
select语句必须拥有相同数量的列,列的数据类型也要相似,顺序相同,名称不必相同
select .. from ..
union
select .. from ..
UNION ALL
与UNION类似,保留重复行
执行效率比UNION更快
五、子查询
概念
一条select查询语句的结果,作为另一条select语句的一部分
特点
子查询必须放在小括号里
整个sql至少有两个select关键字
分类
where型子查询
子查询的结果是单行单列,将子查询的结果作为父查询的比较条件
select 字段名 from 表 where 字段=(子查询);
from型子查询
子查询的结果是多列,将子查询的结果作为一张表,提供给父层查询使用
select 字段名 from (子查询) 表别名 where 条件;
注意当子查询作为一张表的时候,需要起别名,否则无法访问表中的字段。
exists型子查询
子查询的结果是单列多行,类似一个数组,父层查询使用IN函数,包含子查询的结果
select 字段名 from 表 where 字段 IN (子查询);
with..as的用法
如果一个sql中需要多次使用同一个子查询的结果,可以使用with..as
with 表名 as (子查询) select .. from ..
六、MySQL函数
数学函数
绝对值:ABS(x)
返回不大于x的最大整数值:floor(x)向下取整 ceil(x)向上取整
返回0~1的随机数:rand()
圆周率的值:pi()
余数:mod(x,y)
字符串函数
拼接:concat(s1,s2..)
返回从字符串s开始的n个最左字符:left(s,n)
移除字符串s的字头或字尾空格:trim(s)
用字符串s2代替s中的字符串s1:replace(s,s1,s2)
截取字符串s中第n位开始,长度位len的字符串:substring(s,n,len)
反转字符串s:reverse(s)
日期和时间函数
当前日期:curdate()
当前时间:curtime()
当前日期和时间:now()
返回月份:month(d)
返回年份:year(d)
条件判断函数
if(expo,v1,v2)
case when
系统信息函数
数据库版本号:version()
当前数据库名:databases()
当前用户名:user()
一、单表查询
排序ORDER BY
单列排序
select 字段名 from 表名 order by 字段名 [ASC/DESC],其中ASC表示升序(默认),DESC表示降序
组合排序
select 字段名 from 表名 order by 字段名1 [ASC/DESC], 字段名2 [ASC/DESC],如果第一个字段相同,就按照第二个字段进行排序
聚合函数
对某一列的值进行计算,返回一个单一的值,会忽略null空值
select 聚合函数 from 表名
聚合函数
统计指定列不为NULL的记录行数:count(字段)
统计总记录条数可以count(*)或count(1),不能用带有null的列进行统计
计算指定列的数值和:sum(字段)
计算指定列的最大最小值:max(字段)/min(字段)
计算指定列的平均值:avg(字段)
分组GROUP BY
往往和聚合函数一起使用,对数据进行分组,分完组后在各个组内进行聚合统计
select 分组字段/聚合函数 from 表名 group by 分组字段 [having 条件],其中having是用于在分组后对数据进行过滤
分组时可以查询要分组的字段或者聚合函数统计,查询其他字段没有意义。所以group by的字段必须出现在select中,且select中除了group by字段和聚合函数,不能出现其他字段
where进行分组前的过滤,不能加聚合函数;having进行分组后的过滤,能加聚合函数
limit关键字
限制返回的查询结果的行数
select 字段1,字段2 from 表名 limit offset, length,其中offset为起始行数,默认为0,length为长度
二、SQL约束
作用:对表中的数据进行进一步限制,保证数据的正确性、有效性、完整性,违反约束的不正确数据无法插入表中
常见约束
主键约束
特点:不可重复,唯一,非空
作用:唯一标识数据库中的每一条记录
主键与业务和客户无关,往往人为加上一列,习惯上起名为id,rid等
语法
创建表时,字段名 字段类型 primary key,例如eid int primary key
创建表时,primary key(字段名),例如primary key(eid)
创建表时不指定,通过DDL设置:alter table 表名 add primary key(eid)
主键自增
eid int primary key auto_increment
默认开始值是1,修改起始值方式:create table emp(...)auto_increment=100;
如果delete数据,则自增会继续记录
如果truncate数据,则自增会重新从1开始
唯一约束
特点:某一列不能重复
语法
创建表时,字段名 字段类型 unique
非空约束
特点:某一列不允许为空
语法
创建表时,字段名 字段类型 NOT NULL
外键约束
定义:在从表中与主表的主键对应的那个字段
作用:让两张表产生一个对应关系,保证主从表的引用完整性
外键类型应与主表主键类型一致;
先添加主表数据;
先删除从表数据。
语法
创建表时,[constraint] [外键约束名] foreign key(外键字段名) references 主表名(主键字段名)
创建表时不指定,通过DDL设置:alter table 从表 add [constraint] [外键约束名] foreign key(外键字段名) references 主表(主键字段名)
删除外键:alter table 从表 drop foreign key 外键约束名
默认值约束
特点:用来指定某一列的默认值
语法
创建表时,字段名 字段类型 default 默认值
三、多表查询
笛卡尔积
select 字段名 from 表1, 表2
假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1),(b, 2)}
交叉查询,得到两个表的数据的乘积,很多无效结果
可以通过添加where条件,过滤出有效数据
内连接
特点:通过指定的条件去匹配两张表的数据,匹配上就显示,匹配不上就不显示
隐式内连接
select 字段名 from 左表,右表 where 连接条件;
显式内连接
select 字段名 from 左表 [inner] join 右表 on 条件;
外连接
左外连接
特点:以左表为基准,匹配右表数据,匹配的上就显示,匹配不上,左表数据正常显示,右表显示为null
select 字段名 from 左表 left [outer] join 右表 on 条件;
右外连接
特点:以右表为基准,匹配左表数据,匹配的上就显示,匹配不上,右表数据正常显示,左表显示为null
select 字段名 from 左表 right [outer] join 右表 on 条件;
插入图片
0 条评论
下一页