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

[mysql]最基本的SELECT...FROM结构 SELECT 1; 阅读详情
AI摘要

本文详细介绍了MySQL中的查询语句,包括单表查询的基本操作,如选择所有字段、指定字段、数据过滤等,并通过实例展示了IN、OR、BETWEEN、LIKE、IS NULL、DISTINCT、ORDER BY、GROUP BY和LIMIT等高级查询。此外,还深入讲解了连表查询,包括内连接、外连接(左连接、右连接)和全外连接的使用,以及如何通过JOIN实现复合条件查询。最后,提到了合并查询(UNION和UNION ALL)的应用。

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)

select * from where 三个条件_数据库——SELECT 查询 语法1:SELECT * FROM 表名 * 号表示:查询这个表的所有信息,在开发中能不用*号尽量不要用 * 号 例子:查询student 表中的所有记录信息​*****************************************************************************************语法2:SELECT 字段1,字段2,字段3..... FRO... 阅读详情

相关推荐

DB(四):SELECT查询、查询条件、排序、分组、集合操作

包括SELECT语句、AS别名、WHILE子句;AND和OR关键字、LIKE条件、IN和NOT IN、BETWEEN...AND...操作符、IS NULL和IS NOT NULL、ANY和ALL条件、DISTINCT去重;使用ORDER BY子句排序;使用GROUP BY子句分组、HAVING子句、查询语句的执行顺序;集合操作UNION、UNION ALL、MINUS。

qq_45138120的博客 6585

SQL语句之SELECT语句

一般格式SELECT DISTINCT/ALL 目标列表达式 //要显示的属性列FROM 表名/视图名 //查询的对象WHERE 条件表达式 //查询条件GROUP BY 列名 HAVING 条件表达式 //查询结果分组ORDER BY 列名 次序;//最终查询结果排序。

分享学习期间的笔记心得 1万+

数据库实验:单表查询&多表连接查询(SQL Server附SQL代码.TXT)

1.实验目的与准备:熟悉SQL查询语言,掌握基本查询、函数与聚合、连接及子查询操作。实验前,复习了SQL语法,准备了测试数据库。2.基本查询操作:通过SELECT语句实现了数据检索,学习了WHERE子句进行条件筛选,ORDER BY排序数据。3.函数与聚合操作:使用COUNTSUM等聚合函数统计数据,借助日期函数处理时间数据,增强了数据处理能力。4.连接与子查询:通过JOIN操作连接多表数据,利用子查询实现复杂查询需求,深化了对SQL逻辑的理解。5.实验总结与反思

m0_72934718的博客 2214

MySQL基础篇2——SQL之SELECT使用篇

此笔记来自b站尚硅谷课程,仅做复习使用。 一、SQL语言的规则与规范1、SQL大小写规范2、注释3、命名规则4、SQL分类5、数据导入指令二、基本的SELECT语句1、SELECT...FROM2、列的别名3、去除重复行4、空值参与运算5、着重号6、查询常数7、显示表结构8、过滤数据:WHERE三、4大类运算符1、算术运算符2、比较运算符3、逻辑运算符4、位运算符5、运算符的优先级四、排序与分页1、排序:ORDER BY2、分页:LIMIT五、多表查询1、笛卡尔积(或交叉连接)2、多表查询分类讲解3、SQ

无 1万+

Dify与钉钉轻量级集成:打造企业内部AI助手

企业级聊天机器人开发已成为提升内部协同效率的关键技术。其核心原理在于通过API集成,将AI模型能力与即时通讯平台无缝连接,实现智能问答与自动化流程。从技术价值看,这种集成方案能够显著降低AI应用落地门槛,将前沿的AI能力快速转化为实际生产力。在应用场景上,它尤其适用于HR答疑、IT技术支持、产品知识库等高频内部服务场景。本文聚焦于Dify与钉钉的轻量级集成方案,通过Stream模式实现高效消息处理,并利用AI卡片支持流式输出,为企业构建体验自然的智能机器人提供了完整实践路径。该方案特别强调配置简化与部署便捷

weixin_27155667的博客 696

Nvivo12新手避坑指南:从安装到编码的完整流程(附实战案例)

本文为Nvivo12新手提供了从软件安装、初始设置到数据导入和编码分析的完整避坑指南。通过一个“校园欺凌现象的学生访谈研究”实战案例,详细拆解了处理中文文本、创建项目结构、执行手动编码及高级查询等关键步骤,帮助研究者避开常见错误,快速上手并高效完成质性数据分析。

resnet7explorer的博客 317

JAVA中SQL查询语句大全,select多表查询,各种查询

以员工表:emp 为例 id name gender birthday dept job sal bonus 编号 姓名 性别 生日 部门 职位 薪资 奖金 基本查询 – 查询emp表中的所有员工信息 select * from emp; – 查询emp表中的所有员工的姓名、薪资、奖金 select name,sal,bonus from emp; – 查询emp表中...

奋斗中的小码农博客 1万+

CoMP 协同多点传输技术

CoMP CoMP是什么 解决什么问题 有什么缺点 CoMP(Coordinated Multiple Points)协同多点传输,通信术语,LTE-A的重要技术之一。 CoMP传输是指地理位置上分离的多个传输点,协同参与为一个终端的数据(PDSCH)传输或者联合接收一个终端发送的数据(PUSCH),参与协作的多个传输点通常指不同小区的基站。CoMP技术将边缘用户置于几个基站的同频率上,几...

ilean_J的博客 2万+

3.4 《数据库系统概论》之数据查询---SELECT(单表查询、连接查询、嵌套查询、集合查询、多表查询)

文章目录0.前言1.思维导图2.Student/SC/Course表数据及结构3.SELECT语句的一般格式4.单表查询(1)选择表中的若干列① 查询指定列② 查询全部列③ 查询经过计算的值❶ 算术表达式❷ 字符串常量及函数❸ 使用列别名改变查询结果的列标题(2)选择表中的若干元组(行)① 关键词DISTINCT去掉表中重复的行② 查询满足条件的元组(行)❶ 比较大小❷ 确定范围❸ 确定集合❹ 字...

BitHachi 3万+

BK7238(XH-WB3S)固件烧录实战:从AT固件选择到稳定下载全解析

本文详细解析了BK7238(XH-WB3S)模组固件烧录的全过程,从AT固件版本选择到稳定下载的实战技巧。重点介绍了烧录前的准备工作、硬件连接的正确姿势、烧录软件的实战技巧以及疑难问题排查指南,帮助开发者高效完成BK7238模组的固件烧录。

weixin_29159441的博客 251

用 n8n 提取静态网页内容:从 HTTP Request 到 HTML 节点全解析

本文介绍了如何使用n8n的HTTP Request和HTML节点组合提取静态网页内容。首先通过HTTP Request节点获取网页HTML源码,然后使用HTML节点解析并提取所需数据。关键点包括:1)HTTP Request节点设置URL和GET方法;2)HTML节点配置Source Data为JSON并指定data字段;3)重点掌握Extraction Values参数,特别是CSS选择器(使用.和#定位元素)、Key命名、Return Value类型选择等。文章通过实例演示了标题和正文的提取方法,并提供

muyouking 4568

笔记:3.4 《数据库系统概论》之数据查询---SELECT(单表查询、连接查询、嵌套查询、集合查询、多表查询)

笔记:3.4 《数据库系统概论》之数据查询---SELECT(单表查询、连接查询、嵌套查询、集合查询、多表查询)

qq_40419964的博客 7066

MathType公式使用技巧汇总——Mathtype怎么在word中编辑公式?论文中公式有哪技巧?有哪些注意事项?论文中的公式怎么写?

如果word中到公式编号(2-1)中间的符号如下图........ .......类似与省略号的,这是手动打的空格,公式和编号的位置都是手动敲空格操作的,这种就只是使用MathType写了公式而已,格式上还是很不方便的。**如果要修改公示,直接双击文档中的公式,就会自动弹出MathType公式编辑窗口,进行修改。如果要修改公示,直接双击文档中的公式,就会自动弹出MathType公式编辑窗口,进行修改。而第二种,是公式里面带的括号符号,他是可以随着公式结构自适应变化的。这时需要将公式插入到一行文字的某处,

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 5万+

SQL查询语句大全,select多表查询,各种查询

以员工表:emp 为例 id name gender birthday dept job sal bonus 编号 姓名 性别 生日 部门 职位 薪资 奖金 基本查询 – 查询emp表中的所有员工信息 select * from emp; – 查询emp表中的所有员工的姓名、薪资、奖金 ...

小白先生的博客 4169

CollisionLoss 设计与实现原理说明

文章摘要 CollisionLoss是一种用于自动驾驶轨迹规划的碰撞惩罚损失函数,其核心思想是用多个沿车身纵轴排列的圆盘来近似表示车辆(Oriented Bounding Box)。该设计通过圆盘间的距离计算实现碰撞检测,具有以下特点: 可微性:圆盘距离计算处处可微,便于梯度回传,而传统矩形碰撞检测(分离轴定理)不可微且计算复杂。 多圆盘设计:沿车身纵向排列多个圆盘能更精确地拟合细长车体,避免单圆盘过度膨胀导致的误报。 安全覆盖:圆盘半径经过数学推导,确保完全覆盖车体矩形,避免漏检(宁可保守)。 软惩罚机制

@bangbang的博客 94

CAPL学习之路-关键字

在capl中,关键字具有特殊的含义和用途,因此,不得将关键字用作变量或函数的名称 声明数据类型的关键字 可以用不同的关键字,声明或引用不同类型的数据 byte 声明一个字节的变量 word 声明两个字节的变量 dword 声明四个字节的变量 int 声明两个字节的整数 long 声明四个字节的变量 qword 声明八个字节的变量 char 声明一个字符串 float 声明一个浮点数,8个字节 double 声明一个浮点数,8个字节 定义一个结构体或枚举类型 struct struct Data { .

jasonj333 6108

SQL语句之单表查询、多表连接查询、子查询——练习题

单表查询练习题 == salgrade ==

子佩的博客 1873

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

SQL多表查询

概述:从多张表中进行数据查询例如:有以下两张表dept和emp:多表查询分类1、连接查询内连接:相当于查询A、B交集部分数据外连接:左外连接:查询左表所有数据,以及两张表交集部分数据(用的更多)右外连接:查询右表所有数据,以及两张表交集部分数据自连接:当前表与自身的连接查询,自连接必须使用表别名2、子查询。

weixin_45951205的博客 6287

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

MySQL的select多表查询

select 语句: select 语句一般用法为: select 字段名 from tb_name where 条件 ; select 查询语句类型一般分为三种: 单表查询,多表查询,子查询 最简单的单表查询 : select * from tb_name; *表示,所有字段 查询特定字段(投影): select 字段名1,字段名2, from tb_name; where 语句...

南宫乘风-Linux运维-虚拟化容器-Python编程 ownit.top 2776

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

sql查询语句,单表,多表

一、单表查询 1、查询所有列 SELECT * FROM 表名; 2、查询指定列 SELECT 列名1, 列名2,……, 列名n FROM 表名; 3、WHERE 条件查询 条件查询就是在查询时给出WHERE子句,在WHERE子句中可以使用如下运算符及关键字: =、!=、<、>、>=、 <> 不等于BETWEEN 开始值 AND 临界值(范围);(:1.开始值<结束值 2.包含临界值的) IN(数值1,数值2,……,数值n)(包含); IS NULL(不

欢~迎~光~临~ 1043

sql:单表与联表查询

目录一、单表查询表一:userinfo表二:schoolinfo表三:addressinfo二、左连接三、右连接四、内连接五、三表内连接查询六、交叉查询 一、单表查询 Hello,看到这篇博客的宝宝们,这段时间我真是勤快,持续更博呢!虽然表达得不是那么优美,但是,我努力跟大家分享自己的体会,happy! 我要先造几张表: 表一:userinfo 表二:schoolinfo 表三:address...

chan_fan的博客 2469

数据库查询基础:单表查询与多表查询

点关注,编程梦想家(大学生版)-优快云博客,不迷路❤❤数据库是现代软件开发中不可或缺的一部分,它帮助我们存储、检索和管理大量数据。在这篇文章中,我们将探讨数据库查询的两种基本形式:单表查询和多表查询。通过理解这些概念,你将能够更有效地与数据库进行交互。

weixin_49816293的博客 1669

数据库-----详谈sql语句单表查询,多表查询

数据查询是数据库中最常用的操作。SQL提供select语句在一定条件下对指定的基本表进行查询。由于查询需求的复杂程度不同,可分为单表查询和多表查询。两种查询将在后面依次进行介绍。 在介绍单表查询和多表查询之前,首先我们提出select 语句查询基本格式为: SELECT 属性列表 FROM 表名 [WHERE 条件表达式1] [GROUP BY 属性名1 [HAVING 条件表达式...

FDk_LCL的博客 2409

SQL多表查询、连接查询

本文概述了数据库表间关系的三种主要类型:一对多、多对多和一对一,并介绍了多表查询的分类与方法。一对多关系通过外键实现,多对多需借助中间表,而一对一关系则用于单表拆分优化。多表查询包括连接查询(内连接、外连接、自连接)、联合查询和子查询。内连接查询交集数据,外连接包含单边所有数据,自连接则实现表与自身的关联。联合查询合并结果集,子查询嵌套在SQL语句中,可分为标量、列、行和表子查询。文章通过具体案例和SQL语法展示了各类查询的实现方式,为数据库设计提供了实用指导。

m0_73849719的博客 920

sql中的多表查询

在SQL中,多表查询用于从多个表中组合数据,常见的方法包括 ​​ 和 ​。

m0_46322965的博客 2336
上一篇: 线性表的基础操作(C语言版)
下一篇: 江苏福彩投注站彩票投注助手(html+css+js)
Chensay.
博客等级 码龄6年 1万+粉丝 122原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值