📜  SQL – 使用 MS SQL Server 从多个表中选择

📅  最后修改于: 2022-05-13 01:54:26.539000             🧑  作者: Mango

SQL – 使用 MS SQL Server 从多个表中选择

SQL 中 我们也可以通过对多个表使用SELECT 来从多个表中检索数据,这实际上导致所有表的CROSS JOIN 。从两个CROSS JOIN产生的结果表包含第二个表的所有行组合,该表是表的笛卡尔积。如果我们考虑 table1 包含 m 行而 table2 包含 n 行,则选择两个表后的结果表即两个表的交叉连接包含m*n 行

让我们看看如何使用MSSQL服务器选择多个表:

创建数据库:

使用以下 SQL 查询创建数据库 GeeksForGeeks,如下所示。

CREATE DATABASE GeeksForGeeks;

使用数据库:

使用数据库 student 使用以下 SQL 查询如下。



USE GeeksForGeeks;

创建表:

使用SQL查询创建三个表 student, branch_details , credit_details如下:

CREATE TABLE student
(  
stu_id varchar(10),
stu_name varchar(20),
branch varchar(20)
);

CREATE TABLE branch_details
(  
branch_name varchar(10),
subjects INT
);

CREATE TABLE credit_details
(  
branch varchar(20), 
max_credits INT,
min_credits_required INT
);

验证数据库:

使用如下SQL查询查看数据库GeeksForGeeks中三个表的描述。

EXEC sp_columns student;
EXEC sp_columns branch_details;
EXEC sp_columns credit_details;

将数据插入到三个表中:

使用以下 SQL 查询将行插入表中,如下所示:



INSERT INTO student VALUES
('1901401','DEVA','C.S'),
('1901402','HARSH','C.S'),
('1901403','DAVID','E.C'),
('1901404','GAURAV','E.C');

INSERT INTO branch_details VALUES
('C.S',8),
('E.C',7),
('M.E',7),
('I.C.E',9),
('E.E.E',8);

INSERT INTO credit_details VALUES
('C.S',24, 12),
('E.C',21, 11),
('M.E',21, 11),
('I.C.E',27,14),
('E.E.E',24,12);

验证插入的数据:

插入行后使用以下SQL查询查看三个表,如下所示。

SELECT * FROM student;
SELECT * FROM branch_details;
SELECT * FROM credit_details;

对 n 个表使用 SELECT 语句:

SYNTAX:
SELECT columns
FROM table_1, table_2,...table_n
WHERE condition; 

对 2 个表 student、branch_details 使用 SELECT 语句:

SELECT * FROM student, branch_details;

该表包含 4*5 = 20 行。

对 3 个表 student、branch_details、credit_details 使用 SELECT 语句:

SELECT * FROM student, branch_details, credit_details;

结果表包含 5*4*5 = 100 行。

我们可以通过选择多个表并在WHERE子句中提及适当的条件来获得其他类型的连接,但不是对多个表使用SELECT并且使用连接的关键字添加条件是更优化的。

例子:

查询以显示已注册课程的学生及其详细信息。

SELECT student.stu_id, student.stu_name,
student.branch, subjects, max_credits
FROM student, branch_details, credit_details
WHERE student.branch = branch_details.branch_name AND 
branch_details.branch_name = credit_details.branch;

注意:当不同表中存在同名列时,最好用点运算符指向特定表数据。