个人小结,随机更新
只了解sql知识点并不一定能灵活使用,可以参照sql习题:
SQL习题及解答
[
以下内容区分为对表的增删改查
和对数据的增删改查
,
对表:
增(创建表)、删(删除表)
改(修改表名、修改列名、修改列的数据类型)
对数据:
增(数据插入)、删(删除数据、清空数据)
改(修改数据)、查(查询数据)
]
对表的增删改查
增:新增表、列
关键字:create
基本语句:create table table_name ( id varchar2(4),name varchar2(20) );
--基本建表语句
CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));
-- 增加列
alter table table_name add new_column datatype;
alter table stu add grade varchar default 'null' not null; --给stu表添加一个grade列,不为空默认值为null
其他:
1、根据已有表,建表。
create table tea as select * from teacher where 1=2; --创建一张列和数据类型都与teacher表相同的空表
create table stu_bk as select * from stu; --创建一个与表stu相同的stu_bk表。(常用于表的备份)
--同理,只要as后的select语句能获取一张表,则都能创建这样的表
create table bk as select stu.id,stu.name,tea.course from student stu,teacher tea;
2、给表和列添加注释
COMMENT ON table student IS '学生信息表,有学号、姓名、班级';
select * from user_tab_comments; -- user_tab_comments是一张视图,含有table_name、table_type、comments三列。
COMMENT ON COLUMN stu.name is '学生的名字';
select * from user_col_comments; --user_col_comments是一张视图,含有table_name、column_name、comments三列。
删:删除表、列
关键字:drop
基本语句:
drop table table_name; -- 删除表。
alter table table_name drop column column_name; -- 删除列。
改:修改表名、列名、数据类型
关键字:alter
【alter .. modify
、alter .. rename to ..
】
基本语句:(修改表名、修改字段类型)
alter table table_name rename to new_table_name; --将表table_name改名为new_table_name。
alter table table_name rename column old_column_name to new_column_name; --修改列名。
alter table table_name modify id varchar2(100); --将列名为id的数据类型改为varchar2(100)。
注意:
修改字段类型时,同类型扩张有效、缩小字段长度需注意数据本身;不同数据类型修改时表中数据需为空。
如:char(1)可以修改为varchar2(2);varchar2(40)可以修改为varchar2(10),但数据本身长度大于10时,修改失败;date修改为varchar2(20),由于数据类型不同不能生效,但当列数据为空时可以生效。
查
关键字:select
介绍系统中的几张视图
select * from all_tables; --all_tables 可查询当前用户的权限表。
select * from USER_TAB_COMMENTS; --USER_TAB_COMMENTS 可查看表的注释。
select * from user_col_comments; --user_col_comments 可查看表中列的注释
仅对数据进行的增删改查
增
关键字:insert
基本语句:insert into table_name(column1,column2,...) values(data1,data2,...)
insert into stu(id,name,grade) values(1,'张三',87);
insert into stu(id,name,grade) values(2,'tom',90);
insert into stu(id,name,class_id) values(3,'jack',87),
(4,'mark',92),
(5,'李四',78),
...;
注意:
1、一般value
和values
通用,但values
应用更广,多行插入时value
却稍快。
2、values()
中数据包含所有列时,一般table_name()
中不写列名。
== ==
批量插入:
将table_name2
中查询到的数据插入到table_name
中。
insert into table_name
select * from table_name2;
删
关键字:delete
、truncate
基本语句:
1、按条件删除:delete from table_name where id = 2;
。
delete from table_name; --清空表。需commit,可以回滚。
delete from table_name where id > 2 and name like '%k%'; --选择性删除:删除id大于2且name中含有k的数据。
2、清空表,不可回滚:truncate table table_name;
改
关键字:update
、replace
基本语句:update table_name set column_name ..
UPDATE STU SET GRADE = 100 WHERE ID = 10; --将学生表中id为10的学生成绩修改为100。需commit。
update stu set replace(name,'jack','tom') where id = 2; --将id为2的学生,姓名从jack改为tom。
REPLACE INTO stu VALUES (1, 'tom'); --插入一条数据,id为1,姓名为tom,其他字段为空。【在sqlite中,该语句会因主键id冲突实现覆盖(更新),由于是覆盖,其他字段会变为空】
修改字段中部分字符:
将指定列中的|
改为/
。如世界|挺大
==>世界/挺大
update table_name set column_name = replace(column_name,'|','/') --where id > ... 添加条件,指定修改范围
查
关键字:select
基本语句:select .. from ..
select * from student; --查找student表的所有数据。
其他关键字:
where
:条件查询关键字
like
:模糊检索,'%%'
,%
表示任意,_
表示单个任意字符。
is null / is not null
:is
和is not
后只能接null
。
min / max
:最大最小值
length
:字符长度
order by
:排序,默认升序asc;降序为desc。
substr(str,start,n)
:截取子串,从str字符串的第start字符开始,取n个字符。
视图
视图的特点:不能修改
分页查询
关键字:limit
、offset
-- LIMIT 后的数字代表返回几条记录,OFFSET 后的数字代表从第几条记录开始返回(第一条记录序号为0),也可理解为跳过多少条记录后开始返回。
select * from stu limit 4 offset 8; -- 从第8条记录起(包含第8条),返回4条记录
-- LIMIT X,Y :Y代表返回几条记录,X代表从第几条记录开始返回(第一条记录序号为0),切勿记反。
select * from stu limit 4,7; -- 从第7条记录起(包含第7条),返回4条记录
更新
关键字:update .. set ..
、replace into
在这里插入代码片
--oracle 两个时间月份差:
select months_between(to_date('2021-10-10','yyyy-mm-dd'),to_date('2021-08-18','yyyy-mm-dd')) from dual;
oracle 月份加减
add_months(to_date('200401','yyyymm'),-2 )
--原文链接:https://blog.youkuaiyun.com/wenjinglian/article/details/84168872
持续随机更新...