创建表的语句:
--创建表
CREATE TABLE 表名(
列名1 数据类型 primary key,
列名2 数据类型 not null,
列名3 数据类型
);
例如:
--创建学生表
CREATE TABLE Student(
id varchar2(32) primary key,
name varchar2(8) not null,
age number
);
语句:
--索引的创建,UNIQUE为可选字段,表示唯一索引
create [UNIQUE] index 索引名 on 表名(列名);
--删除索引
drop index 索引名 on 表名;
例如:
--创建索引
create UNIQUE index stu_index on Student(id,name);
--删除索引
drop index stu_index on Student;
语句:
--添加新字段
alter table 表名 add (字段名1 字段类型 默认值 是否为空);
--修改原有字段
alter table 表名 modify (字段名 字段类型 默认值 是否为空);
--删除现有字段
alter table 表名 drop column 字段名;
--字段的重命名:
alter table 表名 rename column 列名 to 新列名
--表的重命名
alter table 表名 rename to 新表名
例如:
--添加新字段(多列)
alter table Student
add(
dept_Id varchar(10),
phone varchar(50),
email VARCHAR2(100),
school_name varchar(200) default '重庆大学'
);
--添加新字段(单列)
alter table Student
add(
email VARCHAR2(100)
);
--修改原有字段(多列)
alter table Student
modify(
phone VARCHAR2(11) ,
email VARCHAR2(200) NOT NULL
);
--修改原有字段(单列)
ALTER TABLE Student MODIFY phone DATE NOT NULL;
--删除现有字段(单列)
alter table Student drop column email;
--删除现有字段(多列)
alter table Student drop ( email, phone );
注意
:请谨记在添加新列时,如果添加新列时需要使用NOT NULL约束,则需要保证在约束添加前数据表必须为空,不然将无法添加新列;不能添加表中已经存在的列,不然会导致错误。另外,ALTER TABLE ADD列语句在表的末尾添加新列。
语句:
comment on table 表名 is '表的注释信息';
comment on column 表名.字段名 is '字段的注释信息';
例如:
--添加表注释:
Comment on table Student is '学生信息';
--添加字段注释:
comment on column Student.id is '学生id';
comment on column Student.name is '姓名';
comment on column Student.age is '年龄';
语句:
--SQL like通配符(%,_)
--%模糊查询
SELECT * FROM Student WHERE name LIKE '张%';
--_替代一个字符
SELECT * FROM Student WHERE name LIKE '_oogle';
--SQL in 查询张三或李四的信息
SELECT * FROM Student WHERE name IN ('张三','李四');
注意
:select 后面的字段要么是 group by 后的字段要么是聚合函数里的字段
当在一个SQL中同时使用where、group by和having子句时,其执行顺序为:where>group by>having
--示例
select 字段1,count(字段2),sum(字段3) from 表名 group by 字段1
--按照姓名分组,并查询年龄最大的人
select name,max(age) from student group by name
注意
:distinct关键字必须放在select 的最前面。
--正确的distinct用法
select distinct name,age,sex from student
--报错,distinct必须放在select的最前面
select age,distinct name,sex from student
(查询根据name去重后的学生信息)
--distinct单列,可以正确去重
select distinct name from student
--distinct多列,不会去重,这是因为多列是针对name,age,sex的组合来distinct的,它只会将所有字段值都相同的记录“去重”掉
select distinct name,age,sex from student
--可以根据group by来去重
select name,min(age),min(sex) from student group by name
语句:
UPDATE 表名
SET column1 = value1, column2 = value2, ...
WHERE 查询条件;
例如:
UPDATE Student
SET name = '张三', email = '[email protected]'
WHERE id=2003;
语句:
--常规插入
INSERT INTO 表名 (列名1,列名2,列名3,列名4)
VALUES(1,'jian',6000,10);
--查询插入
INSERT INTO 表名 (列名1,列名2,列名3,列名4)
SELECT 列名1,列名2,列名3,列名4 FROM 表名;
例如:
--常规插入(插入表中的某些字段)
INSERT INTO myemp (id,name,salary) VALUES(1,'jian',6000);
--常规插入(插入表中所有字段)
INSERT INTO myemp VALUES(1,'jian',6000,10);
--查询插入
INSERT INTO myemp(id,name,salary,dempno) SELECT id,name,salary,dempno FROM otheremp;
语句:
DELETE FROM 表名
WHERE 删除的条件;
例如:
DELETE FROM myemp
WHERE id=2003 and name='张晓哲';