子查询(嵌套sql)
SELECT语句是SQL的查询。迄今为⽌我们所看到的所有SELECT语句都是简单查询,即从单个数据库表中检索数据的单条语句。
SQL还允许创建⼦查询(subquery),即嵌套在其他查询中的查询。
子查询的使用:
1.利⽤子查询进⾏过滤
2.作为计算字段使⽤用子查询
注意:子查询中的WHERE⼦句与前⾯使⽤的WHERE⼦句稍有不同,因为它使⽤了完全限定列名
这种类型的子查询称为相关子查询。任何时候只要列名可能有多义性,就必须使⽤用这种语法(表名和列名由一个句点分隔)。
关系表
SQL最强⼤大的功能之⼀就是能在数据检索查询的执⾏中联结(join)表。
在能够有效地使⽤用联结前,必须了解关系表以及关系数据库设计的一些基础知识。
关系表的设计就是要保证把信息分解成多个表,一类数据一个表。
各表通过某些常⽤用的值(即关系设计中的关系(relational))互相关联。
表联结
如果数据存储在多个表中,怎样⽤用单条SELECT语句句检索出数据?
答案是使⽤用联结。简单地说,联结是一种机制,用来在一条SELECT语句句中关联表,因此称之为联结。
使用特殊的语法,可以联结多个表返回一组输出,联结在运⾏时关联表中正确的⾏。
在联结两个表时,你实际上做的是将第一个表中的每⼀行与第二个表中的每⼀行配对。
WHERE⼦句作为过滤条件,它只包含那些匹配给定条件(这里是联结条件)的⾏。
比如select vend_name,prod_name,prod_price from vendors,products
如果没有where条件,第⼀个表中的每个⾏将与第⼆个表中的每个⾏配对,⽽不管它们逻辑上是否可以配在⼀起,由没有联结条件的表关系返回的结果为笛卡⼉儿积。检索出的行的数⽬将是第⼀个表中的⾏数乘以第⼆个表中的⾏数。
比如:select vend_name,prod_name,prod_price from vendors inner join products on vendors.vend_id = products.vend_id;
两个表之间的关系是FROM⼦句的组成部分,以INNER JOIN指定。
在使⽤这种语法时,联结条件用特定的ON⼦句⽽不是WHERE⼦句给出。
SQL对一条SELECT语句中可以联结的表的数⽬没有限制。
MySQL在运⾏时关联指定的每个表以处理联结。 这种处理可能是非常耗费资源的,因此应该仔细,不要联结不必要的表。联结的表越多,性能下降越厉害。
使⽤用表别名 AS
别名除了用于列名和计算字段外,SQL还允许给表名起别名。
这样做有两个主要理理由:
缩短SQL语句句;允许在单条SELECT语句中多次使⽤相同的表
应该注意,表别名只在查询执行中使⽤,与列别名不一样,表别名不返回到客户机。
⾃联结通常作为外部语句用来替代从相同表中检索数据时使用的子查询语句。
外部链接
许多联结将⼀个表中的⾏与另⼀个表中的⾏相关联。但有时候会需要包含没有关联行的那些行。
注意:
保证使用正确的联结条件,否则将返回不正确的数据。
应该总是提供联结条件,否则会得出笛卡⼉儿积。
在⼀个联结中可以包含多个表,甚⾄对于每个联结可以采⽤不同的联结类型。虽然这样做是合法的,⼀一般也很有⽤,但应该在一起测试它们前,分别测试每个联结。这将使故障排除更更为简单。
组合查询 UNION
MySQL也允许执⾏多个查询(多条SELECT语句句),并将结果作为单个查询结果集返回。这些组合查询通常称为并(union)或复合查询(compound query)。
UNION规则:
UNION必须由两条或两条以上的SELECT语句组成,语句之间⽤用关键字UNION分隔(因此,如果组合4条SELECT语句句,将要使用3个UNION关键字)。
UNION中的每个查询必须包含相同的列、表达式或聚集函数(不过各个列不需要以相同的次序列列出)
列数据类型必须兼容:类型不必完全相同,但必须是DBMS可以隐含地转换的类型(例如,不同的数值类型或不同的日期类型)。
UNION从查询结果集中自动去除了重复的行(换句话说,它的行为与单条SELECT语句中使⽤多个WHERE⼦句条件⼀样)。
这是UNION的默认⾏为,但是如果需要,可以改变它。如果想返回所有匹配⾏,可使用UNIONALL⽽不是UNION。
事务(Transaction)是由一系列对系统中数据进行访问与更新的操作所组成的⼀个程序执行逻辑单元。
事务的语法
事务的ACID特性
本文地址:https://blog.csdn.net/qq_45019857/article/details/107301936
如对本文有疑问, 点击进行留言回复!!
数据库(SQL Server )经典例题(三):对S表、P表、J表、SPJ表的操作——多表查询
Quartz—触发器(SimpleTrigger&&CronTrigger)
网友评论