sql的select查询语句大全(单表查询、多表连接查询)

  • Post author:
  • Post category:其他



select查询语句的用法(包括数据查询和连表查询)

环境:centos7、mysql版本如下图:

在这里插入图片描述

以下实验例子都是基于一张学生表student和一张成绩表score,以下是两张表的结构以及表数据:

1、student

在这里插入图片描述

在这里插入图片描述

2、score

在这里插入图片描述

在这里插入图片描述

一、单表查询

  • 查询所有字段;select * from 表名字;
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)

  • 查询指定字段;select 字段名,字段名 from 表名字;
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)

  • 查询指定数据 ;

    select * from 表名 where 字段名 = ’数据’;

    select * from 表名 where 字段名 比较运算符 数据;

    (后附比较运算符表)
查询表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)

运算符表

在这里插入图片描述

  • IN关键字查询;

    SELECT * FROM table_name WHERE 条件 [NOT] IN (元素1,元素2,…);
查询计算机系和英语系的学生的信息:
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)

  • OR关键字查询;

    SELECT * FROM table_name WHERE 条件1 OR 条件2 [OR …条件n];
查询计算机系或英语系的学生的信息:
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)

  • BETWEEN AND查询;

    SELECT * FROM table_name WHERE 条件 [NOT] BETWEEN 取值1 AND 取值2;
从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)

  • AND多查询;

    SELECT * FROM table_name WHERE 条件1 AND 条件2 [AND …条件n];
从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)

  • LIKE查询;

    select * from 表名 where id like ‘数据%’;

    “%”可以代表任意长度的字符串,长度可以为0 ,例如’明%白’可以是’明白’ ;“_”只代表一个字符,例如m_n 。
查询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)

  • IS NULL查询

    SELECT 字段名1,字段名2,…… FROM table_name WHERE 条件 IS [NOT] NULL;
查询表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)

  • DISTINCT查询(去除重复的值);

    SELECT DISTINCT 字段名 FROM 表名;
去除student表里dept那列数据里相同的项:
mysql> select distinct dept from student;
+--------------+
| dept         |
+--------------+
| 计算机系     |
| 中文系       |
| 英语系       |
+--------------+
3 rows in set (0.00 sec)
  • ORDER BY查询(对数据做升序或者降序排列,一般放在语句后面);

    ORDER BY 字段名 [ASC | DESC]

    1、ASC:升序,默认值。

    2、DESC:降序。

    3、进行排序的列如果有NULL,则升序时NULL在最前,降序在最后。
将计算机成绩按从高到低进行排序:
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)

  • GROUP BY查询;

    SELECT column_name, aggregate_function(column_name)

    FROM table_name

    WHERE column_name operator value

    GROUP BY column_name;

    GROUP BY关键字可以将查询的数据行根据某些列分组。
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)

  • LIMIT查询;

    select _column,_column from _table [where Clause] [limit N][offset M]

    LIMIT关键字可以限制查询结果的输出行数。
查询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)

  • 复合条件连接查询(多条件复合成一条复杂的select查询语句)

    在连接查询时,可以增加限制条件以使查询结果更加准确;

复合条件连接查询的案例属于综合例子:

查询计算机成绩低于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)



版权声明:本文为HelloWorld_4396原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。