SQL学习系列(一)之多表查询

  在数据库中,各个表之间存在一定的联系,如果需要对数据进行一系列的查询是,仅仅从一个表或一个库中获得数据信息是不够的,需要从多个表或多个数据库提取所需要的数据信息,而进行一些简单select语句查询是无法满足用户需求的,这时就需要涉及到高级查询。

   以下都用A、B代表数据库表。

  1.内连接查询-内连接使用比较运算符对各个表中的数据进行比较操作,并列出各个表中与条件相匹配的所有数据行。

   关键字:INNER JOIN或JOIN

   (1).等值连接

   语句格式:select a * ,b * from A as a INNER JOIN b as b on a.ID=b.ID

   (2).非等值连接-非等值连接就是除等值(=)运算符之外的比较运算符,主要有>、<、>=、<=、<>、还有范围运算符BETWEEN

   语句格式:select a * ,b * from A as a INNER JOIN b as b on a.ID=b.ID and b.age<40

  2.外连接-完全连接指定返回两个表中所有匹配行以及不匹配的行。

   关键字:FULL OUTER JOIN

   语句格式:select * from a *, b * from A as a FULL OUTER JOIN B as b on a.ID=b.ID

  3.左外连接-左外连接指定返回两个表中所有匹配行以及join关键字左边表中不匹配的行。

   关键字: LEFT OUTER JOIN

   语句格式:select * from a *, b * from A as a LEFT OUTER JOIN B as b on a.ID=b.ID

  4.右外连接-右外连接指定返回两个表中所有匹配的行以及join关键字右边不匹配的行。

   关键字: RIGHT OUTER JOIN

   语句格式:select * from a *, b * from A as a RIGHT OUTER JOIN B as b on a.ID=b.ID

  5.交叉查询-使用交叉查询将返回两个表中所有行的可能组合,即在结果集中,将显示所有两个表可能匹配的数据行。交叉查询分使用where和不使用where子语句两种情况。

   不使用WHERE子句:将会返回被连接两个表中所有行。

   使用WHERE子句:将返回被连接两个表中所有行减去不符合where子句查询条件的数据行。

   (1)不使用WHERE子句

   语句格式:select * from a *, b * from A as a CROSS JOIN B as b

   (2)使用WHERE子句

   语句格式:select  a *, b * from A as a CROSS JOIN B as b where a.ID=b.ID and 编号=‘10‘

  6.自然连接-在对多个表进行查询时,不仅可以对两个不同的表进行连接查询,还可以一个表与自己进行连接查询,这件就叫自然连接

语句格式: select a *,b * from A as a,B as b  where a.ID=b.ID

  7.联合查询-使用UNION运算符将两个或两个以上的select语句查询结果集合合并成一个结果集显示的就叫联合查询

   语句格式:select * from A where age=20 UNION select * from B where sex=‘男‘

  8.交查询-使用INTERSECT运算符返回两个或两个以上select语句查询结果集的交集就是交查询。

   语句格式:select * from A INTERSECT select * from B where age=20

  9.差查询-使用EXCEPT运算符用于返回两个或两个以上select语句查询结果集合的差集就是差查询

   语句格式:select * from A EXCEPT select * from B where age<35

  写的比较基础,希望可以帮到您,谢谢您的阅读。

   

时间: 2024-10-10 17:44:06

SQL学习系列(一)之多表查询的相关文章

MyBatis学习总结(五)——实现关联表查询(转载)

孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(五)--实现关联表查询 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关系. 1 CREATE TABLE teacher( 2 t_id INT PRIMARY KEY AUTO_INCREMENT, 3 t_name VARCHAR(20) 4 ); 5 CREATE TAB

SQL总结(二)连表查询

SQL总结(二)连表查询 连接查询包括合并.内连接.外连接和交叉连接,如果涉及多表查询,了解这些连接的特点很重要. 只有真正了解它们之间的区别,才能正确使用. 1.Union UNION 操作符用于合并两个或多个 SELECT 语句的结果集. UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表. 当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行.两种情况下,派生表的每一行不是来自 TABLE1 就是

SQL判断语句用法和多表查询

1.格式化时间sql语句 本例中本人随便做了两张表,和实际不是很相符,只是想说明sql语句的写法. 例1表格式如下: 需求:查询出本表,但需要使time字段的时间格式为yyyy-MM-dd,比如:2013-08-13 sql写法: SELECT u.id,u.userId,u.timeType,DATE_FORMAT(time,'%Y-%m-%d') AS time,secondId FROM `user` u 运行结果: 2.多表查询(三表查询) 例二三表结构如下: 需求:查询出主表,要求在主

MyBatis学习总结(五)——实现关联表查询

一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关系. CREATE TABLE teacher( t_id INT PRIMARY KEY AUTO_INCREMENT, t_name VARCHAR(20) ); CREATE TABLE class( c_id INT PRIMARY KEY AUTO_INCREMENT, c_name VA

MyBatis学习总结_05_实现关联表查询

一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关系. 1 CREATE TABLE teacher( 2 t_id INT PRIMARY KEY AUTO_INCREMENT, 3 t_name VARCHAR(20) 4 ); 5 CREATE TABLE class( 6 c_id INT PRIMARY KEY AUTO_INCREMEN

数据库(学习整理)----7--Oracle多表查询,三种join连接

聚合函数:(都会忽略null数据) 常用的有5种:将字段中所有的数据聚合在一条中 1.sum(字段名) :求总和 2.avg(字段名) :求平均值 3.max(字段名) :求最大值 4.min(字段名) :求最小值 5.count(字段名.*) :统计行数 ----2.按部门编号,查询平均薪水 ,并且平均薪水<1300的不显示,结果按降序排序 select empno,avg(sal) as avgsal from scott.emp group by empno having avg(sal)

Hibernate使用原生SQL语句进行无关联多表查询

背景:有两个表:CpCg与CpGg需要进行多表查询 因为CpGg表设计到与另外的表也有联系,因此师兄没有关联此两个表,只是用字段进行逻辑关联,CpGg表的cp字段与CpCg表的id字段逻辑关联 首先确保hibernate配置文件配置完成,配置文件如下:(一些与本人项目相关的关键字段已隐去) <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC

MyBatis学习笔记五——实现关联表查询

一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关系. CREATE TABLE teacher( t_id INT PRIMARY KEY AUTO_INCREMENT, t_name VARCHAR(20) ); CREATE TABLE class( c_id INT PRIMARY KEY AUTO_INCREMENT, c_name VA

Linux命令:MySQL系列之五--SELECT单表查询、多表查询升级及删除,插入

SELECT:查询 SELECT select-list FROM tb WHERE qualification  根据标准qualification查找对应的行 查询语句类型:  qualification条件  field领域  distinct独特的 简单查询: 多表查询: 子查询: SELECT * FROM tb_name: 查询tb_name表的所有信息 SELECT field1,field2 FROM tb_name: 投影显示所设定的领域条目(field),一个field就是一