MySQL-查询表数据&函数

这篇博客详细介绍了MySQL的查询语法,包括SELECT主查询、联合查询、子查询(IN, EXISTS, ANY, ALL)、BETWEEN AND、LIKE通配符、空值查询、多条件查询以及ORDER BY和GROUP BY的使用。还讲解了LIMIT分页查询、聚合函数以及表的联合查询操作。通过示例和解释,帮助读者掌握MySQL查询的各种方法。" 107340982,7784545,在Git中修改初始提交,"['git', 'git-rebase', 'git-commit', 'git-rewrite-history', 'amend']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

查询语法:

select 主查询,主要查询语句都需要它

select 属性列表 from 表名 [ where 条件表达式1]
[group by 属性名 [ Having 条件表达式2]] ->分组
[order by 属性名 [ASC|DESC]] ->排序

*表示查询全部属性

示例:
// 全部属性
mysql> select * from Student;
+-----+-------+------+------+
| SID | Sname | Sage | Ssex |
+-----+-------+------+------+
|   1 | 赵雷  |   20 ||
|   2 | 钱电  |   20 ||
|   3 | 孙风  |   21 ||
|   4 | 吴兰  |   18 ||
|   5 | 孙兰  |   17 ||
+-----+-------+------+------+
5 rows in set (0.05 sec)

//指定属性
mysql> select SID,Sname from Student;
+-----+-------+
| SID | Sname |
+-----+-------+
|   1 | 赵雷  |
|   2 | 钱电  |
|   3 | 孙风  |
|   4 | 吴兰  |
|   5 | 孙兰  |
+-----+-------+
5 rows in set (0.00 sec)
合并查询结果:

union(联合) 关键字和 union all关键字都可以合并查询结果,但是两者有一点区别,union关键字合并查询结果时,需要将相同的记录消除掉。而union all关键字则相反,不会消除相同的记录,而是将所有的记录合并在一起。

mysql> select SID from Student union select SID from SC;
+------+
| SID  |
+------+
|    4 |
|    5 |
|    3 |
|    1 |
|    2 |
|    6 |
+------+
6 rows in set (0.00 sec)

mysql> select SID from Student union  all select SID from SC;
+------+
| SID  |
+------+
|    4 |
|    5 |
|    3 |
|    1 |
|    2 |
|    1 |
|    1 |
|    1 |
|    2 |
|    2 |
|    2 |
|    3 |
|    3 |
|    3 |
|    4 |
|    4 |
|    4 |
|    5 |
|    5 |
|    6 |
+------+
20 rows in set (0.04 sec)

子查询
in:

in(元素1,元素2…) 包含括号里面元素的列表,
not in(元素1,元素2…)不包含括号里面元素里面的列表

示例:
mysql> select * from Student where SID in(1,3,4);
+-----+-------+------+------+
| SID | Sname | Sage | Ssex |
+-----+-------+------+------+
|   1 | 赵雷  |   20 ||
|   3 | 孙风  |   21 ||
|   4 | 吴兰  |   18 ||
+-----+-------+------+------+
3 rows in set (0.04 sec)

//不包括
mysql> select * from Student where SID not in(1,3,4);
+-----+-------+------+------+
| SID | Sname | Sage | Ssex |
+-----+-------+------+------+
|   2 | 钱电  |   20 ||
|   5 | 孙兰  |   17 ||
+-----+-------+------+------+
2 rows in set (0.00 sec)
带比较运算符的子查询
select * from SC where SID=(select SID from Student where Sage=20);
带exists关键字的子查询

exists关键字表示存在。使用exists关键字时,内层查询语句不返回查询的记录。而是返回一个真假值。如果内层查询语句查询到满足条件的记录,就返回一个真值,否则返回一个假值。当返回的值为true时,外层查询语句将进行查询,当返回为false时,外层语句不进行查询或者查询不出记录。

mysql> select * from SC where exists(select * from Student where SID=10);
Empty set (0.00 sec)

mysql> select * from SC where exists(select * from Student where SID=1);
+------+------+-------+
| SID  | CID  | score |
+------+------+-------+
|    1 |    1 |    80 |
|    1 |    2 |    71 |
|    1 |    3 |    87 |
|    2 |    1 |    88 |
|    2 |    2 |    70 |
|    2 |    3 |    89 |
|    3 |    1 |    68 |
|    3 |    2 |    78 |
|    3 |    3 |    87 |
|    4 |    1 |    67 |
|    4 |    2 |    58 |
|    4 |    3 |    89 |
|    5 |    1 |    56 |
|    5 |    2 |    89 |
|    6 |    3 |    38 |
+------+------+-------+
15 rows in set (0.00 sec)
带any关键字的子查询:

any关键字表示满足其中任何一个条件,使用any关键字时,只要满足内层查询语句返回结果中的任何一个,就可以通过该条件来执行外层查询语句。
any通常与比较运算符一起使用 如>ANY 表示大于任何一个值,=any表示等于任何一个值

//只要内层返回的结果中,有一个能满足外层的条件,那么内层返回的所有结果都会被显示。
mysql> select * from Course;
+-----+-------+------+
| CID | Cname | TID  |
+-----+-------+------+
|   1 | 语文  |    2 |
|   2 | 数学  |    1 |
|   3 | 英语  |    3 |
+-----+-------+------+
3 rows in set (0.05 sec)

mysql> select * from Teacher;
+-----+-------+
| TID | Tname |
+-----+-------+
|   1 | 张三  |
|   2 | 李四  |
|   3 | 王五  |
+-----+-------+
3 rows in set (0.05 sec)

mysql> select * from Course where TID>any(select TID from Teacher where TID>=!<2);
+-----+-------+------+
| CID | Cname | TID  |
+-----+-------+------+
|   1 | 语文  |    2 |
|   3 | 英语  |    3 |
+-----+-------+------+
2 rows in set (0.00 sec)
带all关键字的子查询:

all关键字表示满足所有条件。使用all关键字时,只有满足内层查询语句返回的所有结果,才能执行外层查询语句。all关键字也可以与比较运算符一起使用。

//通俗来说过,内层返回的结果,只有满足外层的条件才可以
mysql> select * from Course where TID>all(select TID from Teacher where TID>=!<2);
Empty set (0.00 sec)

mysql> select * from Course where TID>all(select TID from Teacher where TID=2);
+-----+-------+------+
| CID | Cname | TID  |
+-----+-------+------+
|   3 | 英语  |    3 |
+-----+-------+------+
1 row 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值