葡京网投哪个正规 > 新葡亰-数据 > MYSQL的常用命令和增删改查语句和数据类型,查询特殊不包括日期的数据

原标题:MYSQL的常用命令和增删改查语句和数据类型,查询特殊不包括日期的数据

浏览次数:99 时间:2020-05-07

sql 查询特殊不包括日期的数据

本文转自:

连接命令:<a href="" class='replace_word' title="MySQL知识库" target='_blank' style='color:#df3434; font-weight:bold;'>MySQL</a> -h[主机地址] -u[用户名] -p[用户密码]
创建<a href="" class='replace_word' title="MySQL知识库" target='_blank' style='color:#df3434; font-weight:bold;'>数据库</a>:create database [库名]
显示所有数据库: show databases;
打开数据库:use [库名]
当前选择的库状态:SELECT DATABASE();
创建数据表:CREATE TABLE [表名]([字段名] [字段类型]([字段要求]) [字段参数], ......);
显示数据表字段:describe 表名;
当前库数据表结构:show tables;
更改表格 
ALTER TABLE [表名] ADD COLUMN [字段名] DATATYPE
说明:增加一个栏位(没有删除某个栏位的语法。
ALTER TABLE [表名] ADD PRIMARY KEY ([字段名])
说明:更改表得的定义把某个栏位设为主键。
ALTER TABLE [表名] DROP PRIMARY KEY ([字段名])
说明:把主键的定义删除。
显示当前表字段:show columns from tablename;
删库:drop database [库名];
删表:drop table [表名];
数据操作
添加:INSERT INTO [表名] VALUES('','',......顺序排列的数据);
查询: SELECT * FROM [表名] WHERE ([条件]);
建立索引:CREATE INDEX [索引文件名] ON [表名] ([字段名]);
删除:DELETE FROM [表名] WHERE ([条件]);
修改:UPDATE [表名] SET [修改内容如name = 'Mary'] WHERE [条件];

sql =select * from test where dates not in (#2010-05-03#,#2010-05-12#) '日期格式要前后加必须加#号

以前一直用sqlserver,只有很少的一点oracle的经验,现在要用oracle做一个很复杂的存储过程,感觉好别扭~ 唉

导入外部数据文本:
1.执行外部的sql脚本
当前数据库上执行:mysql < input.sql
指定数据库上执行:mysql [表名] < input.sql
2.数据传入命令 load data local infile "[文件名]" into table [表名];
备份数据库:(dos下)
mysqldump --opt school>school.bbb

'这样就可以查出不包括#2010-05-03#,#2010-05-12#的所有数据了,再看一个比较笨的方法

为啥就不能用sqlserver呢。。。

提示:常用MySQL命令以";"结束,有少量特殊命令不能加";"结束,如备份数据库
一. 增删改查操作

'方法二

 

=================================================================================

sql = select * from test where datediff('d',日期,'2010-05-03')0 ;


  1. 增:
    insert into 表名 values(0,'<a href="" class='replace_word' title="软件测试知识库" target='_blank' style='color:#df3434; font-weight:bold;'>测试</a>');
    注:如上语句,表结构中有自动增长的列,也必须为其指定一个值,通常为0
    insert into 表名(id,name) values(0,'尹当')--同上
    2.删数据:
    delete from 表名;
    delete from 表名 where id=1;
    删除结构:
    删数据库:drop database 数据库名;
    删除表:drop table 表名;
    删除表中的列:alter table 表名 drop column 列名;
  2. 改:
    修改所有:updata 表名 set 列名='新的值,非数字加单引号' ;
    带条件的修改:updata 表名 set 列名='新的值,非数字加单引号' where id=6;
    4.查:
    查询所有的数据:select *from 表名;
    带条件的查询:
    select *from 表名 where 列名=条件值;
    Select * from 表名 where 列名 not like(like) '字符值'
    分页查询:select *from 表名 limit 每页数量 offset 偏移量;

'这个方法有一点麻烦,如果是N个日期那就要做N个datadiff哦。

 

二.操作命令

SQL server 与Oracle开发比较

=================================================================================

  本文档主要从oracle与sql server语法上进行差异性比较,诸如两者在管理,性能,优化等方面的差异不作比较。

  1. 查看数据库信息:show databases;
    2.查看表信息:show tables;
    3.查看表的结构:desc 表名
  2. 新建数据库:create database 数据库名;
    5.操作指定数据库:use 数据库名;
    6.新建数据表(先use 操作库);
    create table 表名(规范为tbl_表名)
    (
    id int auto_increment primary key,( auto_increment为自动增长)
    name varchar(20) primary key
    )ENGINE=InnoDB DEFAULT CHARSET=gbk//支持事务和设置表的编码
    6.2添加主外键:
    alter table 外表名 add constraint FK_名称 foreign key(外列) references 主表名(主列)
    如现有两表 主表tbl_order 子表tbl_orderdetail 现子表tbl_orderdetail的oid列引用了主表tbl_order的oid列
    则命令如下:
    alter table tbl_orderdetail add constraint FK_oid foreign key(oid) references tbl_order(oid)
    7.导出表,备份到一个文件中,如.txt,.doc
    cmd命令窗口:mysqldump -u 用户名 -p 需要备份的数据库名 >备份的文件的保存路径和文件名
    注:如指定的文件不存在,mysql会自动添加一个文件,此命令不能加分号结尾(文件没有备份建数据库操作)
    8.导入数据库备份文件:
    (1).在mysql命令窗口
    (2).新建一个要导入的数据库(因为备份中没有备份建数据库操作)
    (3).use 当前库名
    (4).source 备份的文件的保存路径和文件名(此命令不能加分号结尾)

●概念上区别

三:系统操作

   1.Oracle 是一种对象关系数据库管理系统(ORDBMS),而Sql server 只是关系型数据库管

=================================================================================

     理系统(RDBMS).

  1. 打开服务:net start mysql(mysql为配置时,可自定名称)
    2.关闭服务:net stop mysql
    3.从cmd 模式进入mysql
    (1).mysql -u 用户名 -p 回车>输入正确密码>进入欢迎
    (2).mysql -h IP(本机localhost) -u 用户名 -p 回车>输入正确密码>进入欢迎
    3.退出:exit/quit;
    4.修改用户密码:mysqladmin -u 用户名 -p password 新密码
    5.处理中文乱码:
    (1).在D:/MySQL /MySQL Server 5.0/data的操作数据为文件中查看是否为以下:
    default-character-set=gbk
    default-collation=gbk_chinese_ci

   2.Oracle使用Internet文件系统,该系统基于Java的应用程序,可以使数据库基于成为

(2).查看安装文件默认编码:D:/MySQL/MySQL Server 5.0>my>default-character-set=gbk

     Internet的开发平台;Sql server 是基于windows

=================================================================================

   3.Orace 主要的三类文件是:数据文件,控制文件,恢复日志文件

启动:net start mySql;
进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
列出数据库:show databases;
选择数据库:use databaseName;
列出表格:show tables;
显示表格列的属性:show columns from tableName;
建立数据库:source fileName.txt;
匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
增加一个字段:alter table tabelName add column fieldName dateType;
增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";
每条语句输入完毕后要在末尾填加分号';',或者填加'/g'也可以;
查询时间:select now();
查询当前用户:select user();
查询数据库版本:select version();
查询当前使用的数据库:select database();

     Sql server: 主要数据文件(必须有且只能有一个),次要数据文件以及日志文件

1、删除student_course数据库中的students数据表:
rm -f student_course/students.*

   4.两者支持的命令类别差不多,数据定义语言,数据操纵语言,事务处理控制语言,

2、备份数据库:(将数据库test备份)
mysqldump -u root -p test>c:/test.txt
备份表格:(备份test数据库下的mytable表格)
mysqldump -u root -p test mytable>c:/test.txt
将备份数据导入到数据库:(导回test数据库)
mysql -u root -p test

     数据控制语言.在Oracle中,在事务控制语言中除了commit,rollback等还多了一个

3、创建临时表:(建立临时表zengchao)
create temporary table zengchao(name varchar(10));

     Savepoint,设置保存点。

4、创建表是先判断表是否存在
create table if not exists students(……);

   5.oracle sql的扩展叫PL/SQL,主要的结构化查询工具有sql*plus,isql*plus, pl/sql等

5、从已经有的表中复制表的结构
create table table2 select * from table1 where 1<>1;

     Ms sql的扩展叫Transact-SQL,主要的结构化查询工具就是自带的查询分析器

6、复制表
create table table2 select * from table1;

   6.主要数据类型

7、对表重新命名
alter table table1 rename as table2;

     Orace:主要支持char ,varchar2,long,number,datetime,raw,long raw,clob,blob,bfie

8、修改列的类型
alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned

     前面三个是Character数据类型,varchar2支持可变长度的字符串,long支持可

9、创建索引
alter table table1 add index ind_id (id);
create index ind_id on table1 (id);
create unique index ind_id on table1 (id);//建立唯一性索引

     变长度的字符数据,raw,long raw用于存储二进制数据,long raw 可变长度

10、删除索引
drop index idx_id on table1;
alter table table1 drop index ind_id;

     最后三个是大对象(lob)数据类型,存储非结构化的信息,例如声音剪辑,视频文件

11、联合字符或者多个列(将列id与":"和列name和"="连接)
select concat(id,':',name,'=') from students;

     CLOG表示Character Lob,可以存储大量的字符数据,它对于存储非结构化的XML

12、limit(选出10到20条)<第一个记录集的编号是0>
select * from students order by id limit 9,10;

     文档非常有用。BLOG表示Binary LOG,此数据类型可以存储大型二进制对象,如

13、MySQL不支持的功能
事务,视图,外键和引用完整性,存储过程和触发器

     图形、视频剪辑,声音文件等

14、MySQL会使用索引的操作符号
<,<=,>=,>,=,between,in,不带%或者_开头的like

     支不支持,money,货币

15、使用索引的缺点
1)减慢增删改数据的速度;
2)占用磁盘空间;
3)增加查询优化器的负担;
当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;

     Sql server 主要支持的文本类型char ,varchar,nchar,nvarchar,text,ntext,image,货币类型

16、分析索引效率
方法:在一般的SQL语句前加上explain;
分析结果的含义:
1)table:表名;
2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
3)possible_keys:查询可以利用的索引名;
4)key:实际使用的索引;
5)key_len:索引中被使用部分的长度(字节);
6)ref:显示列名字或者"const"(不明白什么意思);
7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
8)extra:MySQL的建议;

     Money,二进制 binary,varbinary等等

17、使用较短的定长列
1)尽可能使用较短的数据类型;
2)尽可能使用定长数据类型;
a)用char代替varchar,固定长度的数据处理比变长的快些;
b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;

●开发语法

18、使用not null和enum
尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;

A.SQL 语法

19、使用optimize table
对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;

    两者的SQL语法基本上是相同的,只是一些细节方面的问题

20、使用procedure analyse()
可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
select * from students procedure analyse();
select * from students procedure analyse(16,256);
第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;

一: 表的管理:修改表的结构,如增加,删除列,創建表

21、使用查询缓存
1)查询缓存的工作方式:
第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
2)配置缓存参数:
变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与 select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询; query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。

       修改表

22、调整硬件
1)在机器上装更多的内存;
2)增加更快的硬盘以减少I/O等待时间;
寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
3)在不同的物理硬盘设备上重新分配磁盘活动;
如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。

          1.修改表的列的數據類型,大小的定義不同,如下面修改數據類型。

一、连接MYSQL。

            Ms sql是ALTER TABLE table_name ALTER COLUMN col DECIMAL (5, 2)

格式: mysql -h主机地址 -u用户名 -p用户密码

                Oracle是 Alter TABLE table_name modify(col decimal(5,2))

1、例1:连接到本机上的MYSQL。

          2.增加和刪除表的列,兩者是相同的

首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是:mysql>

            Alter tabe table_name add(col definition)

2、例2:连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为 root,密码为abcd123。则键入以下命令:

            Alter tabe table_name drop column col_name

mysql -h110.110.110.110 -uroot -pabcd123

          3 .Oracle如果不要用某列,然後又不想刪除,就可以将某个列标记为未用

(注:u与root可以不用加空格,其它也一样)

            Alter tabe table_name set unused(tel_no)

3、退出MYSQL命令: exit (回车)

.创建临时表

二、修改密码。

Oracle 的語法是:

格式:mysqladmin -u用户名 -p旧密码 password 新密码

Create global temporary table aa(col number) on commit preserve rows;

1、例1:给root加个密码ab12。首先在DOS下进入目录mysqlbin,然后键入以下命令

临时表只在用户会话时存在的表,或其数据在用户事务处理期间可

mysqladmin -uroot -password ab12

持续存在的表,创建临时表时可以指定该表是否应当在用户会话

注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。

期间持续存在(使用on commit preserve rows)

2、例2:再将root的密码改为djg345。

On commit delete rows 表示事务处理完成后删除它的行

mysqladmin -uroot -pab12 password djg345

            Ms sql的語法是:

三、增加新用户。(注意:和上面不同,下面的因为是MYSQL环境中的命令,所以后面都带一个分号作为命令结束符)

               Select * into #temptable from existedtable

格式:grant select on 数据库.* to 用户名@登录主机 identified by /"密码/"

二 查询方面:      

例1、增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入MYSQL,然后键入以下命令:

1.查表的前N行记录

grant select,insert,update,delete on *.* to test1@/"%/" Identified by /"abc/";

oracle 是用rownum 如select * from table_name where rownum<n

但例1增加的用户是十分危险的,你想如某个人知道test1的密码,那么他就可以在internet上的任何一台电脑上登录你的mysql数据库并对你的数据可以为所欲为了,解决办法见例2。

             

例 2、增加一个用户test2密码为abc,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作(localhost指本地主机,即MYSQL数据库所在的那台主机),这样用户即使用知道test2的密码,他也无法从 internet上直接访问数据库,只能通过MYSQL主机上的web页来访问了。

            Ms sql 是用top 如select top n * from table_name

grant select,insert,update,delete on mydb.* to test2@localhost identified by /"abc/";

             

如果你不想test2有密码,可以再打一个命令将密码消掉。

         2.查詢表的結構

grant select,insert,update,delete on mydb.* to test2@localhost identified by /"/";

Orace 可以通過desc来查看表的结构 语法是:desc table_name

在上篇我们讲了登录、增加用户、密码更改等问题。下篇我们来看看MYSQL中有关数据库方面的操作。注意:你必须首先登录到MYSQL中,以下操作都是在MYSQL的提示符下进行的,而且每个命令以分号结束。

       或者使用数据字典表user_tab_coumns也可以查看到

一、操作技巧

         Select column_name,data_type from user_tab_coumns

1、如果你打命令时,回车后发现忘记加分号,你无须重打一遍命令,只要打个分号回车就可以了。也就是说你可以把一个完整的命令分成几行来打,完后用分号作结束标志就OK。

         Where table_name=''

2、你可以使用光标上下键调出以前的命令。但以前我用过的一个MYSQL旧版本不支持。我现在用的是mysql- 3.23.27-beta-win。

           Ms sql可以通過一些系統的存儲過程來看表的結構

二、显示命令

             語法是:exec sp_help table_name

1、显示数据库列表。

         3.将一个表的数据添加到另外一个表中

show databases;

a.新表存在前提下:兩者語法是一樣的,如

刚开始时才两个数据库:mysql和test。mysql库很重要它里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。

                 insert into newtable(col1)select col1 from old_table

2、显示库中的数据表:

b.新表不存在前提下,可以用

use mysql; //打开库,学过FOXBASE的一定不会陌生吧

oracle 可以用Create tabe new _table_name as select * from old_table

show tables;

             ms sql 可以用 Select * into new_table from old_table

3、显示数据表的结构:

   三 操作符

describe 表名;

         1.連接操作符

4、建库:

             Oracle是 ‘||’; Ms sql是‘+’

create database 库名;

         2. Oracle的比较操作符中不等于除了'<>'之外,还有一个 '!='

5、建表:

         3. 算术操作符,都是+-*/;逻辑操作符都是and,not,or(相同點)

use 库名;

         4. oracle集合操作符除了union,union all之外还加入intersect,minus

create table 表名 (字段设定列表);

           Intersect是仅返回两个查询都有行,minus返回第一个查询有第

6、删库和删表:

           二个查询没有的行

drop database 库名;

   四   函數

drop table 表名;

        1.轉換函數

7、将表中记录清空:

           Oracle 中有to_char(),to_date(),to_number()

delete from 表名;

           Ms sql 中有cast,convert

8、显示表中的记录:

        2.系统日期:

select * from 表名;

Oracle: sysdate

三、一个建库和建表以及插入数据的实例

Ms sql:  getdate()

drop database if exists school; //如果存在SCHOOL则删除

          如

create database school; //建立库SCHOOL

            Select sysdate from dual 一定要from子句

use school; //打开库SCHOOL

            Select getdate() 不一定要from子句

create table teacher //建立表TEACHER

         3.Decode函数相当if else,或者ms 中的case语句

(

           语法是decode(value,if1,then1,if2,then2....)

id int(3) auto_increment not null primary key,

             如decode(col1,'1','true','0','fase')

name char(10) not null,

4.常规函数

address varchar(50) default ’深圳’,

Nvl 语法是NVL(EXP1,EXP2) 表示如果ex1为空则返回ex2

year date

Nvl2 语法是nvl(exp1,exp2,exp3)表示如果ex1为空,则返回ex3,否则返回ex2

); //建表结束

Nullif 语法是nullif(ex1,ex2) 如果这两个表达式相等则返回空

//以下为插入字段

coalesce语法是coalesce(ex1,ex2,....exn)返回第一个非空表达式

insert into teacher values(’’,’glchengang’,’深圳一中’,’1976-10-10’);

         5.分組函數

insert into teacher values(’’,’jack’,’深圳一中’,’1975-12-23’);

Oracle 中的分組函數Rollup,cube

注:在建表中(1)将ID设为长度为3的数字字段:int(3)并让它每个记录自动加一:auto_increment并不能为空:not null而且让他成为主字段primary key(2)将NAME设为长度为10的字符字段(3)将ADDRESS设为长度50的字符字段,而且缺省值为深圳。varchar和char有什么区别呢,只有等以后的文章再说了。(4)将YEAR设为日期字段。

Rollup返回的结果集包含分组行和小计行,cube产生交叉报表

如果你在mysql提示符键入上面的命令也可以,但不方便调试。你可以将以上命令原样写入一个文本文件中假设为 school.sql,然后复制到c://下,并在DOS状态进入目录//mysql//bin,然后键入以下命令:

如:

mysql -uroot -p密码 < c://school.sql

Select a,b,sum(c) from tabname group by rollup(a,b)

如果成功,空出一行无任何显示;如有错误,会有提示。(以上命令已经调试,你只要将//的注释去掉即可使用)。

Select a,b,sum(c) from tabname group by cube(a,b)

四、将文本数据转到数据库中

            Ms sql中的分組函數 compute 和 compute by

1、文本数据应符合的格式:字段数据之间用tab键隔开,null值用//n来代替.

              Compute子句为行聚集函数生成汇总值,该汇总值做为一个附加的行显示

例:

            在结果集中。没有GROUP BY 子句的情况下,也可以使用关键字COMPUTE.

3 rose 深圳二中 1976-10-10

            此关键字使用MAX,MIN,SUM,COUNT,AVG等函数生成汇总值,而compute by

4 mike 深圳一中 1975-12-23

            则在控制中断时给出该汇总值,compute by 必须包括在order by 子句中。

2、数据传入命令 load data local infile /"文件名/" into table 表名;

         還有很多函數,諸如日期函數,字符串函數等等,就不一一作比較了。

注意:你最好将文件复制到//mysql//bin目录下,并且要先用use命令打表所在的库。

         Oracle中還有很多比較好的分析函數,也不列舉了。

五、备份数据库:(命令在DOS的//mysql//bin目录下执行)
mysqldump --opt school>school.bbb

五.Oracle中的数据库对象

注释:将数据库school备份到school.bbb文件,school.bbb是一个文本文件,文件名任取,打开看看你会有新发现。

同义词

mysql命令行常用命令

      作用:简化SQL语句;隐藏对象的名称和所有者,提供对象的公共访问等。

第一招、mysql服务的启动和停止
net stop mysql
net start mysql
第二招、登陆mysql
语法如下: mysql -u用户名 -p用户密码
键入命令mysql -uroot -p, 回车后提示你输入密码,输入12345,然后回车即可进入到mysql中了,mysql的提示符是:
mysql>
注意,如果是连接到另外的机器上,则需要加入一个参数-h机器IP
第三招、增加新用户
格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码"
如,增加一个用户user1密码为password1,让其可以在本机上登录, 并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入mysql,然后键入以下命令:
grant select,insert,update,delete on *.* to user1@localhost Identified by "password1";
如果希望该用户能够在任何机器上登陆mysql,则将localhost改为"%"。
如果你不想user1有密码,可以再打一个命令将密码去掉。
grant select,insert,update,delete on mydb.* to user1@localhost identified by "";
第四招: 操作数据库
登录到mysql中,然后在mysql的提示符下运行下列命令,每个命令以分号结束。
1、 显示数据库列表。
show databases;
缺省有两个数据库:mysql和 test。 mysql库存放着mysql的系统和用户权限信息,我们改密码和新增用户,实际上就是对这个库进行操作。
2、 显示库中的数据表:
use mysql;
show tables;
3、 显示数据表的结构:
describe 表名;
4、 建库与删库:
create database 库名;
drop database 库名;
5、 建表:
use 库名;
create table 表名(字段列表);
drop table 表名;
6、 清空表中记录:
delete from 表名;
7、 显示表中的记录:
select * from 表名;
第五招、导出和导入数据

      语法:CREATE PUBLIC SYNONYM seqname FOR OBJECT

  1. 导出数据:
    mysqldump --opt test > mysql.test
    即将数据库test数据库导出到mysql.test文件,后者是一个文本文件
    如:mysqldump -u root -p123456 --databases dbname > mysql.dbname
    就是把数据库dbname导出到文件mysql.dbname中。
  2. 导入数据:
    mysqlimport -u root -p123456 < mysql.dbname。
    不用解释了吧。
  3. 将文本数据导入数据库:
    文本数据的字段数据之间用tab键隔开。
    use test;
    load data local infile "文件名" into table 表名;

序列

SQL常用命令使用方法:

     用来生成唯一、边续的整数,它通常用来自动生成主键或唯一值的键。

(1) 数据记录筛选:

    創建序列: create sequence seqname [increment by 1] start with 1 maxvalue 10

sql="select * from 数据表 where 字段名=字段值 order by 字段名 [desc]"

     minvalue 1 cycle cache

sql="select * from 数据表 where 字段名 like '%字段值%' order by 字段名 [desc]"

    访问序列:

sql="select top 10 * from 数据表 where 字段名 order by 字段名 [desc]"

                   Select seqname.nextval from dual 将返回序列的初始值

sql="select * from 数据表 where 字段名 in ('值1','值2','值3')"

                   Select seqname.currval from dual   返回序列的当前值

sql="select * from 数据表 where 字段名 between 值1 and 值2"

       簇(cluster):

(2) 更新数据记录:

            簇是共享相同数据块的一组表,因为这些表具有相同的列,并且经常一起使用。

sql="update 数据表 set 字段名=字段值 where 条件表达式"

          当两个或多个表的存储在物理上十分接近时,可以通过簇来提高使用这些表的

sql="update 数据表 set 字段1=值1,字段2=值2 …… 字段n=值n where 条件表达式"

          SQL联接语句的性能。簇是存储表的方法

(3) 删除数据记录:

          应该先创建簇,然后再创建簇中的表,

sql="delete from 数据表 where 条件表达式"

六.Oracle中的对象类型

sql="delete from 数据表" (将数据表所有记录删除)

  1. 抽象数据类型

(4) 添加数据记录:

    此类型是包含一个或多个子类型的数据类型,并且这些数据类型并不局限

sql="insert into 数据表 (字段1,字段2,字段3 …) valuess (值1,值2,值3 …)"

   于标准的oracle数据类型

sql="insert into 目标数据表 select * from 源数据表" (把源数据表的记录添加到目标数据表)

     如:create or replace type t_mm as object(col number(3),

(5) 数据记录统计函数:

         col2 varchar2(20))/

AVG(字段名) 得出一个表格栏平均值
COUNT(*|字段名) 对数据行数的统计或对某一栏有值的数据行数统计
MAX(字段名) 取得一个表格栏最大的值
MIN(字段名) 取得一个表格栏最小的值
SUM(字段名) 把数据栏的值相加

       此时可以在创建表时使用该类型,如下

引用以上函数的方法:

         Create table test (aa varchar2(5),bb t_mm, cc number(10))

sql="select sum(字段名) as 别名 from 数据表 where 条件表达式"
set rs=conn.excute(sql)

       插入记录:

用 rs("别名") 获取统的计值,其它函数运用同上。

          Insert into test values('cccc', t_mm(1,'col'))

(6) 数据表的建立和删除:

       类型声明:

CREATE TABLE 数据表名称(字段1 类型1(长度),字段2 类型2(长度) …… )

           用户定义的数据类型也可以声明为 final,not final,instantiable,

例:CREATE TABLE tab01(name varchar(50),datetime default now())

           not instantiabe

DROP TABLE 数据表名称 (永久性删除一个数据表)

           Not final表示允许类型派生子类型。默认是final

select * from test.text where 1 *表示所有栏目 test指数据库名text指表名 where指条件
Select remark as r id,uid from test.text where 指id uid 2栏显示 as 就是给栏目命名
select * from test.text where id>4 指ID大于4的都显示出来
select * from test.text where id<>4 指ID 不等于4的都出来
select * from test.text where id=1 指ID等于1的出来
select * from test.text where id in(1,3,5) 指找出ID为1 3 5的 not in()则相反
select * from test.text where uid like "%王%" 指UID里只要带王字的都出来 %王 表示什么王 ,王%表示 王什么。
select * from test.text where remark like "%学%" 指remark里带学的都出来
select * from test.text where id between 1 and 10 and uid like "%王%"表示ID 1-10 并且 UID带王字的出来
select * from test.text where id not between 1 and 4 指ID不在1-4里面的 出来
(1 and 2 表示满足1且满足2 1 or 2 表示满足1和满足2 )and or可以连接很多条件
葡京正网网投 ,select * from test.text group by remark 显示列出remark有多少类别 如图↓ 有5类 group by 就是分组命令

           create or replace type t_mm as object(col number(3),

select * from test.text order by regdate asc 把regdate 按从小到大排列
ASC不打就是默认从小到大 DESC表示从大到小 如 order desc
select * from test.text order by regdate asc,id desc 这样就查询出日期从小到大 然后在满足日期的排列后 ID从大到小排列
select * from test.text limit 0,5 表示取5条记录 如果是3,6 那就是第4-第9条记录被取出 如图↓
如过只写一个6那就等于0,6
select * from test.text group by remark order by regdate limit 6 先分组 再排序 LIMIT放最后 这是语法不能颠倒。
select count(id) from test.text count()表示查询有多少条信息 这样根据表显示出10条
select max(regdate) from test.text max() 查询最大值 只能针对数字 包括日期 根据表显示出2008-10-22 14:41:30
select min(regdate)from test.text min() 查询最小值 只能针对数字 包括日期 根据表显示出2008-10-07 13:21:32
select avg(id) from test.text avg() 查询平均值 也只针对数字 包括日期 显示出5.5 如算平均分数
select sum(id) from test.text sum() 查询累计值 数字包括日期 显示出55 1+2+3+。。10=55 如算总分数
insert 插入语句
insert into `text`(`id`,`uid`,`regdate`,`remark`)values(null,'ken',now(),'学生') 其中null就是没有 now()就是时间日期自动生成
字段的类型要设计好。特别注意!

            col2 varchar2(20)) Not final

Update 更改语句
Update 表名 set 字段=值 where 条件 LIMIT(可省略)
update test.text set uid='kenchen' where id=11 意思是把ID是11的UID 改成kenchen

           not instantiabe表示类型没有构造函数。

Delete 删除语句
Delete from 表命 where limit
Delete from text where id=3 意思是把ID=3的信息条删除!

  1. 可变数组

mysql 字段类型说明- -

    可变数组有助于在单个行中存储和重复记录的属性。

MySQL支持大量的列类型,它可以被分为3类:数字类型、日期和时间类型以及字符串(字符)类型。本节首先给出可用类型的一个概述,并且总结每个列类型的存储需求,然后提供每个类中的类型性质的更详细的描述。概述有意简化,更详细的说明应该考虑到有关特定列类型的附加信息,例如你能为其指定值的允许格式。

    数据与表中的其它数据是存储在一起的,有限数目的行,不能被索引

由MySQL支持的列类型列在下面。下列代码字母用于描述中:

    创建可变数组的 语法是:

M
指出最大的显示尺寸。最大的合法的显示尺寸是 255 。
D
适用于浮点类型并且指出跟随在十进制小数点后的数码的数量。最大可能的值是30,但是应该不大于M-2。
方括号(“[”和“]”)指出可选的类型修饰符的部分。

       create type array1 as varray(5) of varchar2(5)

注意,如果你指定一个了为ZEROFILL,MySQL将为该列自动地增加UNSIGNED属性。

    向可变数组中插入记录

TINYINT[(M)] [UNSIGNED] [ZEROFILL]
一个很小的整数。有符号的范围是-128到127,无符号的范围是0到255。

    Insert into test1 values ('2ee', array1('1','2','3','4','5') )

SMALLINT[(M)] [UNSIGNED] [ZEROFILL]
一个小整数。有符号的范围是-32768到32767,无符号的范围是0到65535。

    Select * from test1 结果集如下

MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]
一个中等大小整数。有符号的范围是-8388608到8388607,无符号的范围是0到16777215。

       2ee

INT[(M)] [UNSIGNED] [ZEROFILL]
一个正常大小整数。有符号的范围是-2147483648到2147483647,无符号的范围是0到4294967295。

       '1','2','3','4','5'

INTEGER[(M)] [UNSIGNED] [ZEROFILL]
这是INT的一个同义词。
BIGINT[(M)] [UNSIGNED] [ZEROFILL]
一个大整数。有符号的范围是-9223372036854775808到9223372036854775807,无符号的范围是0到
18446744073709551615。注意,所有算术运算用有符号的BIGINT或DOUBLE值完成,因此你不应该使用大于9223372036854775807(63位)的有符号大整数,除了位函数!注意,当两个参数是INTEGER值时,-、+和*将使用BIGINT运算!这意味着如果你乘2个大整数(或来自于返回整数的函数),如果结果大于9223372036854775807,你可以得到意外的结果。一个浮点数字,不能是无符号的,对一个单精度浮点数,其精度可以是<=24,对一个双精度浮点数,是在25 和53之间,这些类型如FLOAT和DOUBLE类型马上在下面描述。FLOAT(X)有对应的FLOAT和DOUBLE相同的范围,但是显示尺寸和小数位数是未定义的。在MySQL3.23中,这是一个真正的浮点值。在更早的MySQL版本中,FLOAT(precision)总是有2位小数。该句法为了ODBC兼容性而提供。

    Select col2 from test1 结果集如下

FLOAT[(M,D)] [ZEROFILL]
一个小(单精密)浮点数字。不能无符号。允许的值是-3.402823466E+38到-1.175494351E-38,0 和1.175494351E-38到3.402823466E+38。M是显示宽度而D是小数的位数。没有参数的FLOAT或有<24 的一个参数表示一个单精密浮点数字。
DOUBLE[(M,D)] [ZEROFILL]
一个正常大小(双精密)浮点数字。不能无符号。允许的值是-1.7976931348623157E+308到-2.2250738585072014E-308、 0和2.2250738585072014E-308到1.7976931348623157E+308。M是显示宽度而D是小数位数。没有一个参数的DOUBLE或FLOAT(X)(25 < = X < = 53)代表一个双精密浮点数字。
DOUBLE PRECISION[(M,D)] [ZEROFILL]
REAL[(M,D)] [ZEROFILL]
这些是DOUBLE同义词。
DECIMAL[(M[,D])] [ZEROFILL]
一个未压缩(unpack)的浮点数字。不能无符号。行为如同一个CHAR列:“未压缩”意味着数字作为一个字符串被存储,值的每一位使用一个字符。小数点,并且对于负数,“-”符号不在M中计算。如果D是0,值将没有小数点或小数部分。DECIMAL值的最大范围与DOUBLE相同,但是对一个给定的DECIMAL列,实际的范围可以通过M和D的选择被限制。如果D被省略,它被设置为0。如果M被省掉,它被设置为10。注意,在MySQL3.22里,M参数包括符号和小数点。

       '1','2','3','4','5'

NUMERIC(M,D) [ZEROFILL]
这是DECIMAL的一个同义词。 DATE
一个日期。支持的范围是'1000-01-01'到'9999-12-31'。MySQL以'YYYY-MM-DD'格式来显示DATE值,但是允许你使用字符串或数字把值赋给DATE列。
DATETIME
一个日期和时间组合。支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。MySQL以'YYYY-MM-DD HH:MM:SS'格式来显示DATETIME值,但是允许你使用字符串或数字把值赋给DATETIME的列。
TIMESTAMP[(M)]
一个时间戳记。范围是'1970-01-01 00:00:00'到2037年的某时。MySQL以YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD或YYMMDD格式来显示TIMESTAMP值,取决于是否M是14(或省略)、12、8或6,但是允许你使用字符串或数字把值赋给TIMESTAMP列。一个TIMESTAMP列对于记录一个INSERT或UPDATE操作的日期和时间是有用的,因为如果你不自己给它赋值,它自动地被设置为最近操作的日期和时间。你以可以通过赋给它一个NULL值设置它为当前的日期和时间。
TIME
一个时间。范围是'-838:59:59'到'838:59:59'。MySQL以'HH:MM:SS'格式来显示TIME值,但是允许你使用字符串或数字把值赋给TIME列。
YEAR[(2|4)]
一个2或4位数字格式的年(缺省是4位)。允许的值是1901到2155,和0000(4位年格式),如果你使用2位,1970-2069( 70-69)。MySQL以YYYY格式来显示YEAR值,但是允许你把使用字符串或数字值赋给YEAR列。(YEAR类型在MySQL3.22中是新类型。)
CHAR(M) [BINARY]
一个定长字符串,当存储时,总是是用空格填满右边到指定的长度。M的范围是1 ~ 255个字符。当值被检索时,空格尾部被删除。CHAR值根据缺省字符集以大小写不区分的方式排序和比较,除非给出BINARY关键词。NATIONAL CHAR(短形式NCHAR)是ANSI SQL的方式来定义CHAR列应该使用缺省字符集。这是MySQL的缺省。CHAR是CHARACTER的一个缩写。
[NATIONAL] VARCHAR(M) [BINARY]
一个变长字符串。注意:当值被存储时,尾部的空格被删除(这不同于ANSI SQL规范)。M的范围是1 ~ 255个字符。 VARCHAR值根据缺省字符集以大小写不区分的方式排序和比较,除非给出BINARY关键词值。 VARCHAR是CHARACTER VARYING一个缩写。
TINYBLOB  
TINYTEXT
一个BLOB或TEXT列,最大长度为255(2^8-1)个字符。
BLOB
TEXT
一个BLOB或TEXT列,最大长度为65535(2^16-1)个字符。
MEDIUMBLOB  
MEDIUMTEXT
一个BLOB或TEXT列,最大长度为16777215(2^24-1)个字符。
LONGBLOB  
LONGTEXT
一个BLOB或TEXT列,最大长度为4294967295(2^32-1)个字符。
ENUM('value1','value2',...)
枚举。一个仅有一个值的字符串对象,这个值式选自与值列表'value1'、'value2', ...,或NULL。一个ENUM最多能有65535不同的值。
SET('value1','value2',...)
一个集合。能有零个或多个值的一个字符串对象,其中每一个必须从值列表'value1', 'value2', ...选出。一个SET最多能有64个成员。

    Select * from table(select t.col2 from test1 where col1='2ee'); 结果集如下

转自csdn知识库

       1

       2

       3

       4

       5

  1. 嵌套表

   它是包含在表中的表,对每行数据项数目没有限制,一个表在

另一表中是作为一列,主表中的每一行的嵌套表可以包含若干行。

    创建嵌套表

       先创建一个类型

       Create type ord_ty as object(itemcode varchar2(5),qty _ord number(5),

      Qty_held number(5));

      创建另一个抽象数据类型,即嵌套表数据类型

      Create type ord_nt as table of ord_ty

      创建嵌套表

       Create table order_mas (orderno varchar2(5),odate date,

       vencode varchar2(5), dets ord_nt) nested table dets store as ord_nt_tab;

      向嵌套表中插入数据:

       Insert into order_mas values(‘001’,to_date('18-07-08','DD-MM-YY'),

       'V009',ord_nt( ord_ty('i001',10,5),ord_ty('i002',34,2));

      更新嵌套表的值:

       Update table(select e.dets from order_mas e where e.orderno='001') p

       Set value(p) =ord_ty('i090',8,9) where p.itemcode='i001';

      删除嵌套表的值:

        Delete from table(select e.dets from order_mas e where e.orderno='001') p

        where p.itemcode='i001';

  1. 对象表

              在对象表中每一行都是一个行对象,对象表与关系表不同:

              对象表中的每一行都有一个OID值,即对象标识符值。该值是在创建行时

             分配的。可以使用create table 命令来创建对象表。

               在创建对象类型时,Oracle 中是不允许为属性定义约束条件,但是

             可以在创建对象表时为对象类型的属性指定约束条件。

               Create table vend_master of vend_ty(vencode constraint vc_pk primary key);

               创建对象表与关系表语法不同

               表的使用方法不同 插入数据可以使用抽象数据类型的构造函数,如果对象

              表所基于抽象数据类型又基于另一抽象数据类型,则必须多个构造函数的嵌

              套调用。

                  Insert into vend_master values (vend_ty());

  1. 对象视图

       借助对象视图可以将面向对象的结构(如抽象数据类型)应用于现有已经

     投入使用的表,而不需重建整个应用程序

B.PL/SQL與T_SQL语法

 

葡京网投哪个正规 ,一批處理

  SQL的能力畢竟有限,諸如事務處理方面,批處理於是oracle與ms 都把它進行了擴展,oracle 的擴展叫PL/SQL由声明部分,可执行部分,异常处理部分组成顺序如下:   

Declare declarations

Begin

      Executable statements

      Exception

          Handles

End

   Ms 的擴展叫 Transact_SQL,簡稱T_SQL.

      批处理:就是一次执行处理一组命令的过程。GO关键字樗着批处理的结束。

     如use master

        go

      复杂一点也是由三部分組成:声明部分,可执行部分,异常处理部分。

     不同的是,異常處理部分一般用跳轉語句來實現。    

例如:

         Declare declarations

          Begin

             Excutable statements

             IF @ERROR <>0 GOTO ERROR

         End

         ERROR:

            BEGIN

             RAISERROR(20058, 16, -1)

              return (1)

            END

二逻辑控制语句       

   1. 控制结构:

     Oracle

         If condition then ........

         End if

         Case selector

          when exp1 then statements

          Else statements

         End case

     SQL SERVER

         IF condition

           Sql statements

         ELSE

           Sql statements

        Case selector

        When ex1 then statements

        Else statements

        End

   2. 迭代结构

       oracle

          Loop statements end loop;

          While condition

          Loop statement end loop;

       Sql server

            While condition

            Begin

              Sql statement

            End

   面象对象编程涉及的概念有对象,类,属性和方法,面向对象的三大特性是:

   封装,继承和多态。

   将数据和函数包装到一个单元中的过程称为封装。不能从外部访问数据,只能包装在

   类中的那些函数才能访问数据

   继承可以是SQL类型的继承和方法的继承。

   多态是一个对象可以呈现多种形式的能力,这使得不同的对象可以具有相同的名称

   的方法,这些方法实现的任务相似,但实现方式却不同。

    三.變量與常量

Pl/sql变量与常量可以具有属性,支持的属性类型有

%type,%rowtype

声明引用数据库列或变量的数据类型的变量时,可以使用%type属性。如:

Declare

      Variable_name table_name.col_name %type

        使用这个优点是,不需要知道列vencode的准确数据类型

      %rowtype属性提供表示表中行的记录类型。

     四.過程與函數(Procedure & Function)

       a. 建立存儲過程的語法不同:

           Ms sql 的語法是:

             Create procedure procedure_name

               (

                   @Id int =null,

                   @name varchar(10) out[put]

               )

as

[變量定義區]

begin sql_statement end

--------------------------------------------------------------------   

             CREATE FUNCTION function_name (@DATE datetime)

RETURNS int

AS begin sql statement end

面向對象的特性之一是封裝,程序包就是对相关PL/SQL类型,子程序,游标,异常,变量,和常量的封装,它包含两部分程序包规格说明和程序包主体

在包规格说明书中,可以声明类型,变量,常量,异常,游标,子程序

程序包主体实现在程序包规格中定义的游标、子程序

        包頭語法部分:

Create or replace package package_name is|as

Public type and item declarations

Subprogram specifications

End package_name

實例如下:

Create or replace package pack_me is

Procedure order_proc(orno varchar2);

  Function    order_fun(ornos varchar2) return varchar2;

End pack_me

包體語法部分:

Create or replace package body package_name is|as

Private type and item decarations

Subprogram bodies

End package_name;

         包體具體實例就不寫了,包頭隻是起一個聲明作用,具體實現部分都在包體裡面。

         下面是创建存储过程的语法:

          Create [or replace] procedure procedure_name[arg1 in|out|in out]type {is|as}

           [變量定義區]

          Begin

             Execute Sql statement

          Exception handlers

End

         注意:參數列表那裡,oracle是先定義參數是輸入還是輸出參數,然後再定義

參數類型; 而sql server正好相反

         创建函数的语法:

Create function function_name argument

Return datatype is|as

Local decaration

Begin

Excutable statement

Exception

Handles

End;

      b.變量賦值

1.    Oracle里的用法:存储过程中边查询边给变量赋值。

select 某一列名 into 变量名 from table where ..;

相当于sql server中的select 变量名=列. From table where ….

注意:select * /某一列名 into 表名

        2.   Oracle 直接赋值的符号是:' := '

  五 觸發器(Trigger)

        Oracle

        Create or replace trigger trigger_name [before/after]

       [insert/update/delete] on table_name

        变量声明

        begin

        Sql statement

        end

Ms sql

Create trigger trigger_name on table

{for |after|instead of} [insert|update|delete] as sql_statements

    六 遊標(Curcor)

        Oracle中提供两种游标类型,它们是静态游标和ref游标

静态游标又分为隐式游标与显式游标

Ref游标,游标变量是一种引用 类型

隐式游标属性包括%notfound,%found,%rowcount,%isopen

如:

       Begin

                    Delete from ta where ord='ddd'

               If sql%notfound then

                     Dbms_output.put_line(''未找到值)

              Else

                     Dbms_output.put_line(找到并删除之)

            End if

End

显示游标:可以用下面语句控制游标

      Open cursorname

       Fetch cursor_name into var_name

       Close cursor_name

        创建游标语法:

     Oracle:

       declare variable

       Cursor test is select * from order

    Sql server

       Declare test cursor for select * from order

    七 .错误处理(Exception & test & debug)

有两种类型的异常:一种预定义,另外一种是用户自定义

預定義的類型有很多,如No_data_found,Cursor_already_open

       對於Oracle的調試,可以借助第三方工具,如toad,Pl.sql Developer,

       对于sql server采用 变量或者print 形式进行调试

        Oracle异常定义部分的示例:

            Exception

          When <exception_name> then statements

           When others then

               Statements

           End;

         其中<exception_name>是系统预定义的名字。

       Raiser_application_error用于创建用户定义的错误信息的过程,用户定义的错误消息

     可以指定的异常描述的更详细

      Sql server在错误处理上多采用自定义。或者是用goto跳转的方式

       如:

        Begin

        Sql statements

        if @error<>0 goto error

        end

        Error:

            Return;

      或是直接用raiserror

      if @error<>0

begin

raiserror('发生错误.',-1,-1)

return (1)

end

好了,两者的主要的差异就写到这,但愿我表述清楚了,由于东西比较多,所以还有很多具体东西没有写


 

函数
SQLServer和Oracle的常用函数对比   1.绝对值   S:select abs(-1) value   O:select abs(-1) value from dual
  2.取整(大)   S:select ceiling(-1.001) value   O:select ceil(-1.001) value from dual
  3.取整(小)   S:select floor(-1.001) value   O:select floor(-1.001) value from dual
  4.取整(截取)   S:select cast(-1.002 as int) value   O:select trunc(-1.002) value from dual
  5.四舍五入   S:select round(1.23456,4) value 1.23460   O:select round(1.23456,4) value from dual 1.2346
  6.e为底的幂   S:select Exp(1) value 2.7182818284590451   O:select Exp(1) value from dual 2.71828182
  7.取e为底的对数   S:select log(2.7182818284590451) value 1   O:select ln(2.7182818284590451) value from dual; 1
  8.取10为底对数   S:select log10(10) value 1   O:select log(10,10) value from dual; 1
  9.取平方   S:select SQUARE(4) value 16   O:select power(4,2) value from dual 16
  10.取平方根   S:select SQRT(4) value 2   O:select SQRT(4) value from dual 2
  11.求任意数为底的幂   S:select power(3,4) value 81   O:select power(3,4) value from dual 81
  12.取随机数   S:select rand() value   O:select sys.dbms_random.value(0,1) value from dual;
  13.取符号   S:select sign(-8) value -1   O:select sign(-8) value from dual -1   ----------数学函数
  14.圆周率   S:SELECT PI() value 3.1415926535897931   O:不知道
  15.sin,cos,tan 参数都以弧度为单位   例如:select sin(PI()/2) value 得到1(SQLServer)
  16.Asin,Acos,Atan,Atan2 返回弧度
  17.弧度角度互换(SQLServer,Oracle不知道)   DEGREES:弧度-〉角度   RADIANS:角度-〉弧度
  ---------数值间比较
  18. 求集合最大值   S:select max(value) value from   (select 1 value   union   select -2 value   union   select 4 value   union   select 3 value)a
  O:select greatest(1,-2,4,3) value from dual
  19. 求集合最小值   S:select min(value) value from   (select 1 value   union   select -2 value   union   select 4 value   union   select 3 value)a
  O:select least(1,-2,4,3) value from dual
  20.如何处理null值(F2中的null以10代替)   S:select F1,IsNull(F2,10) value from Tbl   O:select F1,nvl(F2,10) value from Tbl
  --------数值间比较
  21.求字符序号   S:select ascii('a') value   O:select ascii('a') value from dual
  22.从序号求字符   S:select char(97) value   O:select chr(97) value from dual
  23.连接   S:select '11'+'22'+'33' value   O:select CONCAT('11','22')||33 value from dual
  23.子串位置 --返回3   S:select CHARINDEX('s','sdsq',2) value   O:select INSTR('sdsq','s',2) value from dual
  23.模糊子串的位置 --返回2,参数去掉中间%则返回7   S:select patindex('%d%q%','sdsfasdqe') value   O:oracle没发现,但是instr可以通过第四霾问刂瞥鱿执问?BR>  select INSTR('sdsfasdqe','sd',1,2) value from dual 返回6
  24.求子串   S:select substring('abcd',2,2) value   O:select substr('abcd',2,2) value from dual
  25.子串代替 返回aijklmnef   S:SELECT STUFF('abcdef', 2, 3, 'ijklmn') value   O:SELECT Replace('abcdef', 'bcd', 'ijklmn') value from dual
  26.子串全部替换   S:没发现   O:select Translate('fasdbfasegas','fa','我' ) value from dual
  27.长度   S:len,datalength   O:length
  28.大小写转换 lower,upper
  29.单词首字母大写   S:没发现   O:select INITCAP('abcd dsaf df') value from dual
  30.左补空格(LPAD的第一个参数为空格则同space函数)   S:select space(10)+'abcd' value   O:select LPAD('abcd',14) value from dual
  31.右补空格(RPAD的第一个参数为空格则同space函数)   S:select 'abcd'+space(10) value   O:select RPAD('abcd',14) value from dual
  32.删除空格   S:ltrim,rtrim   O:ltrim,rtrim,trim
  33. 重复字符串   S:select REPLICATE('abcd',2) value   O:没发现
  34.发音相似性比较(这两个单词返回值一样,发音相同)   S:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe')   O:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe') from dual   SQLServer中用SELECT DIFFERENCE('Smithers', 'Smythers') 比较soundex的差   返回0-4,4为同音,1最高
  --------------日期函数
  35.系统时间   S:select getdate() value   O:select sysdate value from dual
  36.前后几日   直接与整数相加减
  37.求日期   S:select convert(char(10),getdate(),20) value   O:select trunc(sysdate) value from dual   select to_char(sysdate,'yyyy-mm-dd') value from dual
  38.求时间   S:select convert(char(8),getdate(),108) value   O:select to_char(sysdate,'hh24:mm:ss') value from dual
  39.取日期时间的其他部分   S:DATEPART 和 DATENAME 函数 (第一个参数决定)   O:to_char函数 第二个参数决定
  参数---------------------------------下表需要补充   year yy, yyyy   quarter qq, q (季度)   month mm, m (m O无效)   dayofyear dy, y (O表星期)   day dd, d (d O无效)   week wk, ww (wk O无效)   weekday dw (O不清楚)   Hour hh,hh12,hh24 (hh12,hh24 S无效)   minute mi, n (n O无效)   second ss, s (s O无效)   millisecond ms (O无效)   ----------------------------------------------
  40.当月最后一天   S:不知道   O:select LAST_DAY(sysdate) value from dual
  41.本星期的某一天(比如星期日)   S:不知道   O:SELECT Next_day(sysdate,7) vaule FROM DUAL;
  42.字符串转时间   S:可以直接转或者select cast('2004-09-08'as datetime) value   O:SELECT To_date('2004-01-05 22:09:38','yyyy-mm-dd hh24-mi-ss') vaule FROM DUAL;
  43.求两日期某一部分的差(比如秒)   S:select datediff(ss,getdate(),getdate()+12.3) value   O:直接用两个日期相减(比如d1-d2=12.3)   SELECT (d1-d2)*24*60*60 vaule FROM DUAL;
  44.根据差值求新的日期(比如分钟)   S:select dateadd(mi,8,getdate()) value   O:SELECT sysdate+8/60/24 vaule FROM DUAL;
  45.求不同时区时间   S:不知道   O:SELECT New_time(sysdate,'ydt','gmt' ) vaule FROM DUAL;
  -----时区参数,北京在东8区应该是Ydt-------   AST ADT 大西洋标准时间   BST BDT 白令海标准时间   CST CDT 中部标准时间   EST EDT 东部标准时间   GMT 格林尼治标准时间   HST HDT 阿拉斯加—夏威夷标准时间   MST MDT 山区标准时间   NST 纽芬兰标准时间   PST PDT 太平洋标准时间   YST YDT YUKON标准时间  Oracle支持的字符函数和它们的Microsoft SQL Server等价函数:
函数 Oracle Microsoft SQL Server 把字符转换为ASCII ASCII ASCII 字串连接 CONCAT (expression + expression) 把ASCII转换为字符 CHR CHAR 返回字符串中的开始字符(左起) INSTR CHARINDEX 把字符转换为小写 LOWER LOWER 把字符转换为大写 UPPER UPPER 填充字符串的左边 LPAD N/A 清除开始的空白 LTRIM LTRIM 清除尾部的空白 RTRIM RTRIM 字符串中的起始模式(pattern) INSTR PATINDEX 多次重复字符串 RPAD REPLICATE 字符串的语音表示 SOUNDEX SOUNDEX 重复空格的字串 RPAD SPACE 从数字数据转换为字符数据 TO_CHAR STR 子串 SUBSTR SUBSTRING 替换字符 REPLACE STUFF 将字串中的每个词首字母大写 INITCAP N/A 翻译字符串 TRANSLATE N/A 字符串长度 LENGTH DATELENGTH or LEN 列表中最大的字符串 GREATEST N/A 列表中最小的字符串 LEAST N/A 如果为NULL则转换字串 NVL ISNULL
 
日期函数
函数 Oracle Microsoft SQL Server 日期相加 (date column +/- value) or ADD_MONTHS DATEADD 两个日期的差 (date column +/- value) or MONTHS_BETWEEN DATEDIFF 当前日期和时间 SYSDATE GETDATE() 一个月的最后一天 LAST_DAY N/A 时区转换 NEW_TIME N/A 日期后的第一个周日 NEXT_DAY N/A 代表日期的字符串 TO_CHAR DATENAME 代表日期的整数 TO_NUMBER (TO_CHAR)) DATEPART 日期舍入 ROUND CONVERT 日期截断 TRUNC CONVERT 字符串转换为日期 TO_DATE CONVERT 如果为NULL则转换日期 NVL ISNULL
 
转换函数
    函数          Oracle      Microsoft SQL Server 数字转换为字符   TO_CHAR        CONVERT 字符转换为数字   TO_NUMBER      CONVERT 日期转换为字符   TO_CHAR        CONVERT 字符转换为日期   TO_DATE        CONVERT 16进制转换为2进制 HEX_TO_RAW    CONVERT 2进制转换为16进制 RAW_TO_HEX    CONVERT
 
其它行级别的函数
      函数           Oracle       Microsoft SQL Server 返回第一个非空表达式 DECODE           COALESCE 当前序列值           CURRVAL            N/A 下一个序列值         NEXTVAL           N/A 如果exp1 = exp2, 返回null DECODE NULLIF 用户登录账号ID数字    UID            SUSER_ID 用户登录名           USER            SUSER_NAME 用户数据库ID数字      UID            USER_ID 用户数据库名         USER            USER_NAME 当前用户            CURRENT_USER     CURRENT_USER 用户环境(audit trail) USERENV        N/A 在CONNECT BY子句中的级别 LEVEL N/A
 
合计函数
函数 Oracle Microsoft SQL Server Average AVG AVG Count COUNT COUNT Maximum MAX MAX Minimum MIN MIN Standard deviation STDDEV STDEV or STDEVP Summation SUM SUM Variance VARIANCE VAR or VARP
Oracle还有一个有用的函数EXTRACT,提取并且返回日期时间或时间间隔表达式中特定的时间域: EXTRACT(YEAR FROM 日期)

 


 

存储过程
一. 多表连接查询,更新存储过程 Sql存储过程 ALTER PROCEDURE [dbo].[ GetEvent]   @SCSWId nvarchar(20)= null ,   @ToDate DATETIME,   @FromDate DATETIME AS   SELECT NOTES.NOTE_ID,   NOTES.NOTE,   SCSW_CALENDAR.DATE_TIME    FROM SCSW_CALENDAR   LEFT OUTER JOIN NOTES ON SCSW_CALENDAR.NOTE_ID=notes.note_id   WHERE SCSW_CALENDAR.SCSW_ID = SCSWId   ORDER BY Patient.PatientId
Oracel存储过程
1.查询数据的存储过程 PROCEDURE GetEvent(SCSWId IN VARCHAR2, FromDate IN DATE, ToDate IN DATE, refOut OUT refcursor) IS BEGIN   OPEN refOut FOR   select NOTES.NOTE_ID, NOTES.NOTE, SCSW_CALENDAR.DATE_TIME   from SCSW_CALENDAR   left join NOTES on SCSW_CALENDAR.NOTE_ID=notes.note_id   where SCSW_CALENDAR.SCSW_ID = SCSWId   AND SCSW_CALENDAR.DATE_TIME >= FromDate   AND SCSW_CALENDAR.DATE_TIME < ToDate   order by SCSW_CALENDAR.DATE_TIME; END GetEvent;
2.更新数据的存储过程: procedure UpdateArticlesubmodel ( ArticleSubID number, ArticleTitle nvarchar2, ArticleKeyWord nvarchar2, ArticleContent CLOB, CreatePerson nvarchar2, ChangeDate date, SetTop number, ArticleSubStyleID number, Checked number ) as begin   update "ArticleSubModel"   set "ArticleTitle"=ArticleTitle,   "ArticleKeyWord"=ArticleKeyWord,   "ArticleContent"=ArticleContent,   "CreatePerson"=CreatePerson,   "CreateDate"=ChangeDate,   "SetTop"=SetTop,   "ArticleSubStyleID"=ArticleSubStyleID,   "Checked"=Checked   where "ArticleSubID"=ArticleSubID;   commit;   Exception when others then   rollback; end UpdateArticlesubmodel; 3.删除数据的存储过程 procedure DeleteArticlesubmodel ( ArticleSubID number ) as begin   delete from "ArticleSubAccessories"   where "ArticleSubID"=ArticleSubID;   delete from "ArticleSubModel"   where "ArticleSubID"=ArticleSubID;   commit;   Exception when others then   rollback; end DeleteArticlesubmodel;

 


 

 

1.  top N 问题 在sql server中,top N 问题很容易解决,如下例:从表stbdbdj中选取排序后的第一行数据进行赋值。

在sql中解决方法很简单,在select 后面加上:top n 即可,其中 n 代表行数。

select top 1 @entrust_date = entrust_date, @entrust_no = entrust_no from run2k..stbdbdj where entrust_date = @date and entrust_no > @entrust_no_q and report_status = '1' order by entrust_date,entrust_no;

在oracle中,没有top n这个命令,我们采取把两层查询方式解决:首先,把需要查找的字段值直接进行排序,然后在外面进行第二次查询,并使用rownum决定行数。

select entrust_date,entrust_no into @entrust_date, @entrust_no from ( select entrust_date,entrust_no from stbdbdj where entrust_date = @date and entrust_no > @entrust_no_q and report_status = '1' order by entrust_date,entrust_no ) where rownumber <=1 ;

  1. 如何解决结果集返回时,* 和变量同时存在的问题 下面例子表示,在用游标返回结果集时,同时返回一个变量的值,在 sql server 中代码如下所示: select a.*,b.organ_id from run2k..stbbp a,run2k..stkaccoarg b where a.date = @entrust_date and a.serial_no = @serial_no and a.branch_no = b.branch_no and a.exchange_type = b.exchange_type;

但在oracle中却没有这种用法,’*’后面必需跟from。解决方法如下: 1)我们可以把 '*' 变成所需要选择的字段,就是说采用表中需要显示的全部字段表示*。 例如:

open  p_cursor  for select  branch_no,...,organ_id where ...
2)如果这个字段或者说变量是从另外一张表中取出来的,同样可以采用下面的办法。

open p_cursor for select a.*,b.organ_id; from stkaccoentrust a, stkaccoarg b where a.branch_no = b.branch_no and a.exchange_type = b.exchange_type and a.init_date = v_entrust_date and a.serial_no = v_serial_no;

  1. 外联接问题 sql <---> oracle a = *b <---> a(+)= b a *= b <---> a = b(+)

  2. 多条记录求和问题 select sum(A+B+C) into D from ... where ... group by ...

单条记录求和 select A+B into C from ... where ...

  1. case 问题转换 sql: case client_status when '0' then '正常' when '1' then '冻结' when '2' then '挂失' when '3' then '销户' else '未知' end

oracle: decode(client_status,'0','正常,'1','冻结','2','挂失','3','销户','未知');

  1. char 和 varchar 类型区别: char 尾部补空格,varchar 尾部不补空格。

  2. convert转换问题 sql ---> oracle convert(char(5),branch_no) ---> to_char(branch_no,'99999') convert(char(19),count(*)) ---> lpad(to_char(count(*)),19) convert(varchar(20),serial_no) ---> to_char(serial_no,'999...9' ) 总共20个9 lpad(to_char(serial_no),20)

  3. charindex(substring,string) ---> instr(string,substring) 子串 父串 ---> 父串 子串


 

 

 

Oracle中差别 葡京网投哪个正规 1
SQL SERVER中: 本质上没区别。只是函数有如:只能返回一个变量的限制。而存储过程可以返回多个。而函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行。执行的本质都一样。
     函数限制比较多,比如不能用临时表,只能用表变量.还有一些函数都不可用等等.而存储过程的限制相对就比较少       1.    一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。       2.    对于存储过程来说可以返回参数,而函数只能返回值或者表对象。       3.    存储过程一般是作为一个独立的部分来执行(EXEC执行),而函数可以作为查询语句的一个部分来调用(SELECT调用),由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。
      4.    当存储过程和函数被执行的时候,SQL Manager会到procedure cache中去取相应的查询语句,如果在procedure cache里没有相应的查询语句,SQL Manager就会对存储过程和函数进行编译。
      Procedure cache中保存的是执行计划 (execution plan) ,当编译好之后就执行procedure cache中的execution plan,之后SQL SERVER会根据每个execution plan的实际情况来考虑是否要在cache中保存这个plan,评判的标准一个是这个execution plan可能被使用的频率;其次是生成这个plan的代价,也就是编译的耗时。保存在cache中的plan在下次执行时就不用再编译了。 sql server中总结的用法大部分适用于Oracle,在具体的使用过程中,还要看系统实现的复杂程度和实际情况.有经验的DBA对于这两者的运用应该已经了然于胸了,高手路过还请多多指教!

 

转自:http://www.cnblogs.com/jayhong/archive/2009/08/30/1556642.html

 


 

 

 

本文由葡京网投哪个正规发布于新葡亰-数据,转载请注明出处:MYSQL的常用命令和增删改查语句和数据类型,查询特殊不包括日期的数据

关键词:

上一篇:【葡京网投哪个正规】9i切换数据库的日志模式,9i数据库的配置参数

下一篇:SQL注入天书之ASP注入漏洞全接触,SQL注入漏洞全接触