查询不同表信息(mysql不同的库里联合)

查询不同表信息

在数据库中,经常需要查询不同表的信息。比如查询某个学生的基本信息,还要同时查询他的成绩信息;或者查询某个订单的基本信息,还要同时查询它包含哪些商品等等。这时候就需要使用SQL的连接操作,将不同的表连接起来,实现多表查询。

1. 内连接(INNER JOIN)

内连接是最基本的连接方式,它将两个表中的共同字段连接在一起,只返回这两个表中都存在的记录。语法如下:

SELECT * FROM 表1 INNER JOIN 表2 ON 表1.共同字段 = 表2.共同字段

示例代码:

CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
age INT NOT NULL,
gender VARCHAR(10) NOT NULL,
class_id INT NOT NULL
);
CREATE TABLE classes (
id INT PRIMARY KEY,
name VARCHAR(20) NOT NULL
);
INSERT INTO students VALUES (1, '张三', 18, '男', 1);
INSERT INTO students VALUES (2, '李四', 19, '男', 1);
INSERT INTO students VALUES (3, '王五', 20, '女', 2);

INSERT INTO classes VALUES (1, '一班');
INSERT INTO classes VALUES (2, '二班');
SELECT students.id, students.name, classes.name FROM students INNER JOIN classes ON students.class_id = classes.id;

以上代码中,我们创建了两个表students和classes,students表中有一个class_id字段,它表示学生所在的班级,classes表中有一个id字段,表示班级的编号。我们使用INNER JOIN将这两个表连接起来,查询学生的姓名和所在班级的名称。

2. 外连接(LEFT JOIN/RIGHT JOIN)

外连接包含左外连接和右外连接,它们可以返回一个表中所有的记录,以及另一个表中匹配的记录。如果匹配不到,用NULL填充。语法如下:

SELECT * FROM 表1 LEFT JOIN 表2 ON 表1.共同字段 = 表2.共同字段
--或
SELECT * FROM 表1 RIGHT JOIN 表2 ON 表1.共同字段 = 表2.共同字段

示例代码:

CREATE TABLE orders (
id INT PRIMARY KEY,
customer VARCHAR(20) NOT NULL,
date DATE NOT NULL
);
CREATE TABLE order_items (
id INT PRIMARY KEY,
order_id INT NOT NULL,
product VARCHAR(20) NOT NULL,
amount INT NOT NULL
);
INSERT INTO orders VALUES (1, '张三', '2021-01-01');
INSERT INTO orders VALUES (2, '李四', '2021-01-02');
INSERT INTO order_items VALUES (1, 1, '商品A', 2);
INSERT INTO order_items VALUES (2, 1, '商品B', 3);
INSERT INTO order_items VALUES (3, 2, '商品C', 1);

SELECT orders.id, orders.customer, order_items.product, order_items.amount FROM orders LEFT JOIN order_items ON orders.id = order_items.order_id;

以上代码中,我们创建了两个表orders和order_items,orders表中存储订单的基本信息,order_items表中存储订单中包含的商品信息。使用LEFT JOIN将这两个表连接起来,查询订单id、顾客、商品名称和数量。

3. 自连接

自连接是一种比较特殊的连接方式,它将一个表连接到它本身上,通常用于解决一些树形结构的查询问题。语法如下:

SELECT t1.字段, t2.字段 FROM 表 t1 INNER JOIN 表 t2 ON t1.共同字段 = t2.共同字段

示例代码:

CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
manager_id INT
);
INSERT INTO employees VALUES (1, '张三', NULL);
INSERT INTO employees VALUES (2, '李四', 1);
INSERT INTO employees VALUES (3, '王五', 1);
INSERT INTO employees VALUES (4, '赵六', 2);
SELECT e1.name, e2.name AS manager FROM employees e1 INNER JOIN employees e2 ON e1.manager_id = e2.id;

以上代码中,我们创建了一个employees表,它存储员工的基本信息和上级领导的id。我们使用INNER JOIN自连接这张表,通过递归方式查询每个员工对应的上级领导。

总结

多表查询是数据库应用中经常遇到的需求。使用连接操作,我们可以将多张表连成一张表,方便快捷地查询相关信息。在实际使用中,需要根据具体的业务场景选择合适的连接方式,以达到最佳的查询效果。


数据运维技术 » 查询不同表信息(mysql不同的库里联合)