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三表查询语法。