讲义第19讲—— select 查询之 select 语法"/>
MySQL讲义第19讲—— select 查询之 select 语法
MySQL讲义第19讲——select 查询之 select 语法
文章目录
- MySQL讲义第19讲——select 查询之 select 语法
- 一、SELECT 语句的语法
- 二、SELECT 语句各部分的说明
- 三、查询数据准备
- 四、查询举例
- 1、查询 dept 表中的所有字段和所有数据
- 2、查询身高超过 176 的学生的所有信息
- 3、查询管理系的学生的学号和姓名
- 5、查询男生信息,并且按身高降序排列
- 6、查询身高前 3 名的学生的姓名和身高
MySQL 使用 SELECT 语句查询数据。查询数据是指从数据库中根据需求,使用不同的查询方式来获取不同的数据,是 MySQL 中最重要的操作。
一、SELECT 语句的语法
SELECT DISTINCT<字段或表达式列表>
FROM<表名> <连接类型>
JOIN <表名> ON <连接条件>
WHERE<筛选条件>
GROUP BY<分组字段列表>
HAVING<分组筛选条件>
ORDER BY<排序字段>
LIMIT <m,n>
二、SELECT 语句各部分的说明
1、DISTINCT:消除重复行。
2、<字段或表达式列表>:表示所要查询字段的名称,可以使用(*)表示所有字段。
3、<连接类型>:可以使用 inner,left,right 分别表示内连接,左连接,右连接。
4、<连接条件>:一般使用两个表的共同字段进行构造连接条件。
5、<筛选条件>:限定查询数据必须满足该查询条件。
6、<分组字段列表>:按照指定的字段分组。
7、<分组筛选条件>:对分组进行筛选。
8、<排序字段>:对查询结果进行排序,可以进行升序(ASC)和降序(DESC)排列,默认是升序。
9、LIMIT <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)
更多推荐
MySQL讲义第19讲—— select 查询之 select 语法
发布评论