暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQL Server 、Oracle和MySQL三种数据库的增删改查SQL语句与它们之间的区别

浅显物语 2019-08-16
534


SQL Server 的基本SQL语句

drop table student --删除student这个表,彻底删除
create table student( --
创建数据表
sid int primary key identity(10,1), --
设置sid为主键自增(10开始逐渐加1)
sname varchar(20) null,--
名字
sage int null--
年龄
);


--
插入数据
insert into student values('
张三',19); 
insert into student values('
李四',29);

--删除整个表或表数据
delete student where sid=12; --
删除sid=12那一行的数据(删除语句中delete后面也可以加上from,效果相同)
delete student; --
删除整个表的数据留下了一个没有数据的空表,而drop不同,drop是把整个表彻底删了,需要重新创建表

--修改数据
update  student set sage=19 where sage=10; --
sage=10修改为sage=19(set是设值)

--查询数据
select * from student; --
查询student表的数据


--
查询studet表中id大于10小于14的数据
select * from student where id>10 and id<14

--查询student表中id=11 id=13 这两条数据
select* from student where id=11 or id=13


----(
多表查询的其中一种)left join

--如上已有一个student表,现再创建一个class表来实现简单的多表查询
create table class(
cid int primary key identity(10,1),--
班级id
classname varchar(20) null--
班级名称
)

insert into class values('高三3')
insert into class values('
高三4')
insert into class values('
高三6')

--left join为多表查询的一种,就是多个表数据连接起来后的查询,以下为查询所有学生的姓名、年龄及班级名称
select s.sname,s,sage,c.classname from student s left join class c on c.id=s.stuno

Oracle的基本SQL语句

drop table products;
create table products(
pid int not null primary key,--
只是单纯设置员工的主键(若要实现主键自增,须另外创建序列)
fenid int null, --
分类id
pname varchar2(50) null,--
商品名称
price number null,--
价格
pcount int null,--
数量
pimg varchar2(100)  null,--
商品图片
psale int null,--
已售数量
userid int null,--
用户id
pstatu int null--
商品状态
);
commit;--
快速提交(Oracle每次对表操作都要加上commit,否则无法快速的操作数据,导致插入或修改等失败)

create sequence p_pro start with 10 increment by 1;-- 创建序列(创建名为p_pro的序列,该序列从10开始以1的增速自增)

--p_pro.nextval为序列的使用,逐渐自增
insert into products values (p_pro.nextval,1,'iPhone
手机',8000,2000,'img/1.png',150,101,1);
insert into products values (p_pro.nextval,2,'
菠萝',4,40000,'img/1.png',30000,102,1);
commit;

--这两种写法在OracleSQL Server里都是一样的效果(from可有可无); 但在MySQL中只支持delete from products;(须要有from)
delete products;
delete from products;

select * from products;
select * from products for update; --
查询products表并解锁该表可以对其直接操作增删改

MySQL的基本SQL语句

drop table prod; -- 删除表
create table prod( --
创建数据表
 pid int not null auto_increment, --
设置自增时字段为not null(不能为空)
 pname varchar(100) null,
 pdate date, -- date
日期类型
 primary key(pid) --
设置主键pid为自增
);
commit; --
快速提交


--
插入数据  
-- (
这里原本pid建表时设置为自增的,不写这个字段也是会自动添加的,不写就是默认插入),
--
但是也可以加上这个字段插入pid值,这里的pid=1是自定义插入,这也可以成功
insert into prod (pid,pname,pdate) values (1,'
编程',now());  --MySQL插入必须在表名后面加上除主键id自增以外的字段
                                                     
insert into prod (pname,pdate) values ('java',now());  --
未自定义pid,所以这里是默认自增pid
insert into prod (pid,pname,pdate) values (5,'
小小',now()); -- now()自动获取当前日期,精确到天,自定义插入pid=5
insert into prod (pname,pdate) values ('java',now());  --
由于上一条数据的pid5,所以这条数据pid6

insert into prod (pname,pdate) values ('java','2018-12-22'),
                                                          ('java','2018/06/12'); --
同时插入两条数据的简单写法,这几种date日期插入格式都可以

delete from prod where pid>8; -- 删除prod表中pid>8的数据

update prod set pid=9 where pid=7;   -- 表示将字段pid=7 改成pid=9
update prod set pname='java' where pname='c++'; --
表示将字段为pname='c++'的数据改成pname='java'

select * from prod; -- 查询prod表数据

多表查询(建有sal表和emp2,其中有empno=sno的数据)


--
左连接--emp2表为主表,将sal表连接,emp2显示所有数据,emp2有多少行数据,这里就显示多少行数据,sal里面的数据作为补充sal里面拥有的列的数据显示出来

           select  * fromemp2 left join sal on emp2.empno=sal.sno;

--右连接---sal为主表,如果sal中只有3行数据,那么右连接查询出来的结果也只有3行,emp2中的数据只是作为补充连接在sal中,emp2中没有的列,显示为空

          select  * from emp2right join sal on emp2.empno=sal.sno;

--内连接---只显示数据完整的行的数据出来,不完整的数据整行都不显示

         select  * from emp2inner join sal on emp2.empno=sal.sno;

--全连接---把两个表的数据都显示出来,一个不差的显示出来,和内连接是相反的

         select  * from emp2full  join sal on emp2.empno=sal.sno;

-cross join:结果是笛卡尔积,就是第一个表的行数乘以第二个表的行数。

         select * from emp2  crossjoin sal ;    

综上可看出这三种数据库的SQL语句稍有些不同,但极大部分还是无差异的。

区别一:

最大的区别就是创建表格,主键自增的方法:如下:

--SQL Server主键自增(一步到位):
create table student(
sid int primary key identity(10,1), --
设置sid为主键自增(10开始逐渐加1)
);

--Oracle主键自增(两步):

create table products(
pid int not null primary key,--
只是单纯设置员工的主键(若要实现主键自增,须另外创建序列)
);
commit;

create sequence p_pro start with 10 increment by 1;-- 创建序列(创建名为p_pro的序列,该序列从10开始以1的增速自增)

insert into products values (p_pro.nextval,1,'iPhone手机',8000,2000,'img/1.png',150,101,1);--须借助序列来插入数据


--MySQL
主键自增(两步):

create table prod( 
 pid int not null auto_increment, 
 ...
 primary key(pid) --
设置主键pid为自增
);
commit;

区别二:插入数据:

--SQL Server(三个数据库中最简单的一种)
insert into student values('
张三',19); 

--Oracle(需要借助创建的序列来实现插入数据)
insert into products values (p_pro.nextval,2,'
菠萝',4,40000,'img/1.png',30000,102,1);

--MySQL(需要在表名后面添加该表除了主键的所有字段)
insert into prod (pname,pdate) values ('java','2012-12-23');

区别三:

删除:

--SQL ServerOracle相同,这两种写法都可以实现删除
delete student;      /  delete from student;

--MySQL (只支持有from的写法)
 delete from student;

区别四:

建表语句oracle中类型是varchar2  ,MySQLSQLServer varchar

 

文章转载自浅显物语,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论