ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 3447|回复: 12

sql学习备查

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-2-27 23:43 | 显示全部楼层 |阅读模式
本帖最后由 feng16888 于 2012-3-27 17:43 编辑

数据操作
最基本的语句
select 列名 from 表名
select  列名 from 表名 where 表达式 [order by 列名][group by 列名][having条件]
修改字段名
方法1:alter table 表名 rename column 旧列名 to 新列名
方法2:利用存储过程修改 exec sp_rename ‘表名.列名’,‘新列名’,‘column’
增加字段
alter table 表名 add 字段名(类型(宽度))   --通常只能增加一列
删除字段
alter table 表名 drop column 列名
修改列的属性
alter table 表名 alter column 字段名 属性
select * from 表名 into
目标                                                      输出情况
into<目标>,目标可以是
array(数组)                                           查询结果输出到数组
cursor(临时表)                                     查询结果输出到临时表
table|dbf(表名)                                     查询结果输出到表
to file (选项)                                         表示输出到指定的文本文件,并取代原文件的内容
additive(选项)                                       表示只添加新的数据,不清除原有的数据
to printer                                              表示输出到打印机
prompt                                                表示输出打印前先显示打印确认框
to screeen                                           表示输出到屏幕
plain                                                     表示输出时省略字段名
nowait                                                 表示显示浏览窗口后,程序继续往下执行
noconsole                                            表示禁止显示查询结果
set timing on ,表示显示后面查询语句所花费的时间
创建新表,也可以用下列方法
create table mytable (id,name,sex)  as select (id,name,sex) from emp;能导入新表,并且把数据导过去
删除表:drop table 表名。注意:1、该方法不能删除系统表。2、不能删除有外键约束的表,如果要删除,必须先删除外键。3、可以删除一个或多个表,表之间用逗号隔开。
更新表: update 表名 set 列名= 表达式,[……] [from <表达式>][where<表达式>]
增加约束,如not null, primary key,foreign key,unique,check用alter table 后面跟add, 如果要增加not null 的约束,那么要用modify,而不是add
alter table 表名 add constraint 约束名(随便起)unique[foreign key,primary key,check] (列名)
ALTER TABLE SCORES  ADD CONSTRAINT[url=]FK_SCORES_INFOS_STUID[/url] FOREIGN KEY(STUID)REFERENCES INFOS(STUID)





删除约束:alter table drop constraint 约束名,如果要删除主键的话,要在后面添加cascade
create table 表名 (id  num(8) constraint aaa (写不写都没有区别,写的目的,主要让自己清楚,避免有数据库给指定)primary key)

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-2-27 23:46 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 feng16888 于 2012-3-2 19:05 编辑

各种字段和属性知识
1.CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串“abc",对于CHAR (20),表示你存储的字符将占20个字节(包括17个空字符),而同样的VARCHAR2 (20)则只占用3个字节的长度,20只是最大值,当你存储的字符小于20时,按实际长度存储。   2.CHAR的效率比VARCHAR2的效率稍高。   3.目前VARCHAR是VARCHAR2的同义词。工业标准的VARCHAR类型可以存储空字符串,但是Oracle不这样做,尽管它保留以后这样做的权利。Oracle自己开发了一个数据类型VARCHAR2,这个类型不是一个标准的VARCHAR,它将在数据库中varchar列可以存储空字符串的特性改为存储NULL值。假如你想有向后兼容的能力,Oracle建议使用VARCHAR2而不是VARCHAR。   何时该用CHAR,何时该用varchar2?   CHAR与VARCHAR2是一对矛盾的统一体,两者是互补的关系.   VARCHAR2比CHAR节省空间,在效率上比CHAR会稍微差一些,即要想获得效率,就必须牺牲一定的空间,这也就是我们在数据库设计上常说的‘以空间换效率’。   VARCHAR2虽然比CHAR节省空间,但是假如一个VARCHAR2列经常被修改,而且每次被修改的数据的长度不同,这会引起‘行迁移’(Row Migration)现象,而这造成多余的I/O,是数据库设计和调整中要尽力避免的,在这种情况下用CHAR代替VARCHAR2会更好一些。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-2-27 23:50 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 feng16888 于 2012-3-14 12:29 编辑

取时间点的年份的写法:SELECT TO_CHAR(SYSDATE,'YYYY') FROM DUAL;里面有两个知识点,一个函数to_char,一个是表dual
to_char函数的意思:是把日期或数字转换为字符串
表dual的意思:系统表,只有一行记录,为dummy ,varchar2(1).通常来做没有具体表的事情,比如查当前用户,系统时间等
select user from dual    select sysdate from dual
函数initcap,把首字母为大写,其他的小写;upper 把所有的都是大写;lower把所有的都是小写。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-2-27 23:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 feng16888 于 2012-3-12 11:40 编辑

1、case 语句 更新时可以使用多条件的更新
update emp set wage=case
when job=1 then wage*1.05
when job=2 then wage*1.1
when job=3 then wage*1.2
else wage=wage*1.3
end
[where 条件表达式]
2、waitfor  延迟多少时间才执行:waitfor delay '11:00:00'  sql语句,等到某个时刻才执行:waitfor time '11:00:00'  select 语句
3、like '[]%',[]指定值的范围,‘[^]%',[^]%表示排除指定的范围
4、order by1,2   可以使用字段名称,也可以使用列号,同样的效果。
5、where wage=(子查询语句),要求子查询返回的值是一个,如果是多个,要用in
6、显示表的已有特征sp_help table_name
7、删除字段的属性 alter table table_name drop constraint 列名 [default,primary key,foreign key,unique,null,notnull,]

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-2-27 23:55 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 feng16888 于 2012-3-28 15:23 编辑

查询表的结构:exec sp_help 表名
&#178; 属性数据类型
当声明一个变量的值是数据库中的一行或者是数据库中某列时,可以直接使用属性类型来声明。Oracle中存在两种属性类型:%TYPE和%ROWTYPE。
&#216;  % ROWTYPE
引用数据库表中的一行作为数据类型,即RECORD类型(记录类型),是PL/SQL附加的数据类型。表示一条记录,就相当于C#中的一个对象。可以使用“.”来访问记录中的属性。
代码演示:
SQL> DECLARE
  
  2       myemp EMP%ROWTYPE;  ①
  
  3  BEGIN
  
  4       SELECT * INTO myemp FROM emp WHERE  empno=7934;  ②
  
  5       dbms_output.put_line(myemp.ename);  ③
  
  6  END;
  
  7  /
  
MILLER
  
PL/SQL procedure successfully completed
代码解析:
①  声明一个myemp对象,该对象表示EMP表中的一行。
②  从EMP表中查询一条记录放入myemp对象中。
③  访问该对象的属性可以使用“.”。
&#216;  %TYPE
引用某个变量或者数据库的列的类型作为某变量的数据类型。
代码演示:%TYPE应用
SQL> DECLARE
  
  2       sal emp.sal%TYPE;  ①
  
  3       mysal number(4):=3000;
  
  4       totalsal mysal%TYPE;  ②
  
  5  BEGIN
  
  6       SELECT SAL INTO sal FROM emp WHERE  empno=7934;
  
  7       totalsal:=sal+mysal;
  
  8       dbms_output.put_line(totalsal);
  
9   END;
  
10  /
  
4300
  
PL/SQL procedure successfully completed
代码解析:
①  定义变量sal为emp表中sal列的类型。
②  定义totalsal是变量mysal的类型。
%TYPE可以引用表中的某列作的类型为变量的数据类型,也可以引用某变量的类型作为新变量的数据类型。

TA的精华主题

TA的得分主题

发表于 2012-2-29 11:21 | 显示全部楼层
拿网站当笔记本啊,呵呵,Access版块的人气明显不行啊

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-2-29 12:51 | 显示全部楼层
szt 发表于 2012-2-29 11:21
拿网站当笔记本啊,呵呵,Access版块的人气明显不行啊

呵呵,毕竟是数据库的东西,不是人人都这么热爱的,一般人还是学会一些函数公式,基本操作,透视表的,一般就足够工作中用的了呢

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-3-27 23:30 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
3.        ROUND(d[,fmt]),返回一个以fmt为格式的四舍五入日期值,d是日期,fmt是格式模型。默认fmt为DDD,即月中的某一天。
如果fmt为“YEAR”则舍入到某年的1月1日,即前半年舍去,后半年作为下一年。
如果fmt为“MONTH”则舍入到某月的1日,即前半月舍去,后半月作为下一月。
默认为“DDD”,即月中的某一天,最靠近的天,前半天舍去,后半天作为第二天。
如果fmt为“DAY”则舍入到最近的周的周日,即上半周舍去,下半周作为下一周周日。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-3-27 23:48 | 显示全部楼层
本帖最后由 feng16888 于 2012-3-27 23:54 编辑

Oracle中一个用户可以创建表、视图等多种数据库对象,一个用户和该用户下的所有数据库对象的集合称为Schema(中文称为模式或者方案),用户名就是Schema名。一个数据库对象的全称是:用户名.对象名,即schema.object_name。比如:scott.emp
1.   序列

序列(Sequence)是用来生成连续的整数数据的对象。序列常常用来作为主键中增长列,序列中的可以升序生成,也可以降序生成。创建序列的语法是:
语法结构:创建序列
CREATE SEQUENCE sequence_name
  
[START WITH num]
  
[INCREMENT BY increment]
  
[MAXVALUE num|NOMAXVALUE]
  
[MINVALUE num|NOMINVALUE]
  
[CYCLE|NOCYCLE]
  
[CACHE num|NOCACHE]
语法解析:
①  START WITH:从某一个整数开始,升序默认值是1,降序默认值是-1。
②  INCREMENT BY:增长数。如果是正数则升序生成,如果是负数则降序生成。升序默认值是1,降序默认值是-1。
③  MAXVALUE:指最大值。
④  NOMAXVALUE:这是最大值的默认选项,升序的最大值是:1027,降序默认值是-1。
⑤  MINVALUE:指最小值。
⑥  NOMINVALUE:这是默认值选项,升序默认值是1,降序默认值是-1026。
⑦  CYCLE:表示如果升序达到最大值后,从最小值重新开始;如果是降序序列,达到最小值后,从最大值重新开始。
⑧  NOCYCLE:表示不重新开始,序列升序达到最大值、降序达到最小值后就报错。默认NOCYCLE。
⑨  CACHE:使用CACHE选项时,该序列会根据序列规则预生成一组序列号。保留在内存中,当使用下一个序列号时,可以更快的响应。当内存中的序列号用完时,系统再生成一组新的序列号,并保存在缓存中,这样可以提高生成序列号的效率。Oracle默认会生产20个序列号。
⑩  NOCACHE:不预先在内存中生成序列号。

TA的精华主题

TA的得分主题

发表于 2012-6-16 16:52 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-28 21:53 , Processed in 0.038842 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表