【数据库多表操作】sql语句基础及进阶

常用数据库:

数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它是长期存储在计算机内、有组织、有结构的数据集合。数据库是信息系统的核心部分,现代软件系统中大量采用了数据库管理系统(DBMS)来管理和操作数据。

  • MySQL/MariaDB:由于其开源免费和社区支持,成为了最流行的关系型数据库之一。
  • Oracle:商业数据库,广泛用于企业级应用。
  • Microsoft SQL Server:商业数据库,主要运行在 Windows 操作系统上,广泛用于企业级应用。
  • PostgreSQL:开源免费的关系型数据库,具有高级特性,例如事务、联接和触发器。
  • IBM DB2:商业数据库,主要运行在 IBM 的操作系统上,如 AIX、IBM i 和 z/OS 等。
  • SQLite:开源免费的嵌入式数据库,可以嵌入到其他应用程序中使用。
  • MongoDB:非关系型数据库,主要用于存储非结构化数据,具有高扩展性和灵活性。

平时最常见的是MySQL数据库,是一个流行的关系型数据库管理系统,是开放源代码的。它支持各种操作系统,并提供了一组丰富的工具和库,用于处理大量的数据。MySQL 使用 SQL 语言来管理和查询数据。本文以MySQL数据库为例,讲解数据库表与表的连接操作。

简单数据库连接

在数据库中,有多种连接(Join)的方式可以使用,其中最常见的包括:内连接,左连接,右连接,外连接。

首先创建两个表t1,t2,表结构如下图所示:
在这里插入图片描述
在这里插入图片描述
sql语句如下:

use student;
create table t1(id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(50),
  age INT);
  
  create table t2(id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(50),
  address VARCHAR(50));
  
insert into t1 value(1,"张三",52);
insert into t1 value(2,"王五",25);
insert into t1 value(3,"李四",36);
insert into t2 value(1,"张三","陕西");
insert into t2 value(2,"王五","北京");
insert into t2 value(3,"李四","山东");
insert into t2 value(4,"老王t1","河南");

笛卡尔积(Join)

笛卡尔积是指将两个表中的每一行都进行组合,生成一个新的表。新表的行数等于两个原表行数的乘积。

SELECT *  FROM t1, t2;   or
select * from t1 join t2

结果如下所示:
在这里插入图片描述

内连接(Inner Join)

它只返回两个表中都有匹配的行。具体来说,它只返回左边表和右边表都满足条件的记录。

select * from t1 inner join t2 on t1.id = t2.id;

结果如下:
在这里插入图片描述

左连接(Left Join)

它返回左边表的所有记录,以及右边表中与左边表匹配的记录。如果右边表中没有匹配的记录,则以 NULL 值填充。

select * from t2 left join t1 on t1.id = t2.id

结果如下所示
在这里插入图片描述
t1表中没有老王,所以t1表中老王的属性设为NULL。
右连接(Right Join)

它返回右边表的所有记录,以及左边表中与右边表匹配的记录。如果左边表中没有匹配的记录,则以 NULL 值填充。

select * from t1 right join t2 on t1.id = t2.id

和左连接基本一样,返回t2表中所有值,t1表中老王的属性设为NULL。
外连接(union)

它包含左连接和右连接,以及一些没有匹配的记录。它分为左外连接和右外连接,左外连接返回左边表的所有记录和右边表中与左边表匹配的记录,右外连接返回右边表的所有记录和左边表中与右边表匹配的记录。

SELECT *
FROM t1
LEFT JOIN t2 ON t1.id = t2.id
UNION
SELECT *
FROM t1
RIGHT JOIN t2 ON t1.id = t2.id
WHERE t1.id IS NULL;

在这里插入图片描述
子表查询

子查询是指在查询语句内部使用另一个完整的 SELECT 语句,子查询一般嵌套在 WHERE 子句中,作为过滤条件。子查询常常用于获取符合某些条件的数据行。

例如,假设有一个学生表 student 和一个成绩表 score,现在要查询出所有及格的学生的信息,可以使用子查询实现,如下:

SELECT *
FROM student
WHERE id IN (SELECT id FROM score WHERE score >= 60);

在这个查询中,内部的子查询 SELECT id FROM score WHERE score >= 60 返回了所有及格的学生的 id,然后外部的查询根据这些 id 查询出对应的学生信息。

concat
数据库中的concat()函数可以用来连接两个或多个字符串,在MySQL中,它的语法如下:

concat(str1,str2,...)

用t1和t2表举个例子

select concat(id,' ',name) as fullname from t1;

这个查询会将t1表里的id和name属性拼接起来连成一个字符串,并将结果显示在名为fullname的新列中,结果如下:
在这里插入图片描述
总结
这里总结一下sql语句中常用的关键字,如果能灵活在数据库中使用会很方便。

  1. SELECT:用于查询数据库中的数据。
  2. FROM:指定数据表。
  3. WHERE:用于筛选符合条件的记录。
  4. GROUP BY:将查询结果按照指定的列进行分组。
  5. HAVING:对分组后的结果进行筛选。
  6. ORDER BY:对查询结果进行排序。
  7. JOIN:用于连接两个或多个数据表。
  8. UNION:用于合并两个或多个SELECT语句的结果集。
  9. DISTINCT:用于返回不同的值,去除重复的记录。
  10. LIKE:用于模糊匹配查询。
  11. IN:用于指定一组值。
  12. NOT:用于否定一个条件。
  13. EXISTS:用于判断一个子查询是否返回数据。
  14. CONCAT:用于将两个或多个字符串拼接起来。
  15. SUM、AVG、COUNT、MAX、MIN:用于对查询结果进行聚合计算。
  16. AS:用于给查询结果指定别名。

猜你喜欢

转载自blog.csdn.net/qq_44878985/article/details/130303737
今日推荐