文章目录
三、DQL语言的学习
SELECT基础知识点
-
SELECT 查询列表 FROM 表名
1)查询列表:表中字段、常量值(‘ ’)、表达式(100%98)、函数(version())
2)查询结果:虚拟表格
3)起别名:
SELECT 原名 as 别名;
SELECT 原名 空格 别名;
(别名:建议加上双引号)4)去重:SELECT DISTINCT 查询列表 FROM 表名;
5)+号的作用:
运算符(操作数为数值型);
如果其中一方为字符型,则字符试图转换为数值型,成功则继续加法运算,否则字符型转换为0;
只要加数一方为NULL,这结果肯定为NULL -
SELECT 查询列表 FROM 表名 WHERE 筛选条件
1)条件运算符:> < = !=(<>) >= <=
2)按逻辑表达式筛选:and or not
3)模糊查询:
-
LIKE:
-
一般与通配符 “ % ” ,“ _ ” 搭配,可以判断字符或数值型数值;
- “ % ”:任意多个字符,“ _ ”:任意单个字符,“ \ ”:转义字符;
- 规定转义字符:ESCAPE ‘ 自定义符号 ’
-
-
BETWEEN AND:
-
字段 BETWEEN X1 AND X2 ;
-
注意事项:包含临界值,X1与X2的数值大小不可以颠倒
-
-
IN:
- 可以将要寻找的字段的值放入()中,用IN进行判断寻找 ;
- IN列表的数值必须 同一类型;
- 不能对带有“%”、“_”的数值进行判断
-
IS NULL:
-
“ = ”不能判断NULL,只能使用IS NULL(同理IS NOT NULL);
-
IS 不等于 “=”
-
-
<=>: 意思为(判断)等于 ; 可以等于NULL和普通的数值
-
WHERE:不支持列别名
SELEC常用函数
-
CONCAT(A,B);
拼接字符;其中用逗号隔开(A、B自动转为字符型)
-
IFNULL (被判断的值,指定输出的值);
判断是否为NULL,如果为NULL则输出指定输出的值,否则输出被判断的值
-
ISNULL();
是则返回1,否则返回0
-
LENGTH();
返回字段字节长度
常见函数
方法:SELECT 函数名(实参列表)【from 表】;
单行函数
字符函数
-
LENGTH();
获取参数值的字节个数(gbk汉字两字节,utf-8三字节) -
CONCAT(,);
拼接字符串 -
GROUP_CONCAT( 【DISTINCT】字段 【ORDER BY 字段 】【SEPARATOR ’ 分隔符 '】) ;
将group by产生的同一个分组中的值连接起来,返回一个字符串结果 -
UPPER();
变大写 -
LOWER();
变小写 -
SUBSTR(字段(字符串),起始索引,【截取长度】);
截取字符,索引从1开始;截取长度默认为从起始索引开始的整个字段 -
INSTR(x字段(字符串),y字段(字符串));
返会y在x中的起始索引(第一次出现),如果找不到返回0 -
TRIM(【A FROM 字段(字符串)】);
无参数清除字段(字符串)的首尾空格符;添加【】内容后,清除字段中的A内容 -
LPAD(字段(字符串),指定长度,填充符号); RPAD();
用指定的字符实现左(右)填充指定长度 -
REPLACE(A,B);
A被B替换
数学函数
- ROUND(【A,B】);
无参四舍五入(不管正负);【A,B】B为A要保留的小数点位数 - CEIL();
向上取整,返回大于等于该参数的最小整数 - FLOOR();
向下取整,返回小于等于该参数的最大整数 - TRUNCATE(A,B);
截断;使A保留小数点后B位 - MOD();
取余;余数正负与被除数相同 - RAND();
返回0-1之间的小数
日期函数
-
NOW();
返回当前系统日期+时间 -
CURDATE();
只返回当前系统日期 -
CURTIME();
只返回当前系统时间 -
YEAR();MONTH();DATY();
HOUR();MINUTE();SECOND();
年月日分秒;
MONTHNAME()为月英文 -
DATEDIFF(日期类型A,日期类型B);
返回A和B的日期差值 -
STR_TO_DATE(,);
将日期格式的字符转换成指定格式的日期;
SA:STR_TO_DATE(‘4-6-2022’,‘%m-%d-%Y’)->输出2022-04-06 -
DATE_FORMAT(,);
将日期转换成字符(与STR_TO_ADTE作用相反)
序号 | 格式符 | 功能 |
---|---|---|
1 | %Y | 四位的年份 |
2 | %y | 两位的年份 |
3 | %m | 月份(01,02,…11,12) |
4 | %c | 月份(1,2,…11,12) |
5 | %d | 日(01,02,…) |
6 | %H | 小时(24小时制) |
7 | %h | 小时(12小时制) |
8 | %i | 分钟(00,01,…59) |
9 | %s | 秒(00,01,…59) |
其他函数
-
VERSION(); 查看版本号
-
DATABASE();查看当前数据库名称
-
USER(); 查看当前用户
-
PASSWORD(‘字符’);MD5(‘字符’);返回该字符的加密型式
流程控制函数
-
IF(表达式1,表达式2,表达式3);
如果表达式1成立, 则IF函数返回表达式2的值, 否则返回表达式3的值
-
CASE
-
CASE 变量、字段或者表达式
WHEN 常量1 THEN 要显示的值1或(语句1;)
WHEN 常量2 THEN 要显示的值2或(语句2;)
…
ELSE 要显示的值n或(语句n;)(可省略)
END(语句时使用END CASE);
(等值判断)
-
CASE
WHEN 条件1 THEN 要显示的值1或(语句1;)
WHEN 条件2 THEN 要显示的值2或(语句2;)
…
ELSE 要显示的值n或(语句n;)(可省略)
END(语句时使用END CASE);
(条件判断)
-
分组函数
-
SUM();求和;只能对数值型作用
-
AVG();求平均值;只能对数值型作用
-
MIN();求最小值;对可以排序(比较)的字段(字符串)进行作用
-
MAX();求最大值;同MIN
-
COUNT();
统计个数;支持任何类型;
COUNT(*)统计元组个数;
COUNT(1)赋予一列1统计元组个数;以上所有分组函数都支持DISTINCT且忽略NULL,要求与GROUP BY配合
常用查询
排序查询
-
ORDER BY()F;
F = DESC 降序,F = ASC 升序(默认升序);
可以根据单、多字段,表达式、函数、别名进行排序
分组查询
-
GROUP BY 字段(函数、表达式);
按字段(函数、表达式)分组;
在分组前进行筛选,搭配WHERE(不可使用分组函数);
在分组后进行筛选,搭配HAVING(可使用分组函数);
连接查询
(为表起别名,可搭配分组、筛选、排序)
SQL92语法
-
等值连接(交集)
连接条件:表1.id = 表2.id;
-
非等值连接
连接条件:表1.id # 表2.id;
‘ # ’部分可替换为:> < = >= <= BETWEEN AND -
自连接
一表作两表用(起别名区分),找到对应关系连接
SQL99语法
FROM 表1【别名】连接类型 JOIN 表2【别名】
ON 连接条件(WHERE\GROUP BY\HAVING\ORDER BY)
-
内连接:【INNER】
-
外连接:
内连接结果+主表中有而从表中没有的记录;
无记录则返回NULL -
左外连接:LEFT 【OUTER】;左主表
-
右外连接:RIGHT 【OUTER】;右主表
-
全外连接:FULL 【OUTER】;表1有表2无+表2有表1无
-
交叉连接:两表的笛卡尔积
子查询
(出现在其他语句中的SELECT语句,称为子查询或内查询)
-
标量子查询(一行一列)
-
列子查询L(一列多行)
操作符 含义 IN / NOT IN 等于列表中的任意一个 ANY / SOME 和子查询返回的某一个值比较 ALL 和子查询返回的所有值比较 -
行子查询(一行多列)
-
表子查询(一般为多行多列)
子查询放在小括号内;子查询一般放在条件的右侧
注意:
SELECT仅仅支持标量子查询;FROM支持表子查询;
WHERE和HAVING支持标、列、行子查询;
EXISTS支持全部
分页查询
-
SELECT 查询列表 FROM 表 【…】LIMIT 【offset,】size;
offset:显示条目的起始索引(默认从0开始,可省略);
size:要显示的条目个数;
-
SELECT 查询列表 FROM 表 【…】
LIMIT 显示的条目数 OFFSET 起始索引;
分页查询通式 = LIMIT (page-1)*size,size;
放在查询语句的最后
联合查询
-
UNION
查询结果来自多表;
查询信息一致(列相同、查询字段信息类型相对应);
默认去重(UNION+ALL可包含重复项)