持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情
直接进入正题,数据库的查询语法包括单表查询,多表查询,分组查询,子查询,分组多表查询等,说到查询,首先就得了解查询的标准语法:select 字段1,字段2... from 表名
除此之外我们还可以对查询结果进行相应的处理,比如
给字段设置别名:select 字段1 (as) 别名,字段2... from 表名 ,这样查询到的结果中原字段名就会变成你设置的别名,还可以对字段进行去除重复值操作:select distinct 字段1,字段2... from 表名 ,给字段排序:select 字段1,字段2... from 表名 order by 字段 asc(升序)/desc(降序),显示查询结果的前n行:select 字段1,字段2... from 表名 limit n
这里需要注意的就是!!!Limit 永远语句放在最后
显示从m+1开始的n行:select 字段1,字段2... from 表名 limit m,n
条件查询:
Select 字段1,字段2... from 表名 where 字段名=值
大于,小于,大于等于>=,小于等于<=,不等于 != <>
select * from 表名 where 字段名 like "a%"; ----查询字段以a开头的所有信息
select * from 表名 where 字段名 like "a_"; //下划线表示匹配一个字符
%a% ---表示包含a
select * from 表名 where 字段1 and 字段2; ---和
select * from 表名 where 字段1 or 字段2; ---或
select * from 表名 where not(字段名=值); ---取反
select * from 表名 where 字段名 not like "a%" ; ---取反
区间:
where 字段名 (not) between 值1 and 值2
集合
where 字段名 (not) in (值1,值2)
eg: select * from emp where(deptno,job) in ((30,"salesman"),(20,"clerk")); 分组查询:
普通函数:if(),ifnull(),动词(对象),current_date,length(),random(),datediff(日期1,日期2)日期减法,year(日期)取日期年份
聚合函数:count(),max(),min(),avg(),sum() !!!只能写在select里面!!!
count():求个数
max():求最大值
min():求最小值
avg():求平均值,只能针对于数字
sum():求和,只能针对于数字且不计算空值
一次筛选和二次筛选:
where是做一次筛选,是对源表数据进行过滤
having是做二次筛选,是对分组后的结果进行过滤
分组查询语句:select 字段,聚合函数 from 表名 group by 字段;
多表查询:
等值连接:select 表名.字段名 from 表1 (别名),表2 (别名) where 表1.字段1=表2.字段2 and 条件
内连接: select 表名.字段名 from 表1 (别名) (inner) join 表2 on 表1.字段1=表2.字段2 join 表3 on ... where 条件
自身表连接:把自身表看作两个表即可
左右连接:left join(主表在左) 和 right join(主表在右)
区别:1.关键字不一样
2.left join 主表在左,right join 主表在右
多表分组查询
子查询:多个数据时要用in
eg、select * from emp where (deptno,hireadte) in (select deptno,min(hireadte)
from emp group by deptn
insert into 表名 子查询语句(不要values)
复制一张表,本质是创建一张表 ,表结构和表内容与原表完全相同
create table 表名 as select * from 原表
复制一张表,只和原表结构相同,但没有数据
create table 表名 as select * from 原表 where 1=2
查询语句1 union 查询语句2 ---将两个查询结果上下叠加起来(重复的查询结果会去掉,不去掉用union all)
视图: view,把多个实体表的数据拼接起来作为一个虚表保存
create view 视图名 as 查询语句