- 浏览: 168724 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
guiqing85:
补着用:
function getValueById(rpt, ...
JavaScript内置对象属性及方法 -
yzhw:
从数据库生成实体时可能会遇到这样的问题,描述太长了,发个连接, ...
(转)扩展hibernate生成数据库的命名规则 -
anfythyn:
请问,遗留问题解决了吗?
找出重复数 -
chyanog:
data = data % 10
纯属多余,这样就错了。事实上 ...
求N!的结果末尾有多少个零 -
guiqing85:
...
java 异常 Execption
一:inner join
inner join 是在做排除,如果任一行在两个表中不匹配,则注定将从最终的结果中排除掉
例子1:
select * from employee e inner join employee m on e.managerid = m.employeeid这是从一个表里查询了两次
得到的一行记录将包括两个employee的信息 前面的是经理 后面的是打工的
注意from哪个表 哪个表的信息就在前面
其中e和m分别是表的别名,这里的别名和列的别名不同,不用写as
例子2
select e.employeeid, ce.firstname, m.employeeid as managerid, cm.firstname as managerfirst from employee e inner join employee m on e.managerid = m.employeeid inner join contact ce on e.contactid = ce.contactid inner join contact cm on m.contactid = cm.contactid第一个联接是把一个表与他自身进行连接 这个叫自引用(注意表的别名)
第二个连接得到经理的名字
第三个连接得到雇员的名字
看似很复杂的连接 其实很简单
最后说一点inner join 是默认的连接类型 inner 关键字是可选的
二:outer join
先看例子
select e.employeeid, m.employeeid as managerid from employee e left outer join employee m on e.managerid = m.employeeid无论左侧表(e)中的行是否与右侧表中的行相匹配都要显示
如果左侧表中的行在右侧表中找不到相匹配的数据, 那么右侧表的数据为null
right outer join 也类似 outer是可以忽略的
三:full join 与 cross join
这两个其实都不必多说
full join 是 left join 和 right join 的结合
full join将包含位于连接两侧的表的所有行
不存在的行就用null补齐
cross join 没有on操作符
得到的是两测表中所有行的 笛卡儿积
就是把两册的行排列组合一下
一般不会存在null的行
这是相当罕见的用法
只有科学家或者来搞样本数据的才会用到这个用法
四:union
union更像是从一个查询直接向另一个查询进行的数据追加(差别还是有的)
join更像是水平的合并数据(添加更多的列),union是垂直的合并数据(添加更多的行)
先看例子:select col2 from table1 union all select col4 from table2
1:select 列表中字段的数量必须相同
2:字段的数据类型必须隐士兼容
3:返回的结果集的标头取自第一个查询
4:默认返回方式是distinct,union alll返回全部的集合
五:子查询返回单个值
先看例子:
declare @hits int select @hits = min(hitnum) from articles select distinct A.title from articles A join users U on A.uid = U.id where A.hitnum = @hits
这是完全可行的,但是我们可以用另一种形式:
select distinct A.title from articles A join users U on U.id = A.uid where A.hitnum = (select min(hitnum) from articles )这就是子查询
六:子查询返回多个值
接着看例子(子查询里返回多个值)
use database select A.title from articles A join users U on A.uid = U.id where A.id in (select id from articles where istop = 'true')
再看一个例子(用子查询找出孤立的记录)
select A.title from article A join users U on A.uid = U.id where A.id not in (select id from articles where istop = 'true')这个例子写的有点牵强
但是这里注意 not in 子查询得到的字段 不能有null直 存在,如果有 那么整个句子将返回空
细心的人大概看出来了,前面提到的两个子查询的例子几乎都可以用内联(join)的方式替换掉
出于性能上的考虑,我们应该首先选择联结的解决方案 而不是子查询
七:any some 和 all
any与some功能上是相同的,推荐用some
any与some一般都是和比较运算符一起使用的(>= <= <> !> 等 )
>some (1,2,3)意味着大于1 >some就是大于最小的一个值
=some和in 起的作用是一样的
not in (a,b,c)展开为 <>a and <>b and <>c
<>some (a,b,c)展开为 <>a or <>b or <> c
>all (1,2,3)意味着大于3
八:where子句中的相关子查询(外部查询和内部查询)
先看个例子
use adventureworks drop table #MinOrderdates select CustomerID, min(OrderDate)as orderdate into #MinOrderdates from Sales.SalesOrderHeader group by CustomerID order by CustomerID select o.CustomerID,o.SalesOrderID,o.OrderDate from Sales.SalesOrderHeader o join #MinOrderdates t on o.CustomerID = t.CustomerID and o.OrderDate = t.orderdate order by o.CustomerID drop table #MinOrderdates
每个顾客在系统中的第一张定单的orderid 和orderdate
用到了临时表,执行了两次查询
看下面的例子
select o1.CustomerID,o1.SalesOrderID,o1.OrderDate from Sales.SalesOrderHeader o1 where o1.OrderDate = ( select min(o2.OrderDate) from Sales.SalesOrderHeader o2 where o2.CustomerID = o1.CustomerID ) order by CustomerID
执行了一次查询
注意内部查询对外部查询有一个显示的引用 o2.CustomerID = o1.CustomerID
当然外部查询也可以引用内部查询中的列
第二个例子
select c.LastName, ( select min(OrderDate) from Sales.SalesOrderHeader o where o.ContactID = c.ContactID ) as orderdate from Person.Contact c
九:派生表
先看例子:
订购过某种特定产品的顾客列表
use AdventureWorks; select c.FirstName,c.LastName from Person.Contact As c join Sales.SalesOrderHeader as soh on c.ContactID = soh.ContactID join Sales.SalesOrderDetail as sod on soh.SalesOrderID = sod.SalesOrderID join Production.Product as p on sod.ProductID =p.ProductID where p.Name = 'Minipump'
查找顾客的名字以及首次订购的日期
90行受影响
现在我们想查找即订购过Minipump又订购过AWC Logo Cap的顾客
如果最后是
where p.Name = 'Minipump' or p.Name = 'AWC Logo Cap'
2412行受影响
这样做是错误的
这样得到的结果是订购过Minipump和订购过AWC Logo Cap的顾客
下面来看我们的解决方法
use AdventureWorks select distinct c.FirstName,c.LastName from Person.Contact As c join ( select ContactID from Sales.SalesOrderHeader As soh join Sales.SalesOrderDetail as sod on soh.SalesOrderID = sod.SalesOrderID join Production.Product As p on sod.ProductID = p.ProductID where p.Name = 'Minipump' ) pumps on c.ContactID = pumps.ContactID join ( select ContactID from Sales.SalesOrderHeader as soh join Sales.SalesOrderDetail as sod on soh.SalesOrderID = sod.SalesOrderID join Production.Product as p on sod.ProductID = p.ProductID where p.Name = 'AWC Logo Cap' ) caps on c.ContactID = caps.ContactID把select出的内容当成一个表用
这就是派生表
发表评论
-
(转)Oracle维护常用SQL语句
2012-05-06 20:53 877Oracle维护常用SQL语句 1、查看表空间 ... -
Oracle 书单
2012-05-06 12:50 8141.Oracle SQL高级编程 (美)Kare ... -
监控Oracle数据库的常用shell脚本
2012-05-06 12:24 1318监控Oracle数据库的常用shell脚本 前言 ... -
[转载]oracle 10g 修改IP地址导致系统无法启动oracleDBConsole的解决方法
2010-10-14 21:57 2295更改了数据库服务器的i ... -
Oracle decode() 处理被除数为0
2010-06-18 10:01 2790decode (expression, search_1, r ... -
oracle to_date() 用法 细节
2010-05-27 17:56 1258to_date()与24小时制表示法及mm分钟的显示: 一、在 ... -
多表连接查询inner join, left join , right join ,full join ,cross join
2010-05-10 16:56 1789多表查询中的几个join inner join,full o ... -
truncate,delete,drop的异同点
2010-04-01 11:42 829truncate,delete,drop的异同点 注意:这 ... -
Oracle中复制表结构和表数据
2010-03-05 15:05 10571. 复制表结构及其数据: create table tab ... -
oracle 分页并排序
2010-01-11 23:46 782①采用rownum关键字(三层嵌套) SELECT * FR ... -
oracle 删除用户命令和部分命令
2009-12-16 12:56 1080oracle 删除用户命令和部分命令 drop user u ... -
总结MYSQL的优化
2009-12-05 20:35 7871.数据库的设计 尽量把 ... -
如何查出同一张表中字段值重复的记录
2009-12-01 09:59 2914比如现在有一人员表(表名:peosons) 若想将姓名、身份证 ... -
马老师的PQ/SQL学习笔记
2009-11-30 19:54 3206--sql structured query language ... -
T-SQL简单的语法知识
2009-11-28 01:10 10281 先举个例子 Code use mys ... -
T-SQL 简单的增 删 改 查
2009-11-28 01:06 1030一:insert语句 into 关键字是可选的 values关 ... -
PL/SQL学习笔记-游标(十二)
2009-11-28 01:01 1048一:普通游标 declare --定义record类型变量 ... -
PL/SQL学习笔记-触发器(十一)
2009-11-28 00:58 836一:语句级触发器 语句级触发器是指当执行DML操作时,以语句为 ... -
PL/SQL学习笔记-函数(十)
2009-11-28 00:56 713先看程序 create or replace functio ... -
PL/SQL学习笔记-过程 (九)
2009-11-28 00:53 728一:创建和修改一个过程 create or replace ...
相关推荐
《T-SQL入门经典》是一本专为初学者设计的SQL语言教程,它重点介绍了T-SQL...无论是简单的数据查询还是复杂的业务逻辑处理,T-SQL都能为你提供强大的工具。在实践中不断磨练,你将成为一名精通T-SQL的专业开发者。
Microsoft SQL Server作为一款流行的商业数据库管理系统,提供了T-SQL(Transact-SQL)作为其查询语言,它既包含标准SQL的功能,也扩展了许多专有的数据处理功能。树形结构处理在SQL Server中是指利用T-SQL来管理和...
通过这种方法,数据库开发人员可以在T-SQL和PL/SQL中实现类似二维数组的数据操作,从而在复杂的数据库应用中更灵活地处理多维数据。这不仅提高了数据处理的效率,也拓展了SQL编程在数据处理领域的应用范围。 总结来...
一:简单的语法知识 二:简单的增 删 改 查和一些相关子句 三:复杂一点的查询 四:约束 五:create drop alter 六:视图 七:存储过程与用户自定义函数 八:触发器 九:全文索引 十:游标
SQL作为数据库查询语言,被广泛应用于各类数据库管理系统之中。据统计,超过50%的开发者在日常工作中使用SQL进行数据操作。然而,在实际应用过程中,大约80%的数据库性能问题是由SQL语句不当引起的。更具体地说,这...
在F#中,我们可以使用诸如`System.Data.SqlClient`这样的.NET库来连接和执行T-SQL查询。例如,我们可以通过创建SqlConnection对象,打开连接,构造SqlCommand对象,并调用ExecuteReader或ExecuteNonQuery方法来执行...
文章还提到了T-SQL的另一个优势,即利用SQL Server的查询优化器。查询优化器会自动选择最佳的执行计划,以最快的方式执行查询。这一点在处理中值计算时尤为重要,因为它可以帮助开发人员避免效率低下的查询计划,...
- **选择合适的SQL方言**:根据具体的应用需求和查询复杂度来选择使用T-SQL还是W-SQL。 - **理解数据存储方式**:Sybase IQ 采用了独特的列式存储技术,因此在编写SQL时应充分考虑这一点。 - **性能调优**:利用索引...
此外,SQL Server 2012还支持通过Transact-SQL (T-SQL)语言来执行复杂的查询和事务处理。T-SQL是SQL Server的扩展,提供了许多额外的命令和函数,使其功能更为强大。掌握T-SQL是数据库管理员和开发者的重要技能之一...
Transact-SQL(T-SQL)是SQL Server使用的SQL语言的扩展,它允许我们在SQL Server环境内执行复杂的数据库操作。以下是针对初学者的一些重要知识点: 1. 在SQL Server中查询Access数据库: SQL Server可以通过...
这一点对于开发人员来说非常关键,因为它大大降低了在不同数据源之间切换时的学习成本和复杂性。 文章详细解析了LINQ to SQL查询的工作原理,它本质上是基于IQueryable接口的实现,这使得它可以与任何实现了该接口...
比如,它支持了Transact-SQL(T-SQL)查询语言,这种强大的数据库查询和编程语言,能够帮助用户以更有效的方式处理和分析数据。T-SQL不仅能够执行基本的数据操作,还支持存储过程和触发器的创建,这是构建复杂数据库...
T-SQL包含了诸如Create(创建)、Select(查询)、Update(更新)、Delete(删除)、Insert(插入)等基础操作语句,它允许程序对数据库进行查询、修改、添加和删除操作。通过T-SQL语句,程序可以与数据库建立联系,...
在SQL Server中创建存储过程和触发器需要使用T-SQL(Transact-SQL)语言,它是SQL Server专用的SQL方言。创建和管理存储过程和触发器涉及到T-SQL编程,这包括声明变量、条件控制结构、循环、异常处理等。在实际应用...
- 它支持T-SQL(Transact-SQL)查询语言,用于与数据库交互。 - 在线考试系统中,SQL Server 2000可能用于存储题目、选项、用户信息、成绩等数据。 3. 在线考试系统架构: - 用户模块:注册、登录、个人信息管理...
SQL Server 2005 引入了一系列新的 T-SQL 特性,包括 PIVOT、APPLY、ROW_NUMBER 等,这些新特性显著增强了 SQL Server 的数据处理能力,使复杂的查询变得更加简单。 ### 11. 通知服务 SQL Server 2005 提供了通知...
使用以下T-SQL语句可以做到这一点: ```sql ALTER LOGIN [sa] ENABLE; ALTER LOGIN [sa] WITH PASSWORD=N'sa'; ``` 请记住,`'sa'`是默认的系统管理员账户,密码应替换为你设定的复杂密码。执行这些命令后,sa账户...
SQL Server提供了T-SQL命令如`BACKUP DATABASE`来实现这一点。备份后,可以通过RESTORE命令在目标服务器上恢复这些备份。 2. **结构迁移**:迁移不只是数据的转移,还包括表、视图、存储过程、触发器、用户定义函数...
根据给定文件的信息,我们可以详细地解析这14个SQL查询语句,...这些查询不仅涵盖了基本的数据检索功能,还涉及到了较为复杂的多表联接、子查询、聚合函数等高级特性,对于理解和应用SQL查询语言具有很好的指导意义。
了解这一点可以帮助优化查询性能和空间利用率。 **1.2 物理对象与逻辑对象的关系** 大部分物理对象都是基于逻辑对象构建的。例如,逻辑表映射为物理上的行集或页结构。不同的 RDBMS 可能会有相似但不完全相同的...