云顶集团用户登录「官方网站」

热门关键词: 云顶集团用户登录,云顶集团登录网站
来自 关于我们 2020-01-05 19:21 的文章
当前位置: 云顶集团用户登录 > 关于我们 > 正文

内连接、外连接(左(或右) 外连接、满外连接

SELECT操作多表数据

有关连接的标题,在《SQL必知必会》学习笔记中已经讲到过,不过未有调节完全,所以再学一下。

SQL多表查询

JOIN连接

第风姿洒脱我们先来看一下最简便易行的总是。Products表和Vendors表的总是
示例1
Products表数据如下
图片 1
Vendors表数据如下
图片 2
将这两张表经过以下语句连接

USE test
SELECT prod_name,Products.vend_id,vend_name
FROM Products,Vendors
WHERE Products.vend_id=Vendors.vend_id;
--连接条件为两张表的vend_id相同

连接结果如下
图片 3
当顾客所需数据不在三个表中,而在两个表中,就须要动用多表连接,将多少个表中的数目整合到手拉手,使数码更加直观地突显出来。在上述语句中,通过JOIN大家得以从结果中很肯定地领略产物及其承包商。

等值和不等值连接查询

  • 从八个表中获取数据:若是在询问的时候,直接从多个表中获取数据。未有拉长条件判定,会现身“笛Carl积”错误
  • 笛Carl积错误
  • 笛Carl集会在上边条件下发生
    • 轻易连接条件
    • 连接条件不算
    • 具有表中的具有行相互连接
  • 为了防止笛Carl集, 能够在 WHERE 参加使得的接二连三条件。
  • Oracle 连接多表查询
  • 在 WHERE 子句中写入连接条件。
  • 在表中有相仿列时,在列名早先增长表名前缀

    SELECT table1.column, table2.column FROM table1, table2 WHERE table1.column1 = table2.column2;

内连接

内连接是风流罗曼蒂克种比较常用的数目连接查询方式,上述语句正是内接连。上边将提交另生龙活虎种内连接的语法。两个的询问结果是一模二样的。

--内连接INNER JOIN
USE test
SELECT prod_name,Products.vend_id,vend_name
FROM Products INNER JOIN Vendors--和上面语句差异之处
ON Products.vend_id=Vendors.vend_id;

注:使用INNEMuranoJOIN时,关键字INNE马自达MX-5可省略,可是接连条件必须用ON连接,无法用FROM了。

内连接分为等值连接,非等值连接和自然连接二种。

等值连接
SELECT employees.employee_id, employees.last_name, 
       employees.department_id, departments.department_id,
       departments.location_id
FROM   employees, departments
WHERE  employees.department_id = departments.department_id;
  • 分裂重复的列名(使用表名也许表的别名)
  • 利用表名前缀在多少个表中区分雷同的列。
  • 在差异表中具备相通列名的列能够用表的小名加以差距。
  • 接二连三 n个表,最少须要 n-1个接二连三条件。 比如:连接八个表,最少供给三个一而再三回九转条件。

    -- 演练:查询出集团职工的 last_name, department_name, city SELECT last_name, department_name, city FROM employees e ,departments d ,locations l WHERE e.department_id = d.department_id AND d.location_id = l.location_id

等值连接

连接条件用等号相连,查询结果中列出被接二连三表中的全部列,包含重复列。为了越发形象地反映“列出重复列”这些天性,接下去可能用Products和Vendors表来比喻。逻辑是:风流倜傥种产物能够对应三个代理商,二个经销商能够生育各种成品。
示例2
Products表数据如下
图片 4
Vendors表数据如下
图片 5
下一场施行等值连接的代码

SELECT * FROM Vendors,Products
WHERE Vendors.vend_id=Products.vend_id;

结果如图所示
图片 6
能够看来,在结果中vend_id列重复。

注:等值连接要满意2个标准,连接条件用=号,查询结果中隐含被连接表中装有列,包涵重复列。

非等值连接
-- EMPLOYEES表中的列工资应在JOB_GRADES表中的最高工资与最低工资之间
SELECT e.last_name, e.salary, j.grade_level
FROM   employees e, job_grades j
WHERE  e.salary BETWEEN j.lowest_sal AND j.highest_sal;
非等值连接

连天条件中动用除等号以外的可比运算符来比较连接列的列值。比如利用>,<,>=,<=,<>等,也可以应用范围运算符BETWEEN。上面用stu表和class表来示范非等值连接
示例3
新建stu表并插入数据,stu表用来表示学子和该学员的年级总成绩

    CREATE TABLE stu(
    sto VARCHAR(8) NOT NULL,
    stname VARCHAR(20) NOT NULL,
    stsex CHAR(2),
    stgrade FLOAT,
    CONSTRAINT pk_sto PRIMARY KEY(sto),
    CONSTRAINT ck_stsex CHECK(stsex in('男','女'))
    );
    INSERT INTO stu(sto,stname,stsex,stgrade)
    VALUES('20180101','李华','男','568'),
    ('20180102','张三','男','627'),
    ('20180103','孙丽','女','339'),
    ('20180104','袁康','男','482'),
    ('20180105','王婷','女','761'),
    ('20180106','赵四','男','568'),
    ('20180107','周其','女','348.5'),
    ('20180108','吴伟','男','528.5'),
    ('20180109','甄诚','女','702');
    SELECT * FROM stu;

stu表数据如下
图片 7
新建class表并插入数据,class表用来代表分班情况和年级总分之间的关联

    CREATE TABLE class(
    cla_no CHAR(2),
    cl CHAR(1),
    flag CHAR(6),
    gradelevel_h INT,
    gradelevel_l INT,
    CONSTRAINT pk_cla_no PRIMARY KEY(cla_no),
    CONSTRAINT ck_cl CHECK(cl in('A','B','C','D'))
    );
    INSERT INTO class(cla_no,cl,flag,gradelevel_l,gradelevel_h)
    VALUES('01','A','创新班','700','750'),
    ('02','B','重点','650','700'),
    ('03','B','重点','600','650'),
    ('04','C','提高','500','600'),
    ('05','C','提高','400','500'),
    ('06','D','补习','300','400'),
    ('07','D','补习','0','300');
    SELECT * FROM class;

Cla表数据如下
图片 8
今昔要透过查询直观反映出学子疏班情状

    SELECT sto,stname,cla_no,flag,stgrade
    FROM stu INNER JOIN class
    ON stu.stgrade<=class.gradelevel_h AND stu.stgrade>class.gradelevel_l
    ORDER BY sto;

结果如图所示
图片 9

内连接、外接连(左(或右) 外连接、满外连接State of Qatar

  • 内一而再再而三: 合併具有相符列的八个以上的表的行, 结果集中不带有三个表与另八个表不合营的行
  • 外接连: 三个表在三翻五次进程中除去回到满意再三再四条件的行以外还回去左(或右)表中不知足条件的行 ,这种连接称为左(或右) 外连接。未有匹配的行时, 结果表中相应的列为空(NULL卡塔尔国. 外接连的 WHERE 子句条件相符于在那之中连接, 但连接条件中没有相配行的表的列前面要加外连接运算符, 即用圆括号括起来的加号(+卡塔尔国.
当然连接

必要连接条件是肖似的属性组,且用等号连接,并在结果中把重复的性质列去掉。自然连接是去掉重复属性列的等值连接。
在SQL Server 二零零六中,不帮衬NATURAL JOIN关键字,在其余数据库中能够运用主要字NATURAL JOIN举办接二连三。

SELECT * FROM Vendors NATURAL JOIN Products;

上面包车型地铁多少个再三再四示例中,示例1是自然连接,示例2因为有再一次列vend_id由此不满意自然连接的定义。示例3因为延续条件不是用等号连接,且三番五次条件属性列分裂,因此不知足自然连接的定义。

注:对等值连接和自然连接的定义不是很清楚,后续弄驾驭了会有补充。

首要难题
1.贰个总是满意等值连接全数条件,唯独查询结果中不带有被连接表的有着列,而只含有部分列,是或不是是等值连接。
2.等值连接是否必需满含重复列,不满含重复列但满足等值连接其余条件,是还是不是就不是等值连接?英特网说本来连接是格外的等值连接,依据自然连接不分包重复列的定义,那么等值连接也足以不带有重复列。
3.毋庸置疑连接是不是供给连接条件的属性列列名和数据类型都雷同?即便仅列名不相同,别的条件都知足自然连接,是不是能够决断为本来连接。百度自然连接的定义说列名不肯定近似,但网络也是有的人说列名必需风流倜傥致。(答案是列名必需少年老成律。自然连接会活动相称列名相近列,假诺列名相仿,数据类型不一致,能拓宽隐式转换就能够匹配成功,无法进行隐式调换就能够报错)
Natural Join: Guidelines

  • The associated tables have one or more pairs of identically named columns.
  • The columns must be the same data type.
  • Don’t use ON clause in a natural join.

    注:关于两表中包含五个相近列,怎么着抉择部分列作为三回九转字段进行自然连接,在别的随笔中再详述。

    ##### 外连接

    与内接连的界别在于,假诺表中有多少在另一张表中找不到三回九转对象,内一而再一而再的做法是在结果中忽视那几个数量不打印,而外连接的做法是打字与印刷那个多少,而那几个多少在另一张表中的连年对象则打字与印刷成NULL。
    参加外接连的表有主从之分,依据表的岗位和说话中内定的主要性字,外接连可分为左外连接,右外连接,完全连接。

    ###### 左外连接(LEFT OUTE凯雷德 JOIN)

    回来JOIN侧边表全体行,且重返JOIN右边表中能相配上的行并对八个表的行开展相配。

    ###### 右外接连(福睿斯IGHT OUTRE JOIN)

    回到JOIN左边表全体行,且重回JOIN侧边表中能相配上的行并对五个表的行开展相配。

    ###### 完全连接(FULL OUTE奥迪Q7 JOIN)

    归来JOIN左右两边表全部能合营的行和不能同盟的行。
    下边依次举个例子
    示例4:Student表和Stu_Grade表
    Student表数据如下
    图片 10
    Stu_Grade表数据如下
    图片 11

    ###### 对Student表和Stu_Grade表的左外连接

SELECT* FROM Student--左外连接,Student表为主,Stu_Grade表为从
LEFT OUTER JOIN Stu_Grade
ON Student.stu_id=Stu_Grade.stu_id;

询问结果如图所示
图片 12
图中显示了主表(Student)的全部行和从表(Stu_Grade)的有个别行。

内连接
SELECT e.last_name, d.department_name 
FROM employees e, departments d
WHERE e.department_id = d.department_id

-- SQL1999语法的方式
SELECT e.last_name, d.department_name 
FROM employees e 
INNER JOIN departments d ON e.department_id = d.department_id
对Student表和Stu_Grade表的右外接连
SELECT* FROM Student--右外连接,Student表为从,Stu_Grade表为主
RIGHT OUTER JOIN Stu_Grade
ON Student.stu_id=Stu_Grade.stu_id;

询问结果如图所示
图片 13
图中浮现了主表(Stu_Grade)的全数行和从表(Student)的有的行。

外连语法
  • 动用外接连能够查询不满足接二连三条件的数目。
  • 外接连的暗号是 (+State of Qatar。

  • 右外连接

    SELECT table1.column, table2.column FROM table1, table2 WHERE table1.column(+) = table2.column;

    -- 示例 SELECT e.last_name, d.department_name FROM employees e, departments d WHERE e.department_id(+) = d.department_id

    -- SQL1999方式 SELECT e.last_name, d.department_name FROM employees e RIGHT OUTER JOIN departments d ON (e.department_id = d.department_id)

  • 左外连接

    SELECT table1.column, table2.column FROM table1, table2 WHERE table1.column = table2.column(+);

    -- 示例 SELECT e.last_name, d.department_name FROM employees e, departments d WHERE e.department_id = d.department_id(+)

    -- SQL1999方式 SELECT e.last_name, d.department_name FROM employees e LEFT OUTER JOIN departments d ON (e.department_id = d.department_id)

本文由云顶集团用户登录发布于关于我们,转载请注明出处:内连接、外连接(左(或右) 外连接、满外连接

关键词: