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