简单查询

前面我们学习了数据库的创建,选择,删除语句,表达的创建,修改,和删除语句。以及一些简单的查询和插入记录的语句。但这些都只是空架子。真正数据库的操作在于如何查询数据,所以我们这里开始学习数据库的各种查找操作。

准备工作:

首先我们要查询数据,首先就要要求表中有数据,我们把之前创建的student_info和student_score插入数据。

mysql> select * from student_info;
+-----------+------+------+-----------+---------------------+-------+-----------------+
| number    | name | sex  | id_number | department          | major | enrollment_time |
+-----------+------+------+-----------+---------------------+-------+-----------------+
| 220101101 | 一花 | 女   | 123456789 | school of computing | jike  | 2022-09-01      |
| 220101102 | 二乃 | 女   | 123456788 | school of computing | jike  | 2022-09-01      |
| 220101103 | 三玖 | 女   | 123456787 | school of computing | jike  | 2022-09-01      |
| 220101104 | 四叶 | 女   | 123456786 | school of computing | jike  | 2022-09-01      |
| 220101105 | 五月 | 女   | 123456785 | school of computing | jike  | 2022-09-01      |
+-----------+------+------+-----------+---------------------+-------+-----------------+
5 rows in set (0.01 sec)

mysql> select * from student_score;
+-----------+--------------------+-------+
| number    | subject            | score |
+-----------+--------------------+-------+
| 220101101 | 计算机是怎样运行的 |    78 |
| 220101102 | 计算机是怎样运行的 |    79 |
| 220101103 | 计算机是怎样运行的 |    78 |
| 220101104 | 计算机是怎样运行的 |    77 |
| 220101105 | 计算机是怎样运行的 |    77 |
+-----------+--------------------+-------+
5 rows in set (0.00 sec)

查询单个列:

语法:select 列名 from 表名;

这个语句其实分为两部分:
select子句和from子句

mysql> select name from student_info;
+------+
| name |
+------+
| 一花 |
| 二乃 |
| 三玖 |
| 四叶 |
| 五月 |
+------+
5 rows in set (0.00 sec)

可以看到查询结果把那一列都展示了出来,我们可以把查询结果称为结果集。

列的别名:我们也可以为结果集中的列重新定义一个别名,这里的别名只是在本次查询到的结果集中展示。并不会改变真实表中的列名。在下次查询中,也可以对列取别的别名。

方式1:select 列名 as 别名 from 表名

方式2:select 列名 别名 from 表名

也就是说这个as可有可无

 查询多个列:

语法:select 列名1, 列名2, 列名3, ......列名n from 表名;

select后面跟随的叫查询列表。我们查询的列名可以随意调换顺序,结果集将按照摆放顺序呈现。

同样我们在select 列名 的时候可以给列名取别名。

查询所有列:如果需要查询所有列,就直接用(*)来表示要查询的东西(之前就介绍过)这里就不说了。

查询结果去重:

去单列的重复结果:我们在查询一列的记录的时候,可能会出现同一种记录,有多条的情况。如果需要去掉重复的我们可以这样做:
select distinct 列名  from 表名;

mysql> select distinct subject from student_score;
+--------------------+
| subject            |
+--------------------+
| 计算机是怎样运行的 |
+--------------------+
1 row in set (0.00 sec)

去除多列的重复结果:同样和查询多个列一样,不过是在众列名前加了个distinct。像这样:
select distinct 列名1, 列名2, ......列名n from表名;

mysql> select distinct subject, score 成绩 from student_score;
+--------------------+------+
| subject            | 成绩 |
+--------------------+------+
| 计算机是怎样运行的 |   78 |
| 计算机是怎样运行的 |   79 |
| 计算机是怎样运行的 |   77 |
+--------------------+------+
3 rows in set (0.00 sec)

限制结果集记录条数:有时候结果集的条数特别多,我们只需要显示一部分的时候,我们就可以用这个语句:limit 限制条数

同样在查询语句的基础上进行添加修改就行:select 列名 from 表名 limit 限制数。

这里的限制数所呈现的条数是从原本的结果集的第一条开始计数,直到限制数的条数。

如果不想从第一条开始展示,想从第二条呢。那这个limit语句又要加上一个偏移量的参数;

limit 偏移量, 限制条数。

也就是这个样:select 列名 from 表名 limit 偏移量, 限制条数;

mysql> select score from student_score limit 3;
+-------+
| score |
+-------+
|    78 |
|    79 |
|    78 |
+-------+
3 rows in set (0.00 sec)

mysql> select score from student_score limit 1, 3;
+-------+
| score |
+-------+
|    79 |
|    78 |
|    77 |
+-------+
3 rows in set (0.00 sec)

对查询结果排序:

按照单个列的值进行排序:

用于指定结果集记录的排序规则的order by子句的语法如下:

order by 列名 【asc/desc】;

其中asc和desc指的是排序方向。asc是指按照指定列的值进行由小到大的排序,也就是升序。desc就是降序的意思。如果列名后都不填写,就自动默认是asc。

因此order by 列名 asc和oder by 列名是等价的。

写法也就是在查询语句上进行添加:select * from 表名 order by score;

mysql> select * from student_score order by score;
+-----------+--------------------+-------+
| number    | subject            | score |
+-----------+--------------------+-------+
| 220101104 | 计算机是怎样运行的 |    77 |
| 220101105 | 计算机是怎样运行的 |    77 |
| 220101101 | 计算机是怎样运行的 |    78 |
| 220101103 | 计算机是怎样运行的 |    78 |
| 220101102 | 计算机是怎样运行的 |    79 |
+-----------+--------------------+-------+
5 rows in set (0.00 sec)

按照多个列的值进行排序:order by 列1【asc/desc】, 列2【asc/desc】......

也就是这样select 列名 from 表名 order by 列名1【asc/desc】, 列名2【asc/desc】;

//字符也可以比较大小,先比第一个,第一个大的就大,相同再比第二个,以此类推。

我们其实可以把多种的语句进行结合,比如limit语句和order by语句结合,就可以轻松的得到最大值或者说什么特殊值。 

mysql> select * from student_score order by score desc limit 1;
+-----------+--------------------+-------+
| number    | subject            | score |
+-----------+--------------------+-------+
| 220101102 | 计算机是怎样运行的 |    79 |
+-----------+--------------------+-------+
1 row in set (0.00 sec)

你可能感兴趣的:(MySQL的学习,数据库,sql,mysql)