MySQL中的内连接(Inner Join)是一种用于合并两个或多个表中符合特定条件的行的方法。内连接返回仅在连接条件满足的情况下存在于两个表中的行。内连接通常用于检索具有相关信息的数据,以便将它们合并在一起。
简单来说就是通过内连接检索表之间的关系,然后进行相关的操作
内连接的语法:
使用INNER JOIN
关键字:
SELECT columns
FROM table1
INNER JOIN table2 ON table1.column = table2.column;
这是最常见的内连接语法,使用INNER JOIN
关键字,后跟连接的表以及连接条件。
使用,
逗号(隐式内连接):
SELECT columns
FROM table1, table2
WHERE table1.column = table2.column;
在FROM
子句中列出多个表,然后在WHERE
子句中指定连接条件。这是一种隐式内连接的写法。
使用USING
子句:
SELECT columns
FROM table1
INNER JOIN table2 USING (common_column);
使用USING
子句可以简化连接条件,前提是两个表中具有相同名称的列,这样的列称为共享列。
使用ON
子句:
SELECT columns
FROM table1
JOIN table2 ON table1.column = table2.column;
ON
子句用于指定连接条件,可以在JOIN
关键字之后使用。
下面我们看一个例子来快速入门内连接的使用
假设有两个表,一个是“users”表,另一个是“orders”表。这两个表之间有一个共同的列“user_id”:
CREATE TABLE users (
user_id INT PRIMARY KEY,
username VARCHAR(50)
);
CREATE TABLE orders (
order_id INT PRIMARY KEY,
user_id INT,
product_name VARCHAR(50),
amount DECIMAL(10, 2)
);
INSERT INTO users (user_id, username) VALUES
(1, 'Alice'),
(2, 'Bob'),
(3, 'Charlie');
INSERT INTO orders (order_id, user_id, product_name, amount) VALUES
(101, 1, 'Laptop', 1200.00),
(102, 2, 'Smartphone', 800.00),
(103, 1, 'Tablet', 300.00),
(104, 3, 'Headphones', 50.00);
现在,我们可以使用内连接来获取用户和他们的订单信息:
SELECT users.user_id, users.username, orders.order_id, orders.product_name, orders.amount
FROM users
INNER JOIN orders ON users.user_id = orders.user_id;
select输出所有的表中字段速度会大于*号这种写法的速度
左外连接指的就是说使用关键字left进行查询
基本写法:
SELECT 字段列表 FROM 表1 LEFT [outer] JOIN 表二 ON 连接条件
这个字段列表的位置,是按照你需要的需求进行填写,该部分内容可以直接使用别名.字段名的形式书写
使用写法同左连接一样但是关键词是不同的,有链接使用的关键词是right,基本语法
SELECT 字段列表 FROM 表1 LEFT [outer] JOIN 表二 ON 连接条件
直接使用该内容,效果同左连接一样,只是区别写的顺序。
使用嵌套select语句 称为嵌套查询又称子查询
形式 :select * from t1 where column1 = (select column1 from t2.....)
子查询外部的语句可以是insert/update/select其中的任何一个
在 WHERE
子句中使用子查询作为条件:
SELECT column1, column2, ...
FROM table_name
WHERE column_name IN (SELECT column_name FROM another_table);
在 FROM
子句中使用子查询作为数据源:
SELECT *
FROM (SELECT column1, column2, ... FROM table_name) AS derived_table;
在 SELECT
子句中使用子查询作为列:
SELECT column1, column2, (SELECT column3 FROM another_table) AS column_alias
FROM table_name;
需要注意的是,在使用子查询时,你需要确保子查询的结果与外部查询相兼容,并且不会引起性能问题。子查询的结果可以是单行单列,也可以是多行多列,取决于你的需求。