博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL 查询 总结 【行子查询 ; 列子查询 ; 表子查询 ; 自链接 ; 内连接 ;外连接 ; 无规则链接 ……】...
阅读量:4957 次
发布时间:2019-06-12

本文共 2285 字,大约阅读时间需要 7 分钟。

简单介绍一下连接方式:

   1.1.使用无连接规则连接两表   

    无限规则  也就简单的 select * from tableA , tableB  即得到一个笛卡尔积。  什么是 笛卡尔积 在 我的 另外一篇文章中

  1.2 .使用有连接规则连接两表

    也就是在 上边的基础上 加上 条件 select * from tableA , tableB where  tableA .colom1 = tableB .colom

  1.3. 使用多表连接查询数据

    相对于上边的1.2来说   select * from tableA , tableB,tableC  where  tableA .colom1 = tableB .colom and tableA.pid = tableC.id 

二  高级连接查询

  2.1 . inner join  下边是 连接语法

SELECT *FROM 表名1INNER JOIN 表名2ON 连接规则1INNER JOIN 表名3ON 连接规则 2

 2.2自链接查询:

SELECT a.* FROM `users` as a INNER JOIN  `users` as b WHERE a.user_id = b.user_id

2.3 外连接

  2.3.1 ?外连接  右外连接  这里只写 一个 右外连接  ?的同理  【左外连接就是 包含 左边表的所有内容和右边的需要相关联的内容】

SELECT *FROM STU_INFORIGHT OUTER JOIN SCOREON STU_INFO.SNO=SCORE.SNO

2.4全外连接

SELECT *FROM STU_INFOFULL OUTER JOIN SCOREON STU_INFO.SNO=SCORE.SNO

2.5 组合查询

这个不多做赘述 主要是因为怕解释不到位 以 union  链接 函数为例子‘

首先简单介绍下 union 的使用方法 详情介绍的看   

SELECT 列名称 FROM 表名称 UNION SELECT 列名称 FROM 表名称 ORDER BY 列名称;SELECT 列名称 FROM 表名称 UNION ALL SELECT 列名称 FROM 表名称 ORDER BY 列名称;
SELECT *FROM STU_INFOWHERE DEPART=’外语系’UNIONSELECT *FROM STU_INFOWHERE YEAR>21 ## 这个是为了 查询出来 学科为去往 外语系 的 所有 stu—info 的表的数据 并且 从 stuinfo 表中 找到年龄大于21 岁 的  由于用的 是 union 所以说 取 交集

2.6 列子查询

 简单介绍 什么是列子查询  列子查询的常见使用 操作符

列子查询中使用 IN、ANY、SOME 和 ALL 操作符

由于列子查询返回的结果集是 N 行一列,因此不能直接使用 = > < >= <= <> 这些比较标量结果的操作符。在列子查询中可以使用 IN、ANY、SOME 和 ALL 操作符:

  • IN:在指定项内,同 IN(项1,项2,…)。
  • ANY:与比较操作符联合使用,表示与子查询返回的任何值比较为 TRUE ,则返回 TRUE 。
  • SOME:ANY 的别名,较少使用。
  • ALL:与比较操作符联合使用,表示与子查询返回的所有值比较都为 TRUE ,则返回 TRUE 
  • SELECT s1 FROM table1 WHERE s1 > ANY (SELECT s2 FROM table2)

    上边就是一个简单的例子  用的是 any  ;

注意 :NOT IN 是 <> ALL 的别名,二者相同。 

2.7  行子查询

行子查询是指子查询返回的结果集是一行 N 列,该子查询的结果通常是对表的某行数据进行查询而返回的结果集。

SELECT * FROM article WHERE (title,content,uid) = (SELECT title,content,uid FROM blog WHERE bid=2)

2.8 表子查询

下边仅仅是个例子 ; 不是现实环境  ;{不会有设计表的 一边算年龄 一边算出生日期 的  }

大致的目的就是 从表中查询出的数据 作为另一个 查询的对象

select  a.* ,b.userPwd , b. date_format(user.birthday, '%Y-%m-%d %H:%i:%s')from (    select  tea.id, tea.name ,users.userCZ as '成绩',user.userID               ,tclass.className    from teacher as tea ,user, tclass      where  tea.id = user.tid    and   tclass.id = user.cid    and   user.age>20    and   user.userType = '先锋班级'    and   tclass.classcode < 2018) as a  inner join  user as bwhere a.userID = b.userIDand  YEAR(Now()) - YEAR(birthday()) <50

转载于:https://www.cnblogs.com/null/p/11255539.html

你可能感兴趣的文章