目录
一、全列查询
二、指定列查询
三、查询的字段为表达式
四、别名查询
五、去重查询:DISTINCT
六、排序查询:ORDER BY
七、条件查询:WHERE
注意:
范例:
1、基本查询
2、AND 与 OR
3、BETWEEN … AND …
4、IN
5、模糊查询:LIKE
6、NULL 的查询:IS (NULL | NOT) NULL
八、分页查询:LIMIT
九、聚合查询
1、聚合函数
范例:
1、COUNT
2、SUM
3、AVG
4、MAX
5、MIN
2、GROUP BY 子句
范例:
3、HAVING
十、联合查询(多表查询)
1、内连接
语法:
案例:
在这边可能会遇到group by 出现以下报错:
解决方案:
2、外连接
语法:
案例:
3、自连接
案例:
十一、子查询(嵌套查询)
案例:
[ NOT ] IN 关键字:
[ NOT ] EXISTS 关键字:
十二、合并查询
1、UNION
2、UNION ALL
一、全列查询
SELECT *FROM table_name;
二、指定列查询
SELECT id,name FROM table_name;
-----------------------------------------------------
指定元素的顺序不需要按定义表的顺序来
三、查询的字段为表达式
表达式不包含字段: SELECT id,10 FROM table_name;
表达式包含一个字段:SELECT id , id+10 FROM table_name;
表达式包含多个字段:SELECT id , class, id + class FROM table_name;
四、别名查询
SELECT id , name 别名 FROM table_name;
五、去重查询:DISTINCT
例如一个表显示如下:
—————其中 80 分重复了—————
我们对其进行去重查询:
SELECT DISTINCT english FROM table_name;
结果为:
六、排序查询:ORDER BY
格式:
SELECT … FROM table_name ORDER BY … [ASC | DESC];
—————————————————————————————
—— ASC 为升序(从小到大) ——
—— DESC 为降序(从大到小) ——
—— 默认情况下为ASC ——
注意:
1、没有 ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖返回的顺序。
2、NULL 数据排序,视为比任何值都小,升序出现在最上面,降序出现在最下面。
3、可以对多个字段进行排序,排序优先级为字段的书写顺序。
七、条件查询:WHERE
比较运算符:
逻辑运算符:
注意:
1、WHERE 可以使用表达式,但是不能使用别名。
2、AND 的优先级高于 OR,在同时使用时,需要用小括号 () 包裹要优先执行的部分。
范例:
1、基本查询
—— 查询成年的同学的姓名 (age >= 18)——
—— 查询分数不及格的同学的信息 (garde < 60)——
2、AND 与 OR
—— 查询未成年且不及格的同学的信息 (age < 18 AND garde < 60)——
—— 查询未成年或不及格的同学的信息 (age < 18 OR garde < 60)——
3、BETWEEN … AND …
—— 查询分数在 80 - 90 的同学的信息 ( [80,90] )——
4、IN
—— 查询分数为80,90 的同学的信息 ( 80,90 )——
5、模糊查询:LIKE
% 匹配任意多个任意字符
SELECT name FROM table_name WHERE name LIKE '张%' ;
(张三、张二三、张 都可以被匹配)
_ 匹配严格的一个任意字符
SELECT name FROM table_name WHERE name LIKE '张_' ;
(只能匹配张三,不能匹配 张二三、张)
6、NULL 的查询:IS (NULL | NOT) NULL
查询名字为空的同学的信息:
SELECT name FROM table_name WHERE name IS NULL;查询名字不为空的同学的信息:
SELECT name FROM table_name WHERE name IS NOT NULL;
八、分页查询:LIMIT
语法:
—— 起始下标为0
—— 从0开始,筛选N条结果
SELECT … FROM table_name [WHERE …] [ORDER BY] LIMIT N;
—— 从X开始,筛选N条结果
SELECT … FROM table_name [WHERE …] [ORDER BY] LIMIT X , N;
—— 从X开始,筛选N条结果
SELECT … FROM table_name [WHERE …] [ORDER BY] LIMIT X OFFSET N;
注意:加了OFFSET 的筛选方式会比没加的更加精准。
(不加OFFSET 就是默认 OFFSET 0,OFFSET 后跟着的就相当于数组中的下标,从下标位置往后查找N个数。)
九、聚合查询
1、聚合函数
常见的统计总数,计算平均值等操作,可以使用聚合函数来实现。常见的聚合函数有:
范例:
1、COUNT
———— 统计班级有多少名同学 ————
———— 统计班级语文成绩不为null的有几个 ————
·所有聚合函数中只有 COUNT 可以使用 ‘ * ’
·COUNT 查询到为 NULL 的不会计入结果
2、SUM
———— 统计班级语文成绩的总分 ————
如果统计的结果为空,则会返回NULL
———— 统计语文满分的总分 ————
3、AVG
———— 统计平均总分 ————
4、MAX
———— 返回最高的总分 ————
5、MIN
———— 返回最低的总分 ————
2、GROUP BY 子句
SELECT 中使用 GROUP BY 子句可以对指定列进行分组查询。
需要满足:
使用 GROUP BY 进行分组查询时,SELECT 指定的字段必须是 “分组依据字段” ,其他字段若想出现在 SELECT 中,必须包含在聚合函数中。
范例:
查询每个职位的最高工资、最低工资以及平均工资。
3、HAVING
GROUP BY 子句进行分组以后,需要对分组结果再进行条件过滤时,不能再使用 WHERE 语句,而要使用 HAVING。
范例:
查询平均工资低于 100000 的职位,以及它的平均工资。
十、联合查询(多表查询)
要查询的数据可能来自不同的表,所以需要多表联合查询。多表查询是对多张表的数据提取笛卡尔积:
给出三张表格,分别是学生信息表、课程信息表 与 成绩信息表。
1、内连接
语法:
SELECT 字段 from 表1 别名1 [ inner ] join 表2 别名2 on 连接条件 and 其他条件;
SELECT 字段 from 表1 别名1 , 表2 别名2 where 连接条件 and 其他条件;
注意:关联查询可以对关联表使用别名。
案例:
1、查询张三的成绩(双表联合)
如果要查询张三的成绩,我们就需要联合 学生信息表 与 成绩信息表 来进行查询。此时可以利用两个表的相关联信息 id,来进行学生与成绩的一一对应,而后再指定学生姓名为 ‘张三’ ,即可完成查询。
2、查询所有同学的总成绩以及个人信息(双表联合)
要查询所有同学的总成绩以及个人信息,就需要联合 学生信息表 与 成绩信息表 来进行查询。且需要对每个同学的成绩进行分组查询,而后进行相加求总成绩。
在这边可能会遇到group by 出现以下报错:
Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ……
解决方案:
http://t.csdnimg.cn/vMSFw
3、查询所有同学的各科成绩,及同学的个人信息(三表联合)
需要查询个人信息,就需要使用到 student 表;要查询所有同学的各科成绩,需要联合 课程信息表 与 成绩信息表,以课程号为连接介质,以 成绩信息表为主体。
2、外连接
外连接分为 左外连接 和 右外连接。如果联合查询,左侧的表完全显示,我们就称其为 左外连接;如果右侧的表完全显示,我们就称其为 右外连接。
语法:
———— 左外连接————
SELECT 字段名 from 表1 left join 表2 on 连接条件;
———— 右外连接————
SELECT 字段名 from 表1 right join 表2 on 连接条件;
案例:
我们先给表中添加一位没有成绩信息的同学:
左外连接查询所有同学的成绩及个人信息,如果该同学没有成绩,也需要显示。
右外连接查询所有同学的成绩及个人信息,如果该同学没有成绩,则不用显示。
3、自连接
自连接是指在同一张表连接自身进行查询。
案例:
显示 ‘ 语文 ’ 成绩比 ‘ 数学 ’ 成绩高的成绩信息。
1、首先需要查询到这两个科目对应的 id 信息
2、在score表中查询 语文成绩 比 数学成绩 好的成绩信息
也可以使用 join on 语句来实现:
十一、子查询(嵌套查询)
子查询是指嵌入在其他 sql 语句中的 select 语句,也叫嵌套查询。
案例:
查询和 ‘ 张三 ’ 同班的同学
[ NOT ] IN 关键字:
IN 指包含在子查询语句条件中的数据,NOT IN 就是不包含在子查询语句条件中的数据。
[ NOT ] EXISTS 关键字:
EXISTS 语句在使用时,括号外的数据在每一次查询时都会查看EXISTS的条件语句,相符才会输出。NOT EXISTS 就是与 EXISTS 相反的意思,都不符合,才能输出。
查找“ 语文 ” 课程的成绩信息:
查找“ 语文 ” 课程以外的成绩信息:
十二、合并查询
在实际应用中,为了合并多个 select 的执行结果,可以使用 union,union all。使用 UNION 和 UNION ALL 时,前后查询的结果集中,字段需要一致。
1、UNION
该操作符用于取得两个结果集的 并集 。当使用该操作符时,会自动去除重复行。
案例:查询 课程id 小于3,或者名字为“数学”的课程:
2、UNION ALL
该操作符用于取得两个结果集的 并集 。当使用该操作符时,不会自动去除重复行。
案例:查询 课程id 小于3,或者名字为“数学”的课程:
根据两个例子,我们能很轻松的看出二者的区别~
以上就是 MySQL各类查询汇总(源码+解析 超详解!!!) 的全部内容了,希望能对您有所帮助!