3-DQL(数据查询语言)

基础查询:select 查询列表 from 表名;
查询列表可以是表中字段,常量值,表达式,函数
取别名:as(可省略)
去重:查询字段名前加distinct
+的作用:加法,有字符串试图转换,转换不了直接为0,有null结果为null
concat(str1,str2…)拼接字符串,有null则全部为null
ifnull(可能为空字段,为空时值) null字段操作

条件查询:select 查询列表 from 表名 where 筛选条件
条件运算符:> < = != <> >= <=
逻辑表达式:&& || ! and or not
模糊查询:like, between and , in , is null, is not null
like:%包含任意字符;_包含一个字符;查询下划线用转义,escape “$”自定义转义符
between and:等价于>=… and <=… 语句简洁,包含临界值,范围数值不能颠倒
in:某字段值是否属于in列表某项,列表项值类型兼容,比or简洁
is null is not null
安全等于:<=> 可判空或其他数值: <=> null 等于空 ;可读性差;

排序查询:筛选条件后order by desc降序 asc升序(默认)
相同值排序乱序解决:加入唯一性字段排序,例如id
支持按别名、按函数、按多字段
一般放于最后(limit子句除外)

常见函数:
length(字节个数):中文gbk一个汉字占两个字节,utf8占三个字节
upper() lower()大小写转化
substr(字段,索引位置截取) 索引从1开始 同substring()
substr(字段,指定索引位置,字符长度)
instr(给定字段,查询字段) 查出需要查询字段的起始索引,查不出为0
trim(指定内容 from 给定字段) 去除给定字段前后指定内容
lpad(给定字段,填充后总长度,填充内容) 左填充
rpad(给定字段,填充后总长度,填充内容) 右填充
replace(给定字段,需要替换的内容,替换成的内容)

数学函数:
round(数字) 四舍五入
round(数字,小数点后取位数) 四舍五入
ceil(数字) 向上取整,返回>=该数字的最小整数
floor(数字) 向下取整,返回<=该数字的最大整数
truncate(数字,截断小数点后几位)
mod(被除数,除数) 取模 符号同被除数

日期函数
#返回日期日期比较大小,>0 DATE1大,<0 +++DATE2大
DATEDIFF(DATE1,DATE2);
#返回当前系统年月日时分秒
SELECT NOW();
#时间戳,适用于datetime
SELECT CURRENT_TIMESTAMP();

返回年月日

SELECT CURDATE();
SELECT CURRENT_DATE();

返回时分秒

SELECT CURTIME();
SELECT CURRENT_TIME();

SELECT YEAR(NOW());

年加今年第几周

SELECT YEARWEEK(NOW());

年加?

SELECT YEARWEEK(NOW(),2);

SELECT MONTH(NOW());

英文几月

SELECT MONTHNAME(NOW());

SELECT DAY(NOW());
SELECT DATEDIFF('2018-5-2','2018-4-22'); 前面日期减后面日期的天数

星期几

SELECT DAYNAME(NOW());

本月第几天

SELECT DAYOFMONTH('2017-9-4');

1-7:星期天到周六

SELECT DAYOFWEEK(NOW());

今年第几天

SELECT DAYOFYEAR(NOW());

日期格式化:都转化为1990-3-23

SELECT STR_TO_DATE('1990-3/23','%Y-%c/%d');

日期转化为指定字符串

SELECT DATE_FORMAT(NOW(),'%Y年%c月%d日');
其他函数:
SELECT VERSION();
SELECT DATABASE();
SELECT USER();

流程控制函数:
#同三元运算符
SELECT IF(10>11,'大','小');

#case:

一、同switch case
SELECT CASE 'ok'
WHEN 'o' THEN 'o'
WHEN 'o1' THEN 'o1'
WHEN 'o2' THEN 'o2'
ELSE 'ok1'
END AS result;
二、多重if
SELECT CASE
WHEN 1>2 THEN '1>2'
WHEN 2>2 THEN '2>2'
WHEN 3>2 THEN '3>2'
END AS result;

分组函数:用作统计,叫做聚合函数、统计函数、组函数(可distinct去重使用)
sum 求和、avg 平均值、max 最大值、min 最小值、count 计数
sum、avg 支持数值型,忽略null
max、min 支持数值、字符、日期,忽略null
count 计算非空字段行数,忽略null,count(*)(效率较高)、count(1)统计总行数
和分组查询一起查询的字段都是group by 后的字段

分组查询
select 分组函数 from 表 where 筛选条件 group by 分组的字段 order by 子句
分组函数做条件则使用having在group by 之后
分组前筛选效率好即用where
支持按表达式或函数分组(用地少)
按多个字段分组
Oracle不支持group by having

连接查询:多表查询
笛卡尔乘积表一m行,表二n行,结果m*n行
原因:没有有效连接条件
避免:添加有效的连接条件
标准分类
年代分类:
Sql92标准:仅支持内连接
Sql99标准【推荐】:支持所有内连接、外连接(左、右)、交叉连接

92标准:
功能分类:
内连接:
等值连接:结果为多表交集部分,n表连接至少有n-1个,多表顺序随意,可搭配排序分组筛选使用
注意:为表起别名(查询也要用别名(视图))
非等值连接:A表值between B表值1 and B表值2
自连接:同表起别名

99标准:
一、内连接:同上
特点:1、表的顺序可以互换
2、结果为表的连接交集
3、n表连接需要n-1给个连接条件

二、外连接:

特点:1、查询结果为主表中所有行,从表匹配的行或者null
2、left jion左边为主表,right jion 右边为主表,full join两边都是主表
左外连接:select 查询列表 from 表1 as别名 【连接类型】
jion表2 as别名
on 连接条件
where 筛选条件
右外连接:类似左外连接

全外连接:表1有表2没有,表2有表1没有,表1表2都有
mysql暂不支持

三、交叉连接:两表全查
select 表1.,表2. from 表1 cross jion 表2

子查询:查询字表为查询条件
where或having后面:1、标量子查询(结果集只有一行一列)
2、列子查询(多行子查询)
in /not in :在什么范围中的值
any/some:任意一个值
all:所有的值
select 后面(多用):
from后面:查询结果做结果集表,必须起别名
(not)exists后面:子查询有没有值,有为1,否则为0,可用in代替
分页查询:
limit offset,size
offset:起始位置,可省略默认值为0;(page-1)*size
size:查询数量

union联合查询
特点:查询的表没有连接关系但是查询信息(列数、列的类型和顺序)一致,自动去重,不去重用union all查询
查询语句1
union
查询语句2
union
……

你可能感兴趣的:(3-DQL(数据查询语言))