美文网首页
数据库高级操作——查询

数据库高级操作——查询

作者: Harper324 | 来源:发表于2019-03-29 14:01 被阅读0次

查询

1、子查询

子查询:允许把一个查询嵌套在另一个查询当中的查询

Table: student
+----+-----------+-----+-----+
| id | name      | age | sex |
+----+-----------+-----+-----+
|  1 | 小明      |  18 | 男  |
|  2 | 李四      |  20 | 女  |
|  3 | 王五      |  30 | 男  |
|  4 | 王明刚    |  40 | 男  |
+----+-----------+-----+-----+

Table: score
+------+------------+---------+-------+
| id   | student_id | subject | score |
+------+------------+---------+-------+
|    1 |          1 | 语文    |    80 |
|    2 |          2 | 语文    |    70 |
+------+------------+---------+-------+

举个例子:查询小明的语文成绩

SELECT score FROM score WHERE subject = '语文' AND student_id = (
SELECT id FROM student_info WHERE name = '小明'
);

2、联结查询

联结就是一种机制,用来在一条SELECT语句中关联表,因此称之为联结。 其意义在于:在用户查看数据的时候, 需要显示的数据来自多张表。

1. 内联结

又叫等值联结,基于两个表之间的相等测试,返回两个或者多个表之间相等关系的数据,用数学关系来看,相当于求交集。

内联结.JPG

语法:

SELECT * FROM table1 AS t1 INNER JOIN table2 AS t2 ON t1.column = t2.column;

举个例子:查询学生表中有成绩的学生

mysql> SELECT s1.name, s2.subject, s2.score FROM student_info AS s1 INNER JOIN score AS s2 ON s1.id = s2.student_id;
+--------+---------+-------+
| name   | subject | score |
+--------+---------+-------+
| 小明   | 语文    |    80 |
| 李四   | 语文    |    70 |
+--------+---------+-------+
2 rows in set (0.00 sec)
2. 外联结

外联结又可以分为左外联结和右外联结

左外联结:以左表为主表,返回左表中的所有数据

左外联结.JPG

语法:

SELECT * FROM table1 AS t1 LEFT JOIN table2 AS t2 ON t1.column = t2.column;

举个例子:返回所有学生的成绩

mysql> SELECT s1.name, s2.subject, s2.score FROM student_info AS s1 LEFT JOIN score AS s2 ON s1.id = s2.student_id;
+-----------+---------+-------+
| name      | subject | score |
+-----------+---------+-------+
| 小明      | 语文    |    80 |
| 李四      | 语文    |    70 |
| 王五      | NULL    |  NULL |
| 王明刚    | NULL    |  NULL |
+-----------+---------+-------+
4 rows in set (0.00 sec)

右外联结:以右边为主表,返回右表中的所有数据

右外联结.JPG

语法:

SELECT * FROM table1 AS t1 RIGHT JOIN table2 AS t2 ON t1.column = t2.column;

举个例子:返回有成绩的学生

select t1.name,t2.subject,t2.score from student as t1 right join score as t2 on t1.id=t2.student_id;
+-----------+---------+-------+
| name      | subject | score |
+-----------+---------+-------+
| 小明      | 语文    |    80 |
| 李四      | 语文    |    70 |
+-----------+---------+-------+

3、组合查询

MySQL允许执行多个查询(多条SELECT语句),并将结果作为单个查询结果集返回。这些组合查询通常称为并(union)符合查询(compound query)

语法:

SELECT * FROM table1 WHERE condition 
UNION
SELECT * FROM table2 WHERE condition;

举个例子:查询学生表中年龄超过20岁或者是男生的

mysql> SELECT * FROM student_info WHERE age > 20 
    -> UNION 
    -> SELECT * FROM student_info WHERE sex = '男';
+----+-----------+-----+-----+
| id | name      | age | sex |
+----+-----------+-----+-----+
|  3 | 王五      |  30 | 男  |
|  4 | 王明刚    |  40 | 男  |
|  1 | 小明      |  18 | 男  |
+----+-----------+-----+-----+
3 rows in set (0.05 sec)

三种查询方式的区别:

1、查询过程的区别:

子查询是由内到外的查询;联结查询是从多张表中取出信息进行匹配;组合查询是同时执行多条查询语句,并将查询结果一起返回

2、查询效率的区别:

子查询是从里到外的查询,效率比较低;

3、使用场景的区别:

  • 查询的表过多时,子查询嵌套结构复杂,可读性低;
  • 联结查询用于从多张表中获取数据;
  • 在单个查询中,从不同表中返回类似结构的数据以及对单个表执行多个查询,按照单个查询返回数据时,使用组合查询

相关文章

  • SQL 查询命令

    一 数据库基本操作 二 高级查询 1. 新建表结构 2. 聚合查询 3. 多表查询 4. 连接查询 关于INNER...

  • 数据库高级操作——查询

    查询 1、子查询 子查询:允许把一个查询嵌套在另一个查询当中的查询 举个例子:查询小明的语文成绩 2、联结查询 联...

  • MongoDB开发之 Shell基本操作

    引子 运行 数据库 查看当前数据库: 选择数据库: 创建 执行插入操作: 查询 查询单条数据: 更新 执行查询操作...

  • [学习]SQLite操作(二)

    今天学习了数据库的简单的查询操作。现在还没有用上高级的查询,而是普通的查询。 今天这个是接着昨天的,使用昨天创建的...

  • sqlite数据库

    创建数据库 修改数据库 插入操作 修改 查询操作

  • Hive高级查询

    Hive高级查询 查询操作group by、Order by 、Join 、distribute by 、Sort...

  • Laravel数据库操作之-增删改查CURD操作

    数据库增删改查CURD操作 数据库操作之-查询构造器 查询构造器简介及新增数据 使用查询构造器修改数据 使用查询构...

  • HelloDjango - Python+Django+xadm

    第三篇我们来学习模型的操作,即数据库操作。 数据库操作 查询 查询所有数据urls => url(r'^query...

  • Mysql学习之二 Mysql概念及安装

    一、程序员的数据库要求 基本的SQL操作、CRUD操作 多表连接查询、分组查询和子查询。 常用数据库的的单行函数。...

  • python 教程笔记day10

    Python3 MySQL 数据库连接 数据库连接 创建数据库表 数据库插入操作 数据库查询操作 数据库更新操作 ...

网友评论

      本文标题:数据库高级操作——查询

      本文链接:https://www.haomeiwen.com/subject/xtslbqtx.html