查询不同表信息(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自连接这张表,通过递归方式查询每个员工对应的上级领导。
总结
多表查询是数据库应用中经常遇到的需求。使用连接操作,我们可以将多张表连成一张表,方便快捷地查询相关信息。在实际使用中,需要根据具体的业务场景选择合适的连接方式,以达到最佳的查询效果。