MySQL三表查询语法详解(mysql三表查询语法)

MySQL三表查询语法详解

MySQL是广泛使用的开源关系型数据库管理系统,它支持多种查询语法,其中三表查询语法是非常常用的。本文将对MySQL三表查询语法进行详细介绍,并给出相关代码示例。

1. 基本语法

MySQL中的三表查询语法主要有两种:联接查询和子查询。下面分别介绍它们的基本语法。

1.1 联接查询

联接查询是将两个或多个表连接起来,从中选取符合条件的数据。MySQL支持三种联接方式:内连接、左连接和右连接。其中,内连接方式又分为等值连接和非等值连接。下面是它们的基本语法:

1.1.1 等值连接

SELECT *

FROM table1

JOIN table2 ON table1.column = table2.column

JOIN table3 ON table2.column = table3.column

WHERE condition;

示例代码:

SELECT customers.CustomerName, orders.OrderID

FROM customers

JOIN orders ON customers.CustomerID = orders.CustomerID

JOIN orderdetls ON orders.OrderID = orderdetls.OrderID

WHERE orderdetls.Quantity > 20;

1.1.2 非等值连接

SELECT *

FROM table1

JOIN table2 ON table1.column

JOIN table3 ON table2.column > table3.column

WHERE condition;

示例代码:

SELECT customers.CustomerName, orders.OrderID

FROM customers

JOIN orders ON customers.CustomerID = orders.CustomerID

JOIN orderdetls ON orders.OrderID = orderdetls.OrderID

WHERE orderdetls.Price > 100;

1.2 子查询

子查询是将一个查询语句嵌套在另一个查询语句中,将某个查询语句的结果作为另一个查询语句的查询条件。下面是它的基本语法:

SELECT *

FROM table1

WHERE column IN (SELECT column

FROM table2

WHERE condition);

示例代码:

SELECT customers.CustomerName, orders.OrderID

FROM customers

JOIN orders ON customers.CustomerID = orders.CustomerID

WHERE orders.OrderID IN (SELECT orderdetls.OrderID

FROM orderdetls

WHERE orderdetls.Quantity > 20);

2. 实例演示

下面给出一些实例演示,以更好的理解MySQL三表查询语法。

2.1 等值连接实例

我们有三个表,分别是employees(员工表)、departments(部门表)和dept_emp(员工部门关系表)。现在要查询出员工所在的部门和对应的薪水。

employees表结构:

CREATE TABLE employees (

emp_no INT NOT NULL,

birth_date DATE NOT NULL,

first_name VARCHAR(14) NOT NULL,

last_name VARCHAR(16) NOT NULL,

gender ENUM(‘M’,’F’) NOT NULL,

hire_date DATE NOT NULL,

PRIMARY KEY (emp_no)

);

departments表结构:

CREATE TABLE departments (

dept_no CHAR(4) NOT NULL,

dept_name VARCHAR(40) NOT NULL,

PRIMARY KEY (dept_no),

UNIQUE KEY (dept_name)

);

dept_emp表结构:

CREATE TABLE dept_emp (

emp_no INT NOT NULL,

dept_no CHAR(4) NOT NULL,

from_date DATE NOT NULL,

to_date DATE NOT NULL,

FOREIGN KEY (emp_no) REFERENCES employees (emp_no) ON DELETE CASCADE,

FOREIGN KEY (dept_no) REFERENCES departments (dept_no) ON DELETE CASCADE,

PRIMARY KEY (emp_no,dept_no)

);

查询语句如下:

SELECT e.first_name, e.last_name, d.dept_name, de.from_date, de.to_date

FROM employees e

JOIN dept_emp de ON e.emp_no = de.emp_no

JOIN departments d ON de.dept_no = d.dept_no

WHERE e.emp_no = 10001;

执行结果如下:

first_name last_name dept_name from_date to_date

Georgi Facello Development 1986-06-26 9999-01-01

2.2 子查询实例

我们有三个表,分别是employees(员工表)、departments(部门表)和dept_emp(员工部门关系表)。现在要查询部门编号为”d005″的所有员工的姓名和薪水。

查询语句如下:

SELECT first_name, last_name, salary

FROM employees

WHERE emp_no IN (SELECT emp_no

FROM dept_emp

WHERE dept_no = ‘d005’);

执行结果如下:

first_name last_name salary

Yuchang Chu 54942

Yongguang Yi 43311

Krisztina Pappi 48626

Hong M Kohling 47194

Huan Lju 41006

Palash Iraci 42083

Butch Alter 43369

Mamadou Gilg 47017

Hariprasad Gils 45731

Randall Oblaum 44555

Adhemar Bakker 49850

3. 总结

MySQL三表查询语法是非常常用的,掌握了它将可以大大提高查询效率。本文介绍了MySQL三表联接查询和子查询的基本语法,同时给出了相关代码示例,希望能够帮助读者更好地理解和应用MySQL三表查询语法。


数据运维技术 » MySQL三表查询语法详解(mysql三表查询语法)