9.5 数据的内连接查询
连接是关系数据库模型的主要特点,连接查询是关系数据库中最主要的查询,主要包括内连接、外连接等。内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被链接列的列值。
具体语法格式如下:
SELECT col_name1,col_name2,...
FROM table1 INNER JOIN table2
ON conditions
各参数说明:
- table1:数据表1,通常在内连接中被称为左表;
- table2:数据表2,通常在内连接中被称为右表;
- INNER JOIN:内连接的关键字;
- ON conditions:设置内连接中的条件;
9.5.1 内连接的简单查询
内连接可以理解为等值连接,它的查询结果全部都是符合条件的数据。
例:使用内连接查询员工信息表和部门信息表
SELECT * FROM employee
INNER JOIN dept
ON employee.deptcode=dept.deptid
9.5.2 相等内连接的查询
相等连接又叫等值连接,在连接条件中使用等于号(=)运算符比较被链接列的列值,其查询结果中列除被链接表中所有列,包括其中的重复列。
employee表中的deptcode与dept表中的deptid具有相同的含义,两个表通过这个字段建立联系。
接下来,从employee中查询出name、salary字段,从dept中查询出deptid、deptname。
SELECT deptid,name,deptname,salary
FROM employee INNER JOIN dept
ON employee.deptcode=dept.deptid
9.5.3 不等内连接的查询
不等内连接查询是旨在连接条件中使用除 等于运算符 以外的其他比较运算符,比较被链接的列的列值。这些运算符包括“>”“>=”“<=”“<”“!>”“!<”和“<>”。
例:使用不等内连接查询employee和dept中所有的记录
SELECT deptid,deptname,name,salary
FROM employee INNER JOIN dept
ON deptcode<>deptid
本查询其实就是把表dept中原本部门编号为“1”,部门名称为“行政部”,映射表employee中部门编码为“1”记录的连接查询,更换为映射表employee中部门编码不是“1”的记录。
以此类推
9.5.4 特殊的内连接查询
如果在一个连接查询中,涉及的两张表都是同一张表,这种查询称为自连接查询,也被称为特殊的内连接,它是指相互连接的表在物理上为同一张表,但可以在逻辑上分为两张表。
为了方便演示,我们先创建这样一张表:
USE mydatebase
CREATE TABLE deptment
(
id INT primary key,
deptname VARCHAR(20) NOT NULL,
parentcode INT
)
然后,再插入如下几条记录
INSERT INTO deptment VALUES (1,'销售部','')
INSERT INTO deptment VALUES (2,'人事部','')
INSERT INTO deptment VALUES (3,'销售一部',1)
INSERT INTO deptment VALUES (4,'销售二部',1)
INSERT INTO deptment VALUES (5,'人事一部',2)
INSERT INTO deptment VALUES (6,'人事二部',2)
到此,准备工作结束。
例:列出所有部门名称以及它们对应的上级部门名称
SELECT a.deptname 部门名称,b.deptname 上级部门
FROM deptment a INNER JOIN deptment b
ON a.parentcode=b.id
9.5.5 带条件的内连接查询
带选择条件的连接查询时在连接查询过程中,通过添加过滤条件限制查询的结果,使查询的结果更加准确。
例:在employee表和dept表中,使用INNER JOIN羽语法,查询employee表中部门编号为2的员工编号、姓名与工作地点,
SELECT a.code,a.name,b.addr
FROM employee a INNER JOIN dept b
on a.deptcode=b.deptid and a.deptcode=2