sql要点

oracle

并操作 union  自动去除重复    如果想保留重复,需要使用union all

交操作intersect  自动去除重复    如果想保留重复,需要使用intersect all

差操作 except 自动去除重复    如果想保留重复,需要使用except all

聚集函数

平均值:avg

最小值:min

最大值:max

总和:sum

计数:count

sum和avg必须是数字

使用group by可以将其作用在一组元组集上。

有时候,对分组限定条件比对元组限定有用,使用having子句。

select count(*)

from customer 计算关系中元组的个数。自动去除重复。

ps:where应在having之前。

空值:可以使用where 。。is (not) null检测空值和非空值。

如果算数运算的一个输入有个为空。则该算数表达式为空。

如果比较运算符有空值作为比较对象,则结果为false。

总而言之:除了count(*)外所有聚集函数都忽略输入中的空值,空值的忽略有可能造成无输入参加函数运算。规定count在无输入的情况下值无0,其他返回空值。

嵌套子查询:子查询是嵌套在另一个查询中的select-from-where表达式。

集合成员测试:连接词in测试集合中的成员。

select distinct customer-name

from borrower

where customer-name in(select customer-name from depositor)

select distinct customer-name

from borrower,loan

where borrower.loan-number=loan.loan-number and branch-name="Perryridge"and

(branch-name,customer-name) in

(select branch-name,customer-name

from depositor,account

where depositor,account-number=account.acount-number)

not in 用法

找出所有在银行中有贷款但无账户的用户。

select distinct customer-name

from borrower

where customer-name not in(select customer-name from depositor)

in和not in也能用于枚举集合。

集合的比较:

>some ,<some,>=some,<>some

=some等价于in,不过<>some并不等价于not in。在sql中,关键词any同义于some。

>all对应词组“比所有。。。大”

<>all等价于not in

=some等价于in <>all等价于not in

sql中聚集函数不能进行复合。因而max(avg(...))是不允许的。

所以为了找出平均余额最高的分支机构

select branch-name

from account

group by branch-name

having avg(balance)>=all(select avg(balance)

from account group by branch-name)

测试子查询的结果是否有元组。exists结构在作为参数的子查询非空时返回true

select customer-name

from borrower

where exists(select *

from despositor

where despositor.customer-name=borrower.customer-name)

在一个子查询中,合法的做法是只是用在该子查询中或包含该子查询的查询中定义的元组变量。如果一个元组变量既在子查询中定义,又在包含该子查询的查询中定义,则子查询中的定义有效。

测试是否存在重复的元组

如果作为参数的子查询的结果中没有重复元组,使用unique结构测试将返回true。

删除

delete from account

where branch-name in (select branch-name

from branch

where branch-city="NeedMan")

插入:

insert into account

values("","",1200)

更新:update acoount

set balance=balance*1.06

where balance>10000

关系的连接

内连接:

**表 inner join **表 on 关联条件

左外连接:

左外连接的计算如下:首先计算内连接的结果,然后,对左边关系loan中的每个与右边关系borrower中的任何元组在内连接时都不匹配的元组t,在结果中都加入一个元组r。r的从左边关系中得到的属性值被赋为t中的值,而r的其他属性值被赋值为空。

自然连接:**表 nature inner join **表

和on进行内连接的结果相似。但是关联条件的属性只出现一次。

sql-92中每一种连接操作都包含一个连接类型和连接条件。连接条件决定了两个关系中哪些元组相互匹配,以及连接结果中出现哪些属性。连接类型决定了如何处理连接条件不匹配的元组。

外连接,连接条件是必须的,内连接,连接条件是可选的。(如果忽略,将产生笛卡尔乘积)

关键字natural出现在连接类型前面,关键字 on,using出现在连接表达式的末尾。关键字inner和outer是可选的,因为根据连接类型的其余内容可以推断出是内连接还是外连接。

连接条件using(A1,A2,....,An)类似于自然连接的条件,只是连接属性不再是两个关系中所有的公共属性,而是属性A1,A2,...,An.A1,A2,...,An都必须是两边关系中的公共属性,而且在结果关系中只出现一次。

全外连接时左外连接和右外连接

sql中的域类型

sql-92标准支持很多种预定义的域类型,其中包括下列类型:

char(n)为固定长度的字符串。

varchar(n)

int

smallint

numeric(p,d)

时间: 2024-10-03 19:32:07

sql要点的相关文章

sql server实用要点全解

本文介绍sql server的相关的查询语句和标准T-sql语法 sql server中支持的数据类型 ANSI字符和UNICODE字符的区别 在学习数据类型之前先来学学什么是ANSI字符和Unicode字符 ANSI编码用一个字节来存放英文,用二个字节存放中文,但是由于自身限制有些中文是无法表示的 Unicode编码对所有的字符都用两个字节表示,对中文和英文都有非常好支持 sql server支持的数据类型如下 bigint 整数值,不包含小数点,精度19,也就是最大19位数 binary(5

java笔试要点(java.sql包)

提供JAVA存取数据库能力的包是 ( ) A: java.sql B: java.awt C: java.lang D: java.swing 解析: A,java.sql包提供Java存取数据库能力 B,java.awt包是java图形界面的包 C,java.lang是java语言的核心好,lang是language的简写 D,java.swing是经过java封装的与操作系统无关的图形界面包 注解: java.sql提供使用 JavaTM 编程语言访问并处理存储在数据源(通常是一个关系数据库

SQL Server 具体查询要点,自己整理

1,distinct 对某一列进行去重 检索有职工的工资大于或等于wh1仓库中任何一名职工工资的仓库号 select distinct cno from zhigongbiao where gongzi >= (select Min(gongzi) from zhigongbiao where cno in ('wh1')) 2 ,between and 在...之间 检索出工资在1220元到1240元范围内的职工信息. select *from zhigongbiao where gongzi

SQL Server 数据库知识要点,自己整理

数据库主要知识点: primary key 主键 references 外键 distinct 去重 identity 自增长 check 约束 fenshu decimal(18,2) check(fenshu>=0 and fenshu<=100)--输入分数的范围在0到100之间 unique 唯一约束 fenshu int unique not null --约束中的列,不允许有两个相同的非空值,指定的列可以有null属性,一个表中可以有多个唯一约束 create proc 创建存储过

SQL注入-攻入Apple ID钓鱼网站实录

之前写的一篇利用SQL注入方式攻击钓鱼网站的文章,现在在博客园再分享一下. 下午,朋友发了一条朋友圈,内容大概这样: 大体就是她的iPhone丢了,收到了钓鱼短信,多么熟悉的套路,如下: 还好她比较机智,发现是个钓鱼网站,地址如下: http://www.apple-icloudid.com.cn 当时看到这件事后,想到之前有巨巨顺势搞定钓鱼网站,所以我也想小试牛刀一下,看看能否攻入钓鱼网站后台. 在试了几轮PHP常见后台地址后,比如/admin,/index.php/admin,均未奏效,索性

安装SQL Server和卸载SQL Server步骤

2017年8月6号下午21:12分,今天是我10年博客计划的第三周!今天我完成了一件大事,我想多年以后,这件事一定会让我骄傲和自豪,具体我在这里不想说,截几张图给懂的人 今天我想分享关于SQL Server数据库的安装和卸载步骤,网上关于这一类的图解也是比较多的,在这里我仅根据我自己学习过程中遇到的问题进行分享,总之一句话,SQL Server数据库的卸载和安装同等重要,卸载不当,只能重装系统,这里以SQL Server 2014示例说明! SQL Server2014 安装篇  打开安装包中s

SQL Server on Ubuntu——Ubuntu上的SQL Server(全截图)

本文从零开始一步一步介绍如何在Ubuntu上搭建SQL Server 2017,包括安装系统.安装SQL等相关步骤和方法(仅供测试学习之用,基础篇). 一.   创建Ubuntu系统(Create Ubuntu System) 1.      前提准备 由于本文主要研究SQL Server 2017在Linux上的搭建方法,从Install SQL Server on Linux中得知当前SQL Server 2017 CTP 2.0对于Ubuntu系统支持16.04和16.10,同时可以直接下

SQL之用户自定义函数

关于SQL Server用户自定义的函数,有标量函数.表值函数(内联表值函数.多语句表值函数)两种. 题外话,可能有部分朋友不知道SQL Serve用户自定义的函数应该是写在哪里,这里简单提示一下,在Microsoft SQL Server Managerment Studio里面,展开具体需要创建SQL Server用户自定义函数的数据库(即每个用户自定义函数只针对具体的一个数据库有用),然后找到可编程性选项,再展开找到函数选项,在具体的函数选项里面可参照下图的方式鼠标右键选择来添加. 标量函

安装sql 2008步骤以及所遇到的问题

下载网址:http://www.xiazaiba.com/html/4610.html 安装步骤: 1.  在Windows7操作系统系,启动Microsoft SQL 2008安装程序后,系统兼容性助手将提示软件存在兼容性问题,在安装完成之后必须安装SP1补丁才能运行,如图1-1所示.这里选择"运行程序"开始SQL Server 2008的安装. 注:此时可能会出现(sql server安装程序遇到以下错误,在创建窗口句柄之前,不能在控件上调用Invoke或BeginInvoke)的