MySQL讲义第19讲—— select 查询之 select 语法

MySQL讲义第19讲——select 查询之 select 语法

MySQL 使用 SELECT 语句查询数据。查询数据是指从数据库中根据需求,使用不同的查询方式来获取不同的数据,是 MySQL 中最重要的操作。

一、SELECT 语句的语法

SELECT DISTINCT
    <字段或表达式列表>
FROM
    <表名> <连接类型>
JOIN <表名> ON <连接条件>
WHERE
    <筛选条件>
GROUP BY
    <分组字段列表>
HAVING
    <分组筛选条件>
ORDER BY
    <排序字段>
LIMIT <m,n>

二、SELECT 语句各部分的说明

1DISTINCT:消除重复行。
2<字段或表达式列表>:表示所要查询字段的名称,可以使用(*)表示所有字段。
3<连接类型>:可以使用 innerleftright 分别表示内连接,左连接,右连接。
4<连接条件>:一般使用两个表的共同字段进行构造连接条件。
5<筛选条件>:限定查询数据必须满足该查询条件。
6<分组字段列表>:按照指定的字段分组。
7<分组筛选条件>:对分组进行筛选。
8<排序字段>:对查询结果进行排序,可以进行升序(ASC)和降序(DESC)排列,默认是升序。
9LIMIT <m,n>:分页显示数据。

三、查询数据准备

创建四张表(dept、stu、course、score)并插入数据,后续文章中查询的举例会使用到这些表中的数据。表结构及数据如下:

--//
--    dept表    
--//
mysql> desc dept;
+-----------+----------+------+-----+---------+-------+
| Field     | Type     | Null | Key | Default | Extra |
+-----------+----------+------+-----+---------+-------+
| dept_id   | char(3)  | NO   | PRI | NULL    |       |
| dept_name | char(20) | YES  |     | NULL    |       |
+-----------+----------+------+-----+---------+-------+
2 rows in set (0.01 sec)

mysql> select * from dept;
+---------+--------------+
| dept_id | dept_name    |
+---------+--------------+
| D01     | 管理系       |
| D02     | 计算机系     |
| D03     | 数学系       |
| D04     | 法律系       |
| D05     | 艺术系       |
+---------+--------------+
5 rows in set (0.00 sec)
--//
--    stu表    /
--//
mysql> desc stu;
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| stu_id   | char(9)      | NO   | PRI | NULL    |       |
| stu_name | char(20)     | YES  |     | NULL    |       |
| gender   | char(4)      | YES  |     | NULL    |       |
| birth    | datetime     | YES  |     | NULL    |       |
| height   | decimal(4,1) | YES  |     | NULL    |       |
| phone    | char(11)     | YES  |     | NULL    |       |
| dept_id  | char(3)      | YES  | MUL | NULL    |       |
+----------+--------------+------+-----+---------+-------+
7 rows in set (0.01 sec)

mysql> select * from stu;
+-----------+-----------+--------+---------------------+--------+-------------+---------+
| stu_id    | stu_name  | gender | birth               | height | phone       | dept_id |
+-----------+-----------+--------+---------------------+--------+-------------+---------+
| 201801101 | 王占峰    || 1999-12-30 00:00:00 |  177.0 | 15937320987 | D02     |
| 201801102 | 刘国量    || 2000-08-14 00:00:00 |  174.0 | 15937320789 | D02     |
| 201801103 | 巩莉      || 2000-06-18 00:00:00 |  170.0 | 15937320456 | D02     |
| 201801104 | 宋丹风    || 1999-11-20 00:00:00 |  165.0 | 15937320444 | D02     |
| 201801201 | 王艳艳    || 1999-09-30 00:00:00 |  162.0 | 15937320888 | D03     |
| 201801202 | 赵牡丹    || 2001-08-10 00:00:00 |  160.0 | 15937320666 | D03     |
| 201801203 | 王大强    || 2000-10-19 00:00:00 |  174.0 | 15937320555 | D03     |
| 201901001 | 张洪涛    || 2001-01-22 00:00:00 |  172.0 | 15937320158 | D01     |
| 201901002 | 王宏伟    || 2001-02-15 00:00:00 |  180.0 | 15937320255 | D01     |
| 201901003 | 张静静    || 2001-08-17 00:00:00 |  167.0 | 15937320123 | D01     |
| 201901004 | 李刚      || 2000-12-25 00:00:00 |  178.0 | 15937320321 | D01     |
| 201901005 | 刘鹏      || 2001-12-18 00:00:00 |  176.0 | 15937320654 | D01     |
+-----------+-----------+--------+---------------------+--------+-------------+---------+
--//
--    course表    //
--//
mysql> desc course;
+--------+----------+------+-----+---------+-------+
| Field  | Type     | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+-------+
| c_id   | char(5)  | NO   | PRI | NULL    |       |
| c_name | char(20) | YES  |     | NULL    |       |
+--------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> select * from course;
+-------+-----------------------+
| c_id  | c_name                |
+-------+-----------------------+
| C0101 | 管理学原理            |
| C0102 | 政治经济学            |
| C0103 | 数据库系统原理        |
| C0104 | 企业管理概论          |
| C0201 | 数据结构              |
| C0202 | 计算机组成原理        |
| C0203 | 操作系统原理          |
| C0204 | 编译原理              |
| C0301 | 高等数学              |
| C0302 | 运筹学                |
| C0303 | 概率论                |
| C0401 | 经济法                |
| C0402 | 刑事诉讼法            |
| C0403 | 民法学                |
| C0404 | 著作权法              |
| C0501 | 音乐欣赏              |
| C0502 | 书法                  |
| C0503 | 油画                  |
+-------+-----------------------+
18 rows in set (0.00 sec)
--//
--    score表    ///
--//
mysql> desc score;
+--------+---------+------+-----+---------+-------+
| Field  | Type    | Null | Key | Default | Extra |
+--------+---------+------+-----+---------+-------+
| stu_id | char(9) | NO   | PRI | NULL    |       |
| c_id   | char(5) | NO   | PRI | NULL    |       |
| score  | int(11) | YES  |     | NULL    |       |
+--------+---------+------+-----+---------+-------+
3 rows in set (0.01 sec)

mysql> select * from score;
+-----------+-------+-------+
| stu_id    | c_id  | score |
+-----------+-------+-------+
| 201801101 | C0201 |    80 |
| 201801102 | C0201 |    98 |
| 201801201 | C0301 |    80 |
| 201801201 | C0302 |    89 |
| 201801201 | C0303 |    98 |
| 201801202 | C0301 |    75 |
| 201801202 | C0302 |    69 |
| 201801202 | C0303 |    62 |
| 201801203 | C0301 |    89 |
| 201801203 | C0302 |    82 |
| 201801203 | C0303 |    64 |
| 201901002 | C0101 |    78 |
| 201901002 | C0102 |    92 |
| 201901002 | C0103 |    87 |
| 201901002 | C0104 |    74 |
+-----------+-------+-------+
15 rows in set (0.00 sec)

四、查询举例

1、查询 dept 表中的所有字段和所有数据
mysql> SELECT
    -> * 
    -> FROM
    -> dept;
+---------+--------------+
| dept_id | dept_name    |
+---------+--------------+
| D01     | 管理系       |
| D02     | 计算机系     |
| D03     | 数学系       |
| D04     | 法律系       |
| D05     | 艺术系       |
+---------+--------------+
5 rows in set (0.00 sec)
2、查询身高超过 176 的学生的所有信息
mysql> SELECT
    -> *
    -> FROM 
    -> stu
    -> WHERE
    -> height > 176;
+-----------+-----------+--------+---------------------+--------+-------------+---------+
| stu_id    | stu_name  | gender | birth               | height | phone       | dept_id |
+-----------+-----------+--------+---------------------+--------+-------------+---------+
| 201801101 | 王占峰    || 1999-12-30 00:00:00 |  177.0 | 15937320987 | D02     |
| 201901002 | 王宏伟    || 2001-02-15 00:00:00 |  180.0 | 15937320255 | D01     |
| 201901004 | 李刚      || 2000-12-25 00:00:00 |  178.0 | 15937320321 | D01     |
+-----------+-----------+--------+---------------------+--------+-------------+---------+
3 rows in set (0.00 sec)
3、查询管理系的学生的学号和姓名
mysql> SELECT
    -> s.stu_id,
    -> s.stu_name
    -> FROM
    -> stu s inner join dept d on s.dept_id = d.dept_id
    -> WHERE 
    -> d.dept_name = '管理系';
+-----------+-----------+
| stu_id    | stu_name  |
+-----------+-----------+
| 201901002 | 王宏伟    |
| 201901003 | 张静静    |
| 201901004 | 李刚      |
| 201901005 | 刘鹏      |
+-----------+-----------+
4 rows in set (0.01 sec)

4、查询每个系的系名及学生人数

mysql> SELECT 
    -> d.dept_name,
    -> count(*) as count_stu
    -> FROM 
    -> stu s right join dept d on s.dept_id = d.dept_id
    -> GROUP BY 
    -> d.dept_id;
+--------------+-----------+
| dept_name    | count_stu |
+--------------+-----------+
| 管理系       |         4 |
| 计算机系     |         4 |
| 数学系       |         3 |
| 法律系       |         1 |
| 艺术系       |         1 |
+--------------+-----------+
5 rows in set (0.04 sec)
5、查询男生信息,并且按身高降序排列
mysql> SELECT
    -> *
    -> FROM
    -> stu
    -> WHERE
    -> gender = '男'
    -> ORDER BY height desc;
+-----------+-----------+--------+---------------------+--------+-------------+---------+
| stu_id    | stu_name  | gender | birth               | height | phone       | dept_id |
+-----------+-----------+--------+---------------------+--------+-------------+---------+
| 201901002 | 王宏伟    || 2001-02-15 00:00:00 |  180.0 | 15937320255 | D01     |
| 201901004 | 李刚      || 2000-12-25 00:00:00 |  178.0 | 15937320321 | D01     |
| 201801101 | 王占峰    || 1999-12-30 00:00:00 |  177.0 | 15937320987 | D02     |
| 201901005 | 刘鹏      || 2001-12-18 00:00:00 |  176.0 | 15937320654 | D01     |
| 201801102 | 刘国量    || 2000-08-14 00:00:00 |  174.0 | 15937320789 | D02     |
| 201801203 | 王大强    || 2000-10-19 00:00:00 |  174.0 | 15937320555 | D03     |
+-----------+-----------+--------+---------------------+--------+-------------+---------+
6 rows in set (0.00 sec)
6、查询身高前 3 名的学生的姓名和身高
mysql> SELECT
    -> stu_name,
    -> height
    -> FROM
    -> stu
    -> ORDER BY
    -> height desc
    -> LIMIT
    -> 3;
+-----------+--------+
| stu_name  | height |
+-----------+--------+
| 王宏伟    |  180.0 |
| 李刚      |  178.0 |
| 王占峰    |  177.0 |
+-----------+--------+
3 rows in set (0.00 sec)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

睿思达DBA_WGX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值