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

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;

--这两种写法在Oracle和SQL 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());  -- 由于上一条数据的pid为5,所以这条数据pid为6

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  * from emp2 left join sal on emp2.empno=sal.sno;

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

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

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

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

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

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

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

         select * from emp2  cross join 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 Server和Oracle相同,这两种写法都可以实现删除
delete student;      /  delete from student;

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

区别四:

建表语句oracle中类型是varchar2   ,而MySQL和SQL Server 是varchar
————————————————
版权声明:本文为CSDN博主「zhang1409399037」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhang1409399037/article/details/84325998

猜你喜欢

转载自blog.csdn.net/lxqasn/article/details/106764090