- 浏览: 459448 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
zhengch00:
这个文档不是你自己写的吧
informatica连接ftp -
ctcwri:
于我心有慽慽焉,java的web就像陷入了泥坑。
Java 的纯真年代已经离我们越来越远了 -
bestxiaok:
Glorin 写道这个应该是你的安装目录tomcat文件夹下面 ...
Value must be an existing directory配置tomcat问题? -
Glorin:
这个应该是你的安装目录tomcat文件夹下面少了一个temp文 ...
Value must be an existing directory配置tomcat问题? -
bestxiaok:
sheep3600 写道bestxiaok 写道sheep36 ...
AES加密解密
规律:数字不用单引号,字符用单引号
选择
1. 假设有一个名为email_table 的表,包含名字和地址两个字段,要得到Bill Gates 的e_mail地址,你可以使用下面的查询:
SELECT email from email_table WHERE name=’Bill Gates’
2. 前面说过,查询可以在查询条件中包含逻辑运算符。假如你想读取Bill Gates 或Clinton总统的所有email地址,你可以使用下面的查询语句:
SELECT email FROM email_table WHERE name=’Bill Gates’ OR name=’president Clinton’
(select name,email,[add] from name where name='zhd') 单词不完整时,默认加[ ]
3. 你可以在一个SELECT语句中一次取出多个字段,比如:
SELECT au_fname ,au_lname, phone FROM authors
在SELECT语句中,你需要列出多少个字段,你就可以列出多少。不要忘了把字段名用逗号隔开。你也可以用星号(*)从一个表中取出所有的字段。这里有一个使用星号的例子:
SELECT * FROM authors
(SELECT * FROM NAME,NAME1)
4. 你也可以用一个SELECT语句同时从多个表中取出数据,只需在SELECT语句的FROM从句中列出要从中取出数据的表名称即可:
SELECT au_name,title FROM authors,titles,titleauthor
WHERE authors.au_id=titleauthor.au_id
AND titles.title_id=titleauthor.title_id
5. 要指明表titles和表publishers之间的关系,你只要让这两个表有一个公共的字段就可以了。在数据库pubs中,表titles和表publishers都有一个名为pub_id的字段。如果你想得到书名及其出版商的一个列表,你可以使用如下的语句:
SELECT title,pub_name FROM titles,publishers
WHERE titles.pub_id=publishers.pub_id
6. 在SELECT语句中,你可以在缺省字段名后面仅跟一个新名字来取代它。例如,可以用一个更直观易读的名字Author Last Name来代替字段名au_lname:
SELECT au_lname ‘Author Last Name’ FROM authors
当这个SELECT语句执行时,来自字段au_lname的值会与“Author Last Name”相联系。查询结果可能是这样:
Author Last Name
White
Green
Carson
O’Leary
Straight
注意字段标题不再是au_lname,而是被Author Last Name所取代。
7. 如果你想把表titles中的所有书的价格加倍,你可以使用下面的SELECT语句:
SELECT price*2 FROM titles
当这个查询执行时,每本书的价格从表中取出时都会加倍。但是,通过这种途径操作字段不会改变存储在表中的书价。对字段的运算只会影响SELECT语句的输出,而不会影响表中的数据。为了同时显示书的原始价格和涨价后的新价格,你可以使用下面的查询:
SELECT price "Original price", price*2 "New price" FROM titles
当数据从表titles中取出时,原始价格显示在标题Original price下面,加倍后的价格显示在标题New price下面。结果可能是这样:
original price new price
19.99 39.98
11.95 23.90
2.99 5.98
19.99 39.98
19.100
8. 你可以使用大多数标准的数学运算符来操作字段值,如加(+),减(-),乘(*)和除(/)。你也可以一次对多个字段进行运算,例如:
SELECT price*ytd_sales ‘total revenue’ FROM titles
在这个例子中,通过把价格与销售量相乘,计算出了每种书的总销售额。这个SELECT语句的结果将是这样的:
total revenue
81,859,05
46,318,20
55,978,78
81,859,05
40,619,68
最后,你还可以使用连接运算符(它看起来像个加号)来连接两个字符型字段:
SELECT au_fname+’ ’+au_lname’author name’ FROM authors
(Select au_fname+au_lname’author name’ from authors)
这个语句的执行结果将是这样的:
author names
Johnson White
Marjorie Green
Cheryl Carson
Michael O’Leary
Dean Straight
…
(23 row(s) affected)
排序
通过使用ORDER BY子句,你可以强制一个查询结果按升序排列,就像这样:
SELECT au_lname FROM authors
ORDER BY au_lname
当这个SELECT语句执行时,作者名字的显示将按字母顺序排列。ORDER BY子句将作者名字按升序排列。
你也可以同时对多个列使用ORDER BY子句。例如,如果你想同时按升序显示字段au_lname和字段au_fname,你需要对两个字段都进行排序:
SELECT au_lname,au_fname FROM authors ORDER BY au_lname ,au_fname
这个查询首先把结果按au_lname字段进行排序,然后按字段au_fname排序。记录将按如下的顺序取出:
au_lname au_fname
…………………………………………………………………….
Bennet Abraham
Ringer Albert
Ringer Anne
Smith Meander
如果你想把查询结果按降序排列,你可以使用关键字DESC。
SELECT au_lname,au_fname FROM authors
WHERE au_lname=’Ringer’
ORDER BY au_lname ,au_fname DESC
这个查询从表authors中取出所有名字为Ringer的作者记录。ORDER BY子句根据作者的名字和姓,将查询结果按降序排列。结果是这样的:
au_lname au_fname
……………………………………………………………………………………….
Ringer Anne
Ringer Albert
(2 row(s) affectec)
取出互不相同的值
一个表有可能在同一列中有重复的值。例如,数据库pubs的表authors中有两个作者的名字是Ringer。如果你从这个表中取出所有的名字,名字Ringer将会显示两次。
在特定情况下,你可能只有兴趣从一个表中取出互不相同的值。如果一个字段有重复的值,你也许希望每个值只被选取一次,你可以使用关键字DISTINCT来做到这一点:
SELCET DISTINCT au_lname FROM authors WHERE au_lname=’Ringer’
警告:如同ORDER BY子句一样,强制服务器返回互不相同的值也会增加运行开销。不得不花费一些时间来完成这项工作。因此,不是必须的时候不要使用关键字DISTINCT。
创建表
在查询窗口中键入下面的SQL语句,单击执行查询按钮,执行这个语句:
CREATE TABLE guestbook (visitor VARCHAR(40),comments TEXT,entrydate DATETIME)
删除表和修改表
1. 要删除一个表,你可以使用SQL语句DROP TABLE。
DROP TABLE mytable
警告:使用DROP TABLE命令时一定要小心。一旦一个表被删除之后,你将无法恢复它。
2.如果你想清除表中的所有数据但不删除这个表,你可以使用TRUNCATE TABLE语句。
TRUNCATE TABLE mytable
3.虽然你不能删除和修改已经存在的字段,但你可以增加新字段。
ALTER TABLE mytable ADD mynewcolumn INT NULL
注意:ALTER TABLE 只允许添加可包含空值或指定了 DEFAULT 定义的列。
索引(有待深入理解)
对于包含索引的数据库,SQL Sever需要一个可观的额外空间。例如,要建立一个聚簇索引,需要大约1.2倍于数据大小的空间。
索引有两种类型:聚簇索引和非聚簇索引。在聚簇索引中,索引树的叶级页包含实际的数据:记录的索引顺序与物理顺序相同。在非聚簇索引中,叶级页指向表中的记录:记录的物理顺序与逻辑顺序没有必然的联系。
聚簇索引非常象目录表,目录表的顺序与实际的页码顺序是一致的。非聚簇索引则更象书的标准索引表,索引表中的顺序通常与实际的页码顺序是不一致的。一本书也许有多个索引。例如,它也许同时有主题索引和作者索引。同样,一个表可以有多个非聚簇索引。
通常情况下,你使用的是聚簇索引,但是你应该对两种类型索引的优缺点都有所理解。
每个表只能有一个聚簇索引,因为一个表中的记录只能以一种物理顺序存放。通常你要对一个表按照标识字段建立聚簇索引。但是,你也可以对其它类型的字段建立聚簇索引,如字符型,数值型和日期时间型字段。
从建立了聚簇索引的表中取出数据要比建立了非聚簇索引的表快。当你需要取出一定范围内的数据时,用聚簇索引也比用非聚簇索引好。例如,假设你用一个表来记录访问者在你网点上的活动。如果你想取出在一定时间段内的登录信息,你应该对这个表的DATETIME型字段建立聚簇索引。
对聚簇索引的主要限制是每个表只能建立一个聚簇索引。但是,一个表可以有不止一个非聚簇索引。实际上,对每个表你最多可以建立249个非聚簇索引。你也可以对一个表同时建立聚簇索引和非聚簇索引。
假如你不仅想根据日期,而且想根据用户名从你的网点活动日志中取数据。在这种情况下,同时建立一个聚簇索引和非聚簇索引是有效的。你可以对日期时间字段建立聚簇索引,对用户名字段建立非聚簇索引。如果你发现你需要更多的索引方式,你可以增加更多的非聚簇索引。
非聚簇索引需要大量的硬盘空间和内存。另外,虽然非聚簇索引可以提高从表中取数据的速度,它也会降低向表中插入和更新数据的速度。每当你改变了一个建立了非聚簇索引的表中的数据时,必须同时更新索引。因此你对一个表建立非聚簇索引时要慎重考虑。如果你预计一个表需要频繁地更新数据,那么不要对它建立太多非聚簇索引。另外,如果硬盘和内存空间有限,也应该限制使用非聚簇索引的数量。
这两种类型的索引都有两个重要属性:你可以用两者中任一种类型同时对多个字段建立索引(复合索引);两种类型的索引都可以指定为唯一索引。
1.非聚簇索引:CREATE INDEX mycolumn_index ON mytable (myclumn)
注意:蓝色必填,索引名字
2.如果你需要改变一个索引的类型,你必须删除原来的索引并重建一个。建立了一个索引后,你可以用下面的SQL语句删除它:
DROP INDEX mytable.mycolumn_index
聚簇索引:可以使用关键字CLUSTERED。
CREATE CLUSTERED INDEX mycolumn_clust_index ON mytable(mycolumn)
(旧版本:如果表中有重复的记录,当你试图用这个语句建立索引时,会出现错误。但是有重复记录的表也可以建立索引;你只要使用关键字ALLOW_DUP_ROW把这一点告诉SQL Sever即可:CREATE CLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn)
WITH ALLOW_DUP_ROW)
3.要对一个表建立唯一索引,可以使用关键字UNIQUE。对聚簇索引和非聚簇索引都可以使用这个关键字。这里有一个例子:
CREATE UNIQUE COUSTERED INDEX myclumn_cindex ON mytable(mycolumn)
4.要建立一个对多个字段的索引──复合索引──在索引建立语句中同时包含多个字段名。下面的例子对firstname和lastname两个字段建立索引:
CREATE INDEX name_index ON username(firstname,lastname)
添加 修改 删除数据
添加:向表中添加新记录
INSERT mytable (first_column,second_column,third_column)
VALUES (‘some data’,’some more data’,’yet more data’)
你可以使用INSERT语句向文本型字段中插入数据。但是,如果你需要输入很长的字符串,你应该使用WRITETEXT语句(旧版本)。
如果你在INSERT 语句中只指定两个字段和数据会怎么样呢?换句话说,你向一个表中插入一条新记录,但有一个字段没有提供数据。在这种情况下,有下面的四种可能:
1.如果该字段有一个缺省值,该值会被使用。
2.如果该字段可以接受空值,而且没有缺省值,则会被插入空值。
3.如果该字段不能接受空值,而且没有缺省值,就会出现错误。
4.最后,如果该字段是一个标识字段,那么它会自动产生一个新值。当你向一个有标识字段的表中插入新记录时,只要忽略该字段,标识字段会给自己赋一个新值。
向一个有标识字段的表中插入新记录后,你可以用SQL变量@@identity来访问新记录
的标识字段的值。考虑如下的SQL语句:
INSERT mytable (first_column) VALUES(‘some value’)
INSERT anothertable(another_first,another_second)
VALUES(@@identity,’some value’)
如果表mytable有一个标识字段,该字段的值会被插入表anothertable的another_first字段。这是因为变量@@identity总是保存最后一次插入标识字段的值。(查询最后一个)
注意:SET IDENTITY_INSERT 表名 Off ,当 IDENTITY_INSERT 设置为 OFF 时,不能向表 'book' 中的标识列插入显式值。
SET IDENTITY_INSERT 表名 on, 当 IDENTITY_INSERT 设置为 ON 时,必须指定表 'book' 中标识列的显式值。
删除:要从表中删除一个或多个记录,需要使用SQL DELETE语句。你可以给DELETE 语句提供WHERE 子句。WHERE子句用来选择要删除的记录。
DELETE mytable WHERE first_column=’goodby’ OR second_column=’so long’
如果你不给DELETE 语句提供WHERE 子句,表中的所有记录都将被删除。如果你想删除应该表中的所有记录,应使TRUNCATE TABLE语句。当你使用TRUNCATE TABLE语句时,记录的删除是不作记录的。也就是说,这意味着TRUNCATE TABLE 要比DELETE快得多。
修改:要修改表中已经存在的一条或多条记录,应使用SQL UPDATE语句。同DELETE语句一样,UPDATE语句可以使用WHERE子句来选择更新特定的记录。
UPDATE mytable SET first_column=’Updated!’
Second_column=’Updated!’
Third_column=’Updated!’
WHERE first_column=’Update Me1’
如果你不提供WHERE子句,表中的所有记录都将被更新。
注意:你可以对文本型字段使用UPDATE语句。但是,如果你需要更新很长的字符串,应使用UPDATETEXT语句。
Insert和select、update
有一个方法可以使INSERT 语句一次添加多个记录。
INSERT mytable (first_column,second_column)
SELECT another_first,another_second
FROM anothertable
WHERE another_first=’Copy Me!’
这个语句从anothertable拷贝记录到mytable.只有表anothertable中字段another_first的值为’Copy Me!’的记录才被拷贝。
如果你需要拷贝整个表,你可以使用SELECT INTO 语句。
SELECT * INTO newtable FROM mytable
你也可以指定只有特定的字段被用来创建这个新表。
SELECT first_column INTO newtable
FROM mytable
WHERE second_column=’Copy Me!’
假设你想从一个表中删除一个字段。使用SELECT INTO 语句,你可以创建该表的一个拷贝,但不包含要删除的字段。这使你既删除了该字段,又保留了不想删除的数据。
如果你想改变一个字段的数据类型,你可以创建一个包含正确数据类型字段的新表。创建好该表后,你就可以结合使用UPDATE语句和SELECT 语句,把原来表中的所有数据拷贝到新表中。通过这种方法,你既可以修改表的结构,又能保存原有的数据。
其它常用表达式
1.假设你有一个表用来保存对你的站点进行民意调查的结果。现在你想向所有对你的站点的评价在7到10之间的访问者发送书面的感谢信。
SELECT username FROM opinion WHERE vote>6 and vote<11
这个SELECT 语句会实现你的要求。你使用下面的SELECT 语句也可以得到同样的结果:
SELECT username FROM opinion WHERE vote BETWEEN 7 AND 10
2.现在假设你只想取出对你的站点投了1或者10的访问者的名字。要从表opinion中取出这些名字,你可以使用如下的SELECT 语句:
SELECT username FROM opinion WHERE vote=1 or vote=10
这个SELECT语句会返回正确的结果,没有理由不使用它。但是,存在一种等价的方式。使用如下的SELECT可以得到相同的结果:
SELECT username FROM opinion WHERE vote IN (1,10)
注意表达式IN 的使用。这个SELECT 语句只取出vote的值等于括号中的值之一的记录。
3.你也可以使用IN来匹配字符数据。例如,假设你只想取出Bill Gates或President Clinton的投票值。
SELECT vote FROM opinion WHERE username IN (‘Bill Gates’,’President Clinton’)
4.你可以在使用BETWEEN或IN的同时使用表达式NOT。例如,要取出那些投票值不在7到10之间的人的名字,你可以使用如下的SELECT 语句:
SELECT username FROM opinion WHERE vote NOT BETWEEN 7 and 10
5.要选取那些某个字段的值不在一列值之中的记录,你可以同时使用NOT 和IN,如下例所示:
SELECT vote FROM opinion WHERE username NOT IN (‘Bill Gates’,’President Clinton’)
下有附件
- sql基础_.rar (30.8 KB)
- 下载次数: 2
发表评论
-
JAVA 程序中使用ORACLE 绑定变量( bind variable )
2012-08-17 10:45 29051、为什么要使用绑定变量 (1)SQL语 句硬分 ... -
oracle加 行锁
2012-06-13 13:19 1677加锁是为了防止一些操作而进行的,比如说共享锁,可以防止 ... -
update多列更新
2012-04-05 16:06 1978再ETL的时候,经常会遇到列转换的问题,再对照转换中出现多列更 ... -
oracle数据库间数据快速 复制
2012-03-26 15:59 2029一种利用dblink模式: 1 Create public ... -
Can't open a connection to site 'SYB_BACKUP' 解决办法
2012-02-08 10:56 2129把可能遇到的情况总结一下: 1、出错该错误可以先检查一下Syb ... -
数据库知识:Oracle服务的知识详解
2012-01-06 14:40 1180Oracle数据库的操作中, ... -
UNION替换OR效率测试及总结
2011-11-09 17:11 1145大家在做SQL优化的过程中,可能都知道一个事实:某些情况下使用 ... -
update 多表更新
2011-11-09 15:35 1042在开发中,数据库来回换,而有些关键性的语法又各不相同,这是一件 ... -
ora-00957:duplicate column name
2011-11-07 16:49 2509ora-00957:duplicate column name ... -
Oracle: ORA-01000: 超出打开游标的最大数问题
2011-11-02 09:53 1813java.sql.SQLException: ORA-0100 ... -
几种常用的数据库分页
2011-11-01 22:33 12431.oracle数据库分页 select * from (se ... -
查看当前数据库全表扫描的SQL
2011-07-22 16:07 2175在大数据操作表的时候经常会遇到查询慢的问题,有的时候的确是数据 ... -
oracle flashback闪回技术
2011-07-21 16:13 965今天在操作数据库的时候,由于登陆的时候没有认真看数据库名,导致 ... -
oracle flashback闪回技术
2011-07-21 16:13 944今天在操作数据库的时候,由于登陆的时候没有认真看数据库名,导致 ... -
oracle临时表空间
2011-07-20 15:57 1180以下是在学习中学到的一些关于临时表空间的语句: --1、查看临 ... -
导入导出csv文件(PL/SQL Developer)
2011-07-13 19:13 2095在运用与数据库有关的操作时,总是会与数据的导入导出打交道。因此 ... -
SQL查询原理及执行顺序
2011-07-06 16:00 6509一、sql语句的执行步骤: 1)语法分析,分析语句的语法是否符 ... -
oracle基本结构
2011-06-29 19:59 1035Oracle服务器=Oracle实例+数据库(物理组件) a ... -
Oracle dba和sysdba的区别
2011-05-18 16:42 1070之前老是把dba和sysdba混为一体,今天看到论坛在讨论两者 ... -
oracle字符串转换
2011-05-04 20:03 1577今天看代码,看到不少代码显示的时候拼接字符串用的是substr ...
评论