MySQL查询基础
2024-03-01 16:39:47 0 举报
AI智能生成
MySQL查询基础是MySQL数据库操作的重要组成部分,它涵盖了查询、更新、删除和插入等操作。要执行查询,可以使用SELECT语句,通过WHERE子句筛选记录,使用ORDER BY子句对结果进行排序,以及使用LIMIT子句限制结果的数量。UPDATE语句用于更新表中的数据,DELETE语句用于删除表中的记录,而INSERT语句用于插入新记录。此外,还可以使用联接(JOIN)将多个表中的数据合并成一个结果集。了解MySQL查询基础对于有效地管理和操作数据库非常重要。
作者其他创作
大纲/内容
基本查询语句
注意细节
1、注意语法顺序
注意语句执行顺序
2、关键字有特殊定义,尽量避免随意使用
3、不区分大小写
4、可以换行输入
select * from 表名
SELECT中可以使用各种能够输出数值的元素,比如算式、函数、常量等,创建字段
select distinct 字段 from 表名
distinct的含义是结果中每条记录独一无二
order by
按...排序,默认升序
DESC,降序
每个字段后面都可以使用DESC改为指定为降序
可以用结果中的序号代替列名
limit子句
限定结果数量
limit n offset m
在查询结果中,跳过前面m行,然后再取出n行输入作为最终结果
不同数据库,可能没有limit
where
筛选条件
比较运算符
字符串必须用单引号
where必须在From后面,且在Order By的前面
WHERE 可以用逻辑运算符实现多条件筛选
NULL值处理
判断字段是否为NULL,不能使用等号=,应当使用 IS NULL
逻辑运算符
and
or
not
in
x in (a,b,c)
只要x的值等于括号中的任何一项,即视为符合条件
模糊查找
like 与通配符
%:在与like搭配使用时,代表任意多个任意字符
_:下划线,在与like搭配使用时,代表一个任意字符;
计算字段的应用
在WHERE中使用计算字段可能降低查询效率
只要x的值等于括号中的任何一项,即视为符合条件
在SELECT后面写计算字段,相当于在结果中增加原表中没有的自定义列
AS:对SELECT的任何字段(包括自定义列)起别名
不能在SELECT或WHERE中直接引用别名进行计算
系统函数
concat
字符串连接
......
处理日期和时间
DATETIME类型
日期+时间
BETWEEN:用于区间判断
在SQL语句中书写具体日期时间数值,必须用单引号括起来
时间函数
DATEDIF:只能用于计算天数间隔
分组与统计
聚合函数
count
count(列名)
不包含NULL值的个数
即会忽略NULL
count(*)
包含NULL值的个数
常用聚合函数
SUM
AVG
MAX
MIN
聚合函数中可以使用DISTRICT,从而在统计之前,先排除重复值
DISTRICT要写在函数的括号内、字段名之前
GROUP BY子句
可以使用聚合函数,对每一组数据分别统计
GROUP BY必须用在ORDER BY的前面,WHERE的后面
GROUP BY的分组依据可以是计算字段
不能使用COUNT, SUM等聚合函数作为分组依据
先分组后统计
多层分组
GROUP BY 依据1,依据2
如果分组时发现NULL值,则NULL值的记录单列一组
NULL与任何数字比较的结果,都是NULL,不会是TRUE或FALSE
而 If 关键字规定:如果比较结果是 NULL ,则结果为FALSE
根据标准SQL语法,只有出现在GROUP BY 中的字段才能放入SELECT
按组筛选
分组查询必须注意
1.WHERE子句必须写在GROUP BY之前
2.WHERE不允许使用聚合统计函数
3.用HAVING筛选分组
总结
WHERE
对全部原始数据进行一次筛选
GROUP BY
对一次筛选后的数据分组统计
HAVING
选出符合条件的分组作为结果
子查询与多表连接
非关联子查询
执行顺序:先内后外
子查询可以多层嵌套
不同层的查询语句,可以使用同一张表
关联子查询
执行顺序:先外后内
外层找到一条记录,就执行一次子查询
关联时,需要用全名或别名(用AS起别名)
表连接
关系型数据库
...JOIN...ON
ON 可以用逻辑运算符实现多字段连接
如果没有 ON ,会得到笛卡尔积结果
CROSS JOIN
完全连接,也是得到笛卡儿尔积结果
内连接
INNER JOIN
内连接的简化写法:使用 逗号 代表 JOIN,WHERE 代表 ON
1.每个 INNER JOIN 只能连接两张表
2.多次 INNER JOIN 可以连接多张表
3.过多连接会影响性能,一般不超过3层
外连接
左连接
LEFT JOIN
右连接
RIGHT JOIN
全外连接
MySQL不支持
联合
UNION
联合两个查询语句
两个查询结果中的字段数目、位置和类型必须相同
如果两个查询结果中有重叠,UNION之后会去除重复,只保留其中一个。使用 UNION ALL,可以不去除重复,保留两个结果的全部内容
UNION ALL
同名字段,用 表名.字段名 加以区分
使用AS给每个原始表起别名
常用关键字
IF ( 字段x IS NULL,a,字段x )
IFNULL(字段x,a)
CASE
多条件判断
CASE
WHEN 情景1 THEN A
WHEN 情景2 THEN B
WHEN 情景3 THEN C
ELSE D
END
WHEN 情景1 THEN A
WHEN 情景2 THEN B
WHEN 情景3 THEN C
ELSE D
END
ISNULL
执行顺序很重要
1、FROM
2、WHERE
3、GROUP BY
4、HAVING
5、SELECT
6、ORDER BY
7、LIMIT
常见面试题型与复杂查询的设计
复杂查询的一般思路
1、发现特殊词、划分题目类型
2、层层确定关键字,厘清数据来源
名词+修饰语
3、识别缺失值,找出解决方案
各种SQL函数
分组统计
子查询
CASE函数
4、明确先后因果,整合查询方案
5、复核查询结果,确认细节疏漏
用表连接代替子查询
过多子查询不利于优化,且影响性能
exam AS A INNER JOIN exam AS B
ON...
把WHERE条件写到ON中,在连接之前先做筛选
比较问题
1、找到要比较的两个数据
2、确定两个数据的来源表
3、对两个数据表执行连接
4、指定连接和筛选的条件
第N值
用子查询和COUNT确认排名
完整性问题
计数、否定与连接
计数法
使用COUNT函数,判断某类型记录的出现次数是否等于最大可能次数。是,则代表全部
否定排除法
NOT IN
排除不符合条件的全部记录,所得结果就是符合条件的要求
连接法
使用 CROSS JOIN 和 LEFT JOIN ,可以全面覆盖不存在右表的记录
转置问题
巧用 CASE 判断结构
排名问题
子查询
窗口函数
排序函数
聚合函数
创建、插入、删除与修改
0 条评论
下一页