01 SQL表的建立

01 SQL表的建立

标签:数据库、SQL、Oracle

1.Oracle的数据类型

– ORACLE的数据类型
常用的数据库字段类型如下:

  • CHAR 固定长度字符串 最大长度2000 bytes 。
      char(n) n=1 to 2000字节 ,n字节长,如果不指定长度,缺省为1个字节长(一个汉字为2字节)。
  • VARCHAR2 可变长度的字符串 最大长度4000 bytes 可做索引的最大长度749。
      varchar2(n) n=1 to 4000字节 可变长的字符串,具体定义时指明最大长度n。
  • NCHAR 根据字符集而定的固定长度字符串 最大长度2000 bytes。
  • NVARCHAR2 根据字符集而定的可变长度字符串 最大长度4000 bytes。
  • DATE 日期(日-月-年) DD-MM-YY(HH-MI-SS)。
      从公元前4712年1月1日到公元4712年12月31日的所有合法日期,Oracle 8i其实在内部是按7个字节来保存日期数据,在定义中还包括小时、分、秒。
    缺省格式为DD-MON-YY,如07-11月-00 表示2000年11月7日。
  • LONG 超长字符串 最大长度2G(231-1) 足够存储大部头著作
      可变长字符列,最大长度限制是2GB,用于不需要作字符串搜索的长串数据,如果要进行字符搜索就要用varchar2类型。long是一种较老的数据类型,将来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。
  • RAW 固定长度的二进制数据 最大长度2000 bytes 可存放多媒体图象声音等。
      raw(n) n=1 to 2000 可变长二进制数据,在具体定义字段的时候必须指明最大长度n,Oracle 8i用这种格式来保存较小的图形文件或带格式的文本文件,如Miceosoft Word文档。
  • LONG RAW 可变长度的二进制数据 最大长度2G 同上
      可变长二进制数据,最大长度是2GB。Oracle 8i用这种格式来保存较大的图形文件或带格式的文本文件
  • BFILE 存放在数据库外的二进制数据 最大长度4G
  • NUMBER(P,S) 数字类型 P为总位数,S为小数位数
      number(m,n) m=1 to 38,n=-84 to 127 可变长的数值列,允许0、正值及负值,m是所有有效数字的位数,n是小数点以后的位数。
      如:number(5,2),则这个字段的最大值是99,999,如果数值超出了位数限制就会被截取多余的位数。
      如:number(5,2),但在一行数据中的这个字段输入575.316,则真正保存到字段中的数值是575.32。
      如:number(3,0),输入575.316,真正保存的数据是575。
  • DECIMAL(P,S) 数字类型 P为总位数,S为小数位数
  • INTEGER 整数类型 小的整数
  • FLOAT 浮点数类型 NUMBER(38),双精度
  • REAL 实数类型 NUMBER(63),精度更高

2.主键

作为主键,它满足以下条件:
①任意两行都不具有相同的主键值。
②每一行都必须具有一个主键值(主键列不允 许NULL值)。
③主键列中的值不允许修改或更新。
④主键值不能重用(如果某行从表中删除,它 的主键不能赋给以后的新行)。
  主键通常定义在表的一列上,但并不是必需 这么做,也可以一起使用多个列作为主键。 在使用多列作为主键时,上述条件必须应用 到所有列,所有列值的组合必须是唯一的 (但单个列的值可以不唯一)。

3.检索检索列

①检索单个列

SELECT prod_name 
FROM Products;

  

②检索多个列

SELECT prod_id, prod_name, prod_price 
FROM Products;

  每个列名之间添加逗号。

③检索所有列

SELECT * FROM Products;

④使用distinct

SELECT DISTINCT vend_id 
FROM Products;

  警告:不能部分使用DISTINCT。DISTINCT关键字作用于所有的列,不仅仅 是跟在其后的那一列。例如,你指 定SELECT DISTINCT vend_id, prod_price,除非指定的两列完全相同,否则所有的行都会被检索出来。

⑤使用top

SELECT TOP 5 prod_name 
FROM Products

  使用关键字top来限制所检索的行数。比如这个例子中,最多显示顶上的5行。
  而在Oracle,需要基于ROWNUM(行计 数器)来计算行,像这样:

SELECT prod_name 
FROM Products 
WHERE ROWNUM <=5;

3.使用order by来排序

①单个列排序

SELECT prod_name 
FROM Products 
ORDER BY prod_name

②多个列的先后排序

SELECT prod_id, prod_price, prod_name 
FROM Products 
ORDER BY prod_price, prod_name

  这个例子中,会按照prod_price再到prod_name的顺序排列。

③根据索引来先后排序

SELECT prod_id, prod_price, prod_name 
FROM Products
ORDER BY 2, 3;

  这里的2,3的索引是根据这条语句中select后面的列的顺序来指明的。即,先排prod_price,再排prod_name。

④使用DESC

SELECT prod_id, prod_price, prod_name 
FROM Products 
ORDER BY prod_price DESC;

  首先指明,DESC就是DESCENDING的缩写,二者可以互换。这个关键字可以使输出的结果呈降序排序。

⑤使用多个列的DESC

SELECT prod_id, prod_price, prod_name 
FROM Products 
ORDER BY prod_price DESC, prod_name;

  注意最后一部分的ORDER BY中的子语句,这里只有prod_price才会进行降序排列。如果想在多个列上进行降序排序,必须对 每一列指定DESC关键字。

提示:区分大小写和排序顺序 在对文本性数据进行排序时,A与a相同 吗?a位于B之前,还是Z之后?这些问题 不是理论问题,其答案取决于数据库的设 置方式。
在字典(dictionary)排序顺序中,A被视 为与a相同,这是大多数数据库管理系统 的默认行为。但是,许多DBMS允许数据 库管理员在需要时改变这种行为(如果你 的数据库包含大量外语字符,可能必须这 样做)。
这里的关键问题是,如果确实需要改变这 种排序顺序,用简单的ORDER BY子句可能做不到。你必须请求数据库管理员的帮助。

4.Where限制语句

①基本使用

SELECT prod_name, prod_price 
FROM Products 
WHERE prod_price = 3.49;

  

操作符说明
=等于
< >不等于
!=不等于
<小于
<=小于等于
!不小于
>大于
>=大于等于
!>不大于
BETWEEN在指定的两个值之间
NOT BETWEEN不介于指定的值之间
like模式匹配
IS NULL为NULL值
is not null不为空

②空值检查

SELECT prod_name 
FROM Products 
WHERE prod_price IS NULL;

  确定值是否为NULL,不能简单地检查是否= NULL。SELECT语句有一个特殊的WHERE子 句,可用来检查具有NULL值的列。这个WHERE子句就是IS NULL子句。

③and 并

SELECT prod_id, prod_price, prod_name 
FROM Products 
WHERE vend_id = 'DLL01' AND prod_price <= 4

④or 或

SELECT prod_name, prod_price 
FROM Products 
WHERE vend_id = 'DLL01' OR vend_id = ‘BRS01’;

⑤ 用以圆括符使用逻辑组合,否则,执行顺序将从左到右

SELECT prod_name, prod_price 
FROM Products 
WHERE (vend_id = 'DLL01' OR vend_id = ‘BRS01’) 
AND prod_price >= 10;

⑥in 操作符

SELECT prod_name, prod_price 
FROM Products 
WHERE vend_id IN ( 'DLL01', 'BRS01' ) 
ORDER BY prod_name;m

  IN取一组由逗号分隔、括 在圆括号中的合法值。

⑦not操作符

SELECT prod_name 
FROM Products
WHERE NOT vend_id = 'DLL01' 

上下两个语句同义↑↓

SELECT prod_name 
FROM Products 
WHERE vend_id <> 'DLL01' 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值