赞
踩
select查询语句的用法(包括数据查询和连表查询)
环境:centos7、mysql版本如下图:
以下实验例子都是基于一张学生表student和一张成绩表score,以下是两张表的结构以及表数据:
1、student
2、score
一、单表查询
mysql> select * from student;
+-----+-----------+------+----------+--------------+--------------+--------------------+
| num | name | ssex | birthday | product_time | dept | address |
+-----+-----------+------+----------+--------------+--------------+--------------------+
| 901 | 张军 | 男 | 2003 | NULL | 计算机系 | 北京市海淀区 |
| 902 | 张超 | 男 | 2005 | NULL | 中文系 | 北京市昌平区 |
| 903 | 张美 | 女 | 2002 | NULL | 中文系 | 湖南省永州市 |
| 904 | 李五一 | 男 | 2001 | NULL | 英语系 | 辽宁省阜新市 |
| 905 | 王芳 | 女 | 2001 | NULL | 英语系 | 福建省厦门市 |
| 906 | 王桂 | 男 | 2005 | NULL | 计算机系 | 湖南省衡阳市 |
+-----+-----------+------+----------+--------------+--------------+--------------------+
6 rows in set (0.00 sec)
mysql> select num,name,ssex,birthday,dept,address from student;
+-----+-----------+------+----------+--------------+--------------------+
| num | name | ssex | birthday | dept | address |
+-----+-----------+------+----------+--------------+--------------------+
| 901 | 张军 | 男 | 2003 | 计算机系 | 北京市海淀区 |
| 902 | 张超 | 男 | 2005 | 中文系 | 北京市昌平区 |
| 903 | 张美 | 女 | 2002 | 中文系 | 湖南省永州市 |
| 904 | 李五一 | 男 | 2001 | 英语系 | 辽宁省阜新市 |
| 905 | 王芳 | 女 | 2001 | 英语系 | 福建省厦门市 |
| 906 | 王桂 | 男 | 2005 | 计算机系 | 湖南省衡阳市 |
+-----+-----------+------+----------+--------------+--------------------+
6 rows in set (0.00 sec)
查询表student里列num为901的学生信息:
mysql> select * from student where num=901;
+-----+--------+------+----------+--------------+--------------+--------------------+
| num | name | ssex | birthday | product_time | dept | address |
+-----+--------+------+----------+--------------+--------------+--------------------+
| 901 | 张军 | 男 | 2003 | NULL | 计算机系 | 北京市海淀区 |
+-----+--------+------+----------+--------------+--------------+--------------------+
1 row in set (0.00 sec)
查询表student里小于22岁的学生信息:
mysql> select * from student where birthday>=2000;
+-----+-----------+------+----------+--------------+--------------+--------------------+
| num | name | ssex | birthday | product_time | dept | address |
+-----+-----------+------+----------+--------------+--------------+--------------------+
| 901 | 张军 | 男 | 2003 | NULL | 计算机系 | 北京市海淀区 |
| 902 | 张超 | 男 | 2005 | NULL | 中文系 | 北京市昌平区 |
| 903 | 张美 | 女 | 2002 | NULL | 中文系 | 湖南省永州市 |
| 904 | 李五一 | 男 | 2001 | NULL | 英语系 | 辽宁省阜新市 |
| 905 | 王芳 | 女 | 2001 | NULL | 英语系 | 福建省厦门市 |
| 906 | 王桂 | 男 | 2005 | NULL | 计算机系 | 湖南省衡阳市 |
+-----+-----------+------+----------+--------------+--------------+--------------------+
6 rows in set (0.00 sec)
运算符表
查询计算机系和英语系的学生的信息:
mysql> select * from student where dept in ('计算机系','英语系');
+-----+-----------+------+----------+--------------+--------------+--------------------+
| num | name | ssex | birthday | product_time | dept | address |
+-----+-----------+------+----------+--------------+--------------+--------------------+
| 901 | 张军 | 男 | 2003 | NULL | 计算机系 | 北京市海淀区 |
| 904 | 李五一 | 男 | 2001 | NULL | 英语系 | 辽宁省阜新市 |
| 905 | 王芳 | 女 | 2001 | NULL | 英语系 | 福建省厦门市 |
| 906 | 王桂 | 男 | 2005 | NULL | 计算机系 | 湖南省衡阳市 |
+-----+-----------+------+----------+--------------+--------------+--------------------+
4 rows in set (0.00 sec)
查询计算机系或英语系的学生的信息:
mysql> select * from student where dept='计算机系' or dept='英语系';
+-----+-----------+------+----------+--------------+--------------+--------------------+
| num | name | ssex | birthday | product_time | dept | address |
+-----+-----------+------+----------+--------------+--------------+--------------------+
| 901 | 张军 | 男 | 2003 | NULL | 计算机系 | 北京市海淀区 |
| 904 | 李五一 | 男 | 2001 | NULL | 英语系 | 辽宁省阜新市 |
| 905 | 王芳 | 女 | 2001 | NULL | 英语系 | 福建省厦门市 |
| 906 | 王桂 | 男 | 2005 | NULL | 计算机系 | 湖南省衡阳市 |
+-----+-----------+------+----------+--------------+--------------+--------------------+
4 rows in set (0.01 sec)
从student表中查询年龄为18到22岁的学生的信息:
mysql> select * from student where birthday between 2000 and 2004;
+-----+-----------+------+----------+--------------+--------------+--------------------+
| num | name | ssex | birthday | product_time | dept | address |
+-----+-----------+------+----------+--------------+--------------+--------------------+
| 901 | 张军 | 男 | 2003 | NULL | 计算机系 | 北京市海淀区 |
| 903 | 张美 | 女 | 2002 | NULL | 中文系 | 湖南省永州市 |
| 904 | 李五一 | 男 | 2001 | NULL | 英语系 | 辽宁省阜新市 |
| 905 | 王芳 | 女 | 2001 | NULL | 英语系 | 福建省厦门市 |
+-----+-----------+------+----------+--------------+--------------+--------------------+
4 rows in set (0.00 sec)
从student表中查询年龄为18到22岁的学生的信息:
mysql> select * from student where birthday>=2000 and birthday<=2004;
+-----+-----------+------+----------+--------------+--------------+--------------------+
| num | name | ssex | birthday | product_time | dept | address |
+-----+-----------+------+----------+--------------+--------------+--------------------+
| 901 | 张军 | 男 | 2003 | NULL | 计算机系 | 北京市海淀区 |
| 903 | 张美 | 女 | 2002 | NULL | 中文系 | 湖南省永州市 |
| 904 | 李五一 | 男 | 2001 | NULL | 英语系 | 辽宁省阜新市 |
| 905 | 王芳 | 女 | 2001 | NULL | 英语系 | 福建省厦门市 |
+-----+-----------+------+----------+--------------+--------------+--------------------+
4 rows in set (0.00 sec)
查询student表里的num列中以9开头的数据:
mysql> select * from student where num like '9%';
+-----+-----------+------+----------+--------------+--------------+--------------------+
| num | name | ssex | birthday | product_time | dept | address |
+-----+-----------+------+----------+--------------+--------------+--------------------+
| 901 | 张军 | 男 | 2003 | NULL | 计算机系 | 北京市海淀区 |
| 902 | 张超 | 男 | 2005 | NULL | 中文系 | 北京市昌平区 |
| 903 | 张美 | 女 | 2002 | NULL | 中文系 | 湖南省永州市 |
| 904 | 李五一 | 男 | 2001 | NULL | 英语系 | 辽宁省阜新市 |
| 905 | 王芳 | 女 | 2001 | NULL | 英语系 | 福建省厦门市 |
| 906 | 王桂 | 男 | 2005 | NULL | 计算机系 | 湖南省衡阳市 |
+-----+-----------+------+----------+--------------+--------------+--------------------+
6 rows in set (0.00 sec)
查询表student里的num列是空值的数据:
mysql> select * from student where num is null;
Empty set (0.00 sec)
查询表student里的num列是非空值的数据:
mysql> select * from student where num is not null;
+-----+-----------+------+----------+--------------+--------------+--------------------+
| num | name | ssex | birthday | product_time | dept | address |
+-----+-----------+------+----------+--------------+--------------+--------------------+
| 901 | 张军 | 男 | 2003 | NULL | 计算机系 | 北京市海淀区 |
| 902 | 张超 | 男 | 2005 | NULL | 中文系 | 北京市昌平区 |
| 903 | 张美 | 女 | 2002 | NULL | 中文系 | 湖南省永州市 |
| 904 | 李五一 | 男 | 2001 | NULL | 英语系 | 辽宁省阜新市 |
| 905 | 王芳 | 女 | 2001 | NULL | 英语系 | 福建省厦门市 |
| 906 | 王桂 | 男 | 2005 | NULL | 计算机系 | 湖南省衡阳市 |
+-----+-----------+------+----------+--------------+--------------+--------------------+
6 rows in set (0.00 sec)
去除student表里dept那列数据里相同的项:
mysql> select distinct dept from student;
+--------------+
| dept |
+--------------+
| 计算机系 |
| 中文系 |
| 英语系 |
+--------------+
3 rows in set (0.00 sec)
将计算机成绩按从高到低进行排序:
mysql> select * from score where c_name='计算机' order by grade desc;
+----+-----------+------+-------+
| id | c_name | s_id | grade |
+----+-----------+------+-------+
| 1 | 计算机 | 901 | 98 |
| 9 | 计算机 | 906 | 90 |
| 6 | 计算机 | 904 | 70 |
| 3 | 计算机 | 902 | 65 |
+----+-----------+------+-------+
4 rows in set (0.00 sec)
student表中查询每个院系有多少人,为统计的人数列取别名sum_of_dept:
mysql> select dept,count(All name) as sum_of_dept from student group by (dept);
+--------------+-------------+
| dept | sum_of_dept |
+--------------+-------------+
| 中文系 | 2 |
| 英语系 | 2 |
| 计算机系 | 2 |
+--------------+-------------+
3 rows in set (0.00 sec)
查询student表的第二条到第四条记录:
mysql> select * from student limit 2,4;
+-----+-----------+------+----------+--------------+--------------+--------------------+
| num | name | ssex | birthday | product_time | dept | address |
+-----+-----------+------+----------+--------------+--------------+--------------------+
| 903 | 张美 | 女 | 2002 | NULL | 中文系 | 湖南省永州市 |
| 904 | 李五一 | 男 | 2001 | NULL | 英语系 | 辽宁省阜新市 |
| 905 | 王芳 | 女 | 2001 | NULL | 英语系 | 福建省厦门市 |
| 906 | 王桂 | 男 | 2005 | NULL | 计算机系 | 湖南省衡阳市 |
+-----+-----------+------+----------+--------------+--------------+--------------------+
4 rows in set (0.00 sec)
二、连表查询
写法1:用where连接
SELECT 表1名.表列, 表1名.表列,…, 表2名.表列,表2名.表列,…,
FROM 表1名, 表2名
WHERE 表1名.表列=表2名.表列;
mysql> select * from student,score where student.num=score.s_id;
+-----+-----------+------+----------+--------------+--------------+--------------------+----+-----------+------+-------+
| num | name | ssex | birthday | product_time | dept | address | id | c_name | s_id | grade |
+-----+-----------+------+----------+--------------+--------------+--------------------+----+-----------+------+-------+
| 901 | 张军 | 男 | 2003 | NULL | 计算机系 | 北京市海淀区 | 1 | 计算机 | 901 | 98 |
| 901 | 张军 | 男 | 2003 | NULL | 计算机系 | 北京市海淀区 | 2 | 英语 | 901 | 80 |
| 902 | 张超 | 男 | 2005 | NULL | 中文系 | 北京市昌平区 | 3 | 计算机 | 902 | 65 |
| 902 | 张超 | 男 | 2005 | NULL | 中文系 | 北京市昌平区 | 4 | 中文 | 902 | 88 |
| 903 | 张美 | 女 | 2002 | NULL | 中文系 | 湖南省永州市 | 5 | 中文 | 903 | 95 |
| 904 | 李五一 | 男 | 2001 | NULL | 英语系 | 辽宁省阜新市 | 6 | 计算机 | 904 | 70 |
| 904 | 李五一 | 男 | 2001 | NULL | 英语系 | 辽宁省阜新市 | 7 | 英语 | 904 | 92 |
| 905 | 王芳 | 女 | 2001 | NULL | 英语系 | 福建省厦门市 | 8 | 英语 | 905 | 94 |
| 906 | 王桂 | 男 | 2005 | NULL | 计算机系 | 湖南省衡阳市 | 9 | 计算机 | 906 | 90 |
| 906 | 王桂 | 男 | 2005 | NULL | 计算机系 | 湖南省衡阳市 | 10 | 英语 | 906 | 85 |
+-----+-----------+------+----------+--------------+--------------+--------------------+----+-----------+------+-------+
10 rows in set (0.00 sec)
写法二:使用INNER JOIN连接
select 表1名.表列, 表1名.表列,…, 表2名.表列,表2名.表列,…,
from 表1名 inner join 表2名
on(where) 表1名.表列=表2名.表列;
mysql> select * from student inner join score on student.num=score.s_id;
+-----+-----------+------+----------+--------------+--------------+--------------------+----+-----------+------+-------+
| num | name | ssex | birthday | product_time | dept | address | id | c_name | s_id | grade |
+-----+-----------+------+----------+--------------+--------------+--------------------+----+-----------+------+-------+
| 901 | 张军 | 男 | 2003 | NULL | 计算机系 | 北京市海淀区 | 1 | 计算机 | 901 | 98 |
| 901 | 张军 | 男 | 2003 | NULL | 计算机系 | 北京市海淀区 | 2 | 英语 | 901 | 80 |
| 902 | 张超 | 男 | 2005 | NULL | 中文系 | 北京市昌平区 | 3 | 计算机 | 902 | 65 |
| 902 | 张超 | 男 | 2005 | NULL | 中文系 | 北京市昌平区 | 4 | 中文 | 902 | 88 |
| 903 | 张美 | 女 | 2002 | NULL | 中文系 | 湖南省永州市 | 5 | 中文 | 903 | 95 |
| 904 | 李五一 | 男 | 2001 | NULL | 英语系 | 辽宁省阜新市 | 6 | 计算机 | 904 | 70 |
| 904 | 李五一 | 男 | 2001 | NULL | 英语系 | 辽宁省阜新市 | 7 | 英语 | 904 | 92 |
| 905 | 王芳 | 女 | 2001 | NULL | 英语系 | 福建省厦门市 | 8 | 英语 | 905 | 94 |
| 906 | 王桂 | 男 | 2005 | NULL | 计算机系 | 湖南省衡阳市 | 9 | 计算机 | 906 | 90 |
| 906 | 王桂 | 男 | 2005 | NULL | 计算机系 | 湖南省衡阳市 | 10 | 英语 | 906 | 85 |
+-----+-----------+------+----------+--------------+--------------+--------------------+----+-----------+------+-------+
10 rows in set (0.00 sec)
写法三:直接用JOIN连接
select 表1名.表列, 表1名.表列,…, 表2名.表列,表2名.表列,…,
from 表1名 join 表2名
on 表1名.表列=表2名.表列;
mysql> select * from student join score on student.num=score.s_id;
+-----+-----------+------+----------+--------------+--------------+--------------------+----+-----------+------+-------+
| num | name | ssex | birthday | product_time | dept | address | id | c_name | s_id | grade |
+-----+-----------+------+----------+--------------+--------------+--------------------+----+-----------+------+-------+
| 901 | 张军 | 男 | 2003 | NULL | 计算机系 | 北京市海淀区 | 1 | 计算机 | 901 | 98 |
| 901 | 张军 | 男 | 2003 | NULL | 计算机系 | 北京市海淀区 | 2 | 英语 | 901 | 80 |
| 902 | 张超 | 男 | 2005 | NULL | 中文系 | 北京市昌平区 | 3 | 计算机 | 902 | 65 |
| 902 | 张超 | 男 | 2005 | NULL | 中文系 | 北京市昌平区 | 4 | 中文 | 902 | 88 |
| 903 | 张美 | 女 | 2002 | NULL | 中文系 | 湖南省永州市 | 5 | 中文 | 903 | 95 |
| 904 | 李五一 | 男 | 2001 | NULL | 英语系 | 辽宁省阜新市 | 6 | 计算机 | 904 | 70 |
| 904 | 李五一 | 男 | 2001 | NULL | 英语系 | 辽宁省阜新市 | 7 | 英语 | 904 | 92 |
| 905 | 王芳 | 女 | 2001 | NULL | 英语系 | 福建省厦门市 | 8 | 英语 | 905 | 94 |
| 906 | 王桂 | 男 | 2005 | NULL | 计算机系 | 湖南省衡阳市 | 9 | 计算机 | 906 | 90 |
| 906 | 王桂 | 男 | 2005 | NULL | 计算机系 | 湖南省衡阳市 | 10 | 英语 | 906 | 85 |
+-----+-----------+------+----------+--------------+--------------+--------------------+----+-----------+------+-------+
10 rows in set (0.00 sec)
方法1:左连接(将左表中的所有数据分别与右表中的每条数据进行连接组合,返回的结果不仅包含内连接的数据,而且包含左表中不符合条件的数据,同时在右表的相应列中添加NULL值。)
SELECT 字段名1,字段名2 … FROM 表1 LEFT|RIGHT JOIN 表2 ON 表1.字段1=表2.字段2;
用连接查询的方式查询所有学生的信息和考试信息:
mysql> select * from student left join score on student.num=score.s_id;
+-----+-----------+------+----------+--------------+--------------+--------------------+------+-----------+------+-------+
| num | name | ssex | birthday | product_time | dept | address | id | c_name | s_id | grade |
+-----+-----------+------+----------+--------------+--------------+--------------------+------+-----------+------+-------+
| 901 | 张军 | 男 | 2003 | NULL | 计算机系 | 北京市海淀区 | 1 | 计算机 | 901 | 98 |
| 901 | 张军 | 男 | 2003 | NULL | 计算机系 | 北京市海淀区 | 2 | 英语 | 901 | 80 |
| 902 | 张超 | 男 | 2005 | NULL | 中文系 | 北京市昌平区 | 3 | 计算机 | 902 | 65 |
| 902 | 张超 | 男 | 2005 | NULL | 中文系 | 北京市昌平区 | 4 | 中文 | 902 | 88 |
| 903 | 张美 | 女 | 2002 | NULL | 中文系 | 湖南省永州市 | 5 | 中文 | 903 | 95 |
| 904 | 李五一 | 男 | 2001 | NULL | 英语系 | 辽宁省阜新市 | 6 | 计算机 | 904 | 70 |
| 904 | 李五一 | 男 | 2001 | NULL | 英语系 | 辽宁省阜新市 | 7 | 英语 | 904 | 92 |
| 905 | 王芳 | 女 | 2001 | NULL | 英语系 | 福建省厦门市 | 8 | 英语 | 905 | 94 |
| 906 | 王桂 | 男 | 2005 | NULL | 计算机系 | 湖南省衡阳市 | 9 | 计算机 | 906 | 90 |
| 906 | 王桂 | 男 | 2005 | NULL | 计算机系 | 湖南省衡阳市 | 10 | 英语 | 906 | 85 |
+-----+-----------+------+----------+--------------+--------------+--------------------+------+-----------+------+-------+
10 rows in set (0.00 sec)
方法二:右连接(将右表中的所有数据分别与左表中的每条数据进行连接组合,返回的结果不仅包含内连接的数据,而且包含右表中不符合条件的数据,同时在左表的相应列中添加NULL值。)
SELECT 字段名1,字段名2 … FROM 表1 LEFT|RIGHT JOIN 表2 ON 表1.字段1=表2.字段2;
mysql> select * from student right join score on student.num=score.s_id;
+------+-----------+------+----------+--------------+--------------+--------------------+----+-----------+------+-------+
| num | name | ssex | birthday | product_time | dept | address | id | c_name | s_id | grade |
+------+-----------+------+----------+--------------+--------------+--------------------+----+-----------+------+-------+
| 901 | 张军 | 男 | 2003 | NULL | 计算机系 | 北京市海淀区 | 1 | 计算机 | 901 | 98 |
| 901 | 张军 | 男 | 2003 | NULL | 计算机系 | 北京市海淀区 | 2 | 英语 | 901 | 80 |
| 902 | 张超 | 男 | 2005 | NULL | 中文系 | 北京市昌平区 | 3 | 计算机 | 902 | 65 |
| 902 | 张超 | 男 | 2005 | NULL | 中文系 | 北京市昌平区 | 4 | 中文 | 902 | 88 |
| 903 | 张美 | 女 | 2002 | NULL | 中文系 | 湖南省永州市 | 5 | 中文 | 903 | 95 |
| 904 | 李五一 | 男 | 2001 | NULL | 英语系 | 辽宁省阜新市 | 6 | 计算机 | 904 | 70 |
| 904 | 李五一 | 男 | 2001 | NULL | 英语系 | 辽宁省阜新市 | 7 | 英语 | 904 | 92 |
| 905 | 王芳 | 女 | 2001 | NULL | 英语系 | 福建省厦门市 | 8 | 英语 | 905 | 94 |
| 906 | 王桂 | 男 | 2005 | NULL | 计算机系 | 湖南省衡阳市 | 9 | 计算机 | 906 | 90 |
| 906 | 王桂 | 男 | 2005 | NULL | 计算机系 | 湖南省衡阳市 | 10 | 英语 | 906 | 85 |
+------+-----------+------+----------+--------------+--------------+--------------------+----+-----------+------+-------+
10 rows in set (0.00 sec)
方法三:全外连接
SELECT 字段名1,字段名2 … FROM 表1 LEFT|RIGHT JOIN 表2 ON 表1.字段1=表2.字段2;
UNION
SELECT 字段名1,字段名2 … FROM 表1 LEFT|RIGHT JOIN 表2 ON 表1.字段1=表2.字段2;
从student表和score表中查询出学生的学号,然后合并查询结果:
mysql> select num from student union select s_id from score;
+-----+
| num |
+-----+
| 901 |
| 902 |
| 903 |
| 904 |
| 905 |
| 906 |
+-----+
6 rows in set (0.00 sec)
复合条件连接查询的案例属于综合例子:
查询计算机成绩低于95的学生的信息:
mysql> select * from score,student where student.num=score.s_id and score.c_name='计算机' and score.grade<95;
+----+-----------+------+-------+-----+-----------+------+----------+--------------+--------------+--------------------+
| id | c_name | s_id | grade | num | name | ssex | birthday | product_time | dept | address |
+----+-----------+------+-------+-----+-----------+------+----------+--------------+--------------+--------------------+
| 3 | 计算机 | 902 | 65 | 902 | 张超 | 男 | 2005 | NULL | 中文系 | 北京市昌平区 |
| 6 | 计算机 | 904 | 70 | 904 | 李五一 | 男 | 2001 | NULL | 英语系 | 辽宁省阜新市 |
| 9 | 计算机 | 906 | 90 | 906 | 王桂 | 男 | 2005 | NULL | 计算机系 | 湖南省衡阳市 |
+----+-----------+------+-------+-----+-----------+------+----------+--------------+--------------+--------------------+
3 rows in set (0.01 sec)
查询同时参加计算机和英语考试的学生的信息
mysql> select * from student as stu,score as s1,score as s2 where stu.num= s1.s_id and s1.c_name='计算机' and stu.num=s2.s_id and s2.c_name='英语';
+-----+-----------+------+----------+--------------+--------------+--------------------+----+-----------+------+-------+----+--------+------+-------+
| num | name | ssex | birthday | product_time | dept | address | id | c_name | s_id | grade | id | c_name | s_id | grade |
+-----+-----------+------+----------+--------------+--------------+--------------------+----+-----------+------+-------+----+--------+------+-------+
| 901 | 张军 | 男 | 2003 | NULL | 计算机系 | 北京市海淀区 | 1 | 计算机 | 901 | 98 | 2 | 英语 | 901 | 80 |
| 904 | 李五一 | 男 | 2001 | NULL | 英语系 | 辽宁省阜新市 | 6 | 计算机 | 904 | 70 | 7 | 英语 | 904 | 92 |
| 906 | 王桂 | 男 | 2005 | NULL | 计算机系 | 湖南省衡阳市 | 9 | 计算机 | 906 | 90 | 10 | 英语 | 906 | 85 |
+-----+-----------+------+----------+--------------+--------------+--------------------+----+-----------+------+-------+----+--------+------+-------+
3 rows in set (0.00 sec)
查询姓张或者姓王的同学的姓名、院系、考试科目和成绩:
mysql> select student.num,name,dept,c_name,grade from student, score where(name like '张%' or name like '王%')and student.num=score.s_id ;
+-----+--------+--------------+-----------+-------+
| num | name | dept | c_name | grade |
+-----+--------+--------------+-----------+-------+
| 901 | 张军 | 计算机系 | 计算机 | 98 |
| 901 | 张军 | 计算机系 | 英语 | 80 |
| 902 | 张超 | 中文系 | 计算机 | 65 |
| 902 | 张超 | 中文系 | 中文 | 88 |
| 903 | 张美 | 中文系 | 中文 | 95 |
| 905 | 王芳 | 英语系 | 英语 | 94 |
| 906 | 王桂 | 计算机系 | 计算机 | 90 |
| 906 | 王桂 | 计算机系 | 英语 | 85 |
+-----+--------+--------------+-----------+-------+
8 rows in set (0.00 sec)
计算每个学生的总成绩(需显示学生姓名):
mysql> select student.name,sum(All grade) as sum_of_grade from score left join student on student.num=score.s_id group by (s_id);
+-----------+--------------+
| name | sum_of_grade |
+-----------+--------------+
| 张军 | 178 |
| 张超 | 153 |
| 张美 | 95 |
| 李五一 | 162 |
| 王芳 | 94 |
| 王桂 | 175 |
+-----------+--------------+
6 rows in set (0.00 sec)
写法1:union
将所有的查询结果合并到一起,删除相同的记录
SELECT 字段名1,字段名2 … FROM 表1;
UNION
SELECT 字段名1,字段名2 … FROM 表2;
mysql> select num from student union select s_id from score;
+-----+
| num |
+-----+
| 901 |
| 902 |
| 903 |
| 904 |
| 905 |
| 906 |
+-----+
6 rows in set (0.00 sec)
写法2:union all
将所有的查询结果合并到一起,不删除相同的记录
SELECT 字段名1,字段名2 … FROM 表1;
UNION ALL
SELECT 字段名1,字段名2 … FROM 表2;
mysql> select num from student union all select s_id from score;
+-----+
| num |
+-----+
| 901 |
| 902 |
| 903 |
| 904 |
| 905 |
| 906 |
| 901 |
| 901 |
| 902 |
| 902 |
| 903 |
| 904 |
| 904 |
| 905 |
| 906 |
| 906 |
+-----+
16 rows in set (0.00 sec)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。