一、MySQL中的DQL语句
DQL主要指的是SELECT语句。SELECT用于检索从一个或多个表中选择的行,并且可以包括UNION操作和子查询。从MySQL 8.0.31开始,也支持INTERSECT和EXCEPT操作。本章主要对SELECT语句的用法进行逐一的介绍,语法如下:
SELECT
[ALL | DISTINCT | DISTINCTROW ]
[HIGH_PRIORITY]
[STRAIGHT_JOIN]
[SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
[SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
select_expr [, select_expr] ...
[into_option]
[FROM table_references
[PARTITION partition_list]]
[WHERE where_condition]
[GROUP BY {col_name | expr | position}, ... [WITH ROLLUP]]
[HAVING where_condition]
[WINDOW window_name AS (window_spec)
[, window_name AS (window_spec)] ...]
[ORDER BY {col_name | expr | position}
[ASC | DESC], ... [WITH ROLLUP]]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
[into_option]
[FOR {UPDATE | SHARE}
[OF tbl_name [, tbl_name] ...]
[NOWAIT | SKIP LOCKED]
| LOCK IN SHARE MODE]
[into_option]
into_option: {
INTO OUTFILE 'file_name'
[CHARACTER SET charset_name]
export_options
| INTO DUMPFILE 'file_name'
| INTO var_name [, var_name] ...
}
- select_expr:包含一个选择列表,可以表示一列或、达式或者*来简写。
二、基础查询操作
1、查询常量
主要包含数字常量和字符串常量:
- 数字常量:select 1
- 字符常量:select ‘abc’
2、查询表达式
例如数字相乘或相加:
- select 2*3
- select 2+3:在MySQL中+号的功能仅仅是一个运算符,其运算有如下规则:
- 如果其中有一项元素为字符,则在做加法运算时会将字符转成数字。
- 如果字符可以转成数字,则做相加。
- 如果字符不可以转数字,则将字符转为0,然后做相加。
- 如果其中一项元素为null,则相加的结果为null,例如SELECT null + 10,结果为null。
3、查询函数
例如查询数据库版本和当前所在的数据库:
- select version()
- select database()
4、查询表
在查询的过程中可以为字段、函数、子查询、表名使用as(也可以不用写)关键字起别名。起别名可以起到如下作用:(1)使用有意义的别名便于理解;(2)对于联合查询如果两个表的字段名相同,可以使用别名进行区分。
三、查询语句的执行顺序
查询中用到的关键词主要包含六个,并且他们的顺序依次为
select、from、where、group by、having、order by 、limit
对于我们书写SELECT语句的的顺序如下:
SELECT DISTINCT
select_list
FROM
left_table join_type
JOIN right_table ON join_condition
WHERE
where_condition
GROUP BY
group_by_list
having
having_condition
ORDER BY
order_by_condition
LIMIT limit_number
而MySQL server按照如下的顺序对SELECT语句进行解析:
FROM left_table
ON join_condition
join_type JOIN right_table
WHERE where_condition
GROUP BY group_by_list
HAVING having_condition
SELECT
DISTINCT select_list
ORDER BY order_by_condition 【asc|desc】
LIMIT limit_number
其中select和from是必须的,关键字的解析如下:
- from: 需要从哪个数据表检索数据
- on: 连接条件
- where: 过滤表中数据的条件
- group by: 如何将上面过滤出的数据分组
- having: 对上面已经分组的数据进行过滤的条件
- select: 查看结果集中的哪个列,或列的计算结果
- order by : 按照什么样的顺序来查看返回的数据,子句中支持单个字段、多个字段、表达式、函数和别名;该语句一般放在最后面(limit的前面);其中asc代表升序,desc代表降序,如果不写默认是升序。
- limit offset,size: offset表示要从哪一行开始,size表示要查多少行数据。
四、条件查询
1、 简单条件运算符:
- “>”
- "< "
- “=”
- “!=”
- “<>”
- " >= "
- “<=“”
2、逻辑运算符:
- &&
- ||
- !
- and
- or
- not
3、模糊查询:
- like:%匹配诺干个元素,可以为0,_匹配一个元素
- between and: 包含临界值
- in:判断某个字段的值是否属于in列表中的某一项
- is null:=或<>不能用于判断null值,is null 或is not null可以判断null值且仅仅可以判断null值
- 安全等于:<=>既可以判断null值,又可以判断普通值
五、MySQL中的常见函数
1、字符函数
(1) length:获取参数值的字节个数
(2)concat:拼接字符串
(3) upper、lower:字符串大小写转换
(4) substr:注意索引从1开始
(5) instr:返回子串第一次出现的索引,如果找不到返回0
(6) trim:
(7)lpad:用指定的字符实现左填充指定长度
(8) rpad:用指定的字符串实现右填充指定长度
(9) replace:替换
2、数学函数
(1)round:四舍五入
(2)ceil:向上取整,返回>=该参数的最小整数
(3)floor:向下取整,返回<=该参数的最大整数
(4)truncate:截断
(5)mod:取余
3、日期函数
(1)now
返回当前系统日期+时间
(2)curdate
返回当前系统日期,不包含时间
(3)curtime
返回当前时间,不包含日期
(4)year:年
(5)month、monthname:月
(6)str_to_date
将日期格式的字符串转换成指定格式的日期;select * from employees where hiredate=str_to_date(‘4-3 1992’, ‘%c-%d %Y’)
(7)date_format
将日期转换成字符; select date_format(now(), ‘%y年%m月%d日’) as out_put
(8)day
(9)hour
(10)minute
(11)second
(12)datediff:
计算两个日期的差值
(13)DATE_ADD
用于在给定的日期或时间上添加指定的时间间隔。
例如:
- 日期添加一天
- 日期添加一小时
- 日期添加一秒
- 当前时间上加1分钟
4、流程控制函数
(1)if函数:if else的效果:select IF(10<5,‘大’,‘小’);
(2)case函数:java中switch case的效果
- 使用方式1
case 要判断的字段或表达式
when 常量1 then 要显示的值1或语句1;
when 常量2 then 要显示的值2或语句2;
...
else 要显示的值n或语句n;
end
- 使用方式2
case
when 条件1 then 要显示的值1或语句1
when 条件2 then 要显示的值2或语句2
...
else 要显示的值n或语句n
end
六、关键字
1、UNION
(1)介绍
UNION 是 SQL 中的一个重要操作符,它允许你将两个或多个 SELECT 语句的结果集合并成一个结果集。使用 UNION 时,每个 SELECT 语句必须拥有相同数量的列,并且这些列的数据类型也需要兼容(尽管列名不必相同,但在结果集中列名将与第一个 SELECT 语句中的列名相同)。此外,UNION 默认会去除重复的行,如果你想要包含重复的行,可以使用 UNION ALL。
(2)UNION 的基本语法
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
或者,如果你想要包含所有结果,包括重复的行:
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;