java:Oracle(table的增删改查,data的增删改查)
1、oracle命名规范:和Java的命名规范很像
1.严格区分⼤⼩写
2.所有的sql语句都要以';'结尾
3.所有的sql 都要使⽤空格区分:sqlplus空格/空格as空格sysdba回车
4.⽆论是表名还是列名都必须以字母开头 java中的class必须要以⼤写字母开头,遵循驼峰命名⽅式
5.不能使⽤ORACLE的保留字
6.不能与⽤户定义的其它对象重名
7.数字,$#_,字母(只能包含A-Z,a-z,0-9,_,$,#)字母加上_
emp表中有⼀列叫emp_no(员⼯的编号)
2、连接oracle有两种⽅式:
清理命令⾏:cls
oracle的清理命令⾏:host cls
1.PL/SQL连接
    2.原⽣命令⾏连接(CMD)
sqlplus回车
请输⼊⽤户名:scoot
请输⼊密码(输⼊的密码在命令⾏上是不可见):回车
user scott locked!(⽤户被锁了,⽆法登陆!)
    加锁命令:
⾸先要登陆管理员⽤户
sqlplus / as sysdba:使⽤超级(系统)管理员登录
alter user oracle的⽤户名 account locked
    sysdbs:system database administator(超级管理员)
解锁命令:
⾸先要登陆管理员⽤户
sqlplus / as sysdba
alter user oracle的⽤户名 account unlock
查看当前⽤户登录sql:
show user;
修改⽤户密码:(修改的是密码!)
⾸先要登陆管理员⽤户
在oracle中,以后只要看到account这个单词,就⼀定是⽤来修改⽤户的某些信息
但是只需要修改密码的时候就不需要account关键字
alter user oracle的⽤户名 identified by 123;
解锁并修改⽤户密码:
oracle有⾃⼰的错误代码ORA-00922:选项缺失或⽆效
alter user scott account unlock identified by 新密码;
查看当前⽤户状态:
select username,account_status from dba_status where username='scott';
在登录oracle完毕后,如何切换⽤户:
conn ⽤户名;(适⽤于⿊框)
数据库是需要存储数据,数据库中的表把存储的数据进⾏按规定存放。
雇员(emp):存放员⼯的信息
部门dept:存放部门的信息
table:表名,列,定义列的数据类型,⾏
  列的类型:
最常⽤的三个类型:
1.varchar2
2.number
3.date/timestap
char和varchar2都是字符串类型:
char是固定长度的字符串。char(10),这个⾥⾯就必须要有10个char类型字符
⽐如:男,⼥;省份(河南省)
varchar2是不固定长度的字符串。
推荐使⽤varchar2
CLOB类型(String):
字符集据:很长很长很长很长的字符串,最⼤可以存储4个G的数据。
decimal(其实就是number的⼀个长类型:⽐number类型存储的数据量要⼤):decimal(100,3):100为多少位整数,3位⼩数表数据的唯⼀标识:
主键:是为了约束每⼀⾏数据的唯⼀性。
遵循特点:
不为空,且唯⼀。
建表的时候添加主键:
create table 表名 (列名列的类型 primary key not null);
表建⽴完成以后,指定列为主键
前提是:没有null的数据&&没有重复的数据。
alter table 表名 add constraint(约束,限制) PK_表名_指定的列名 primary key(指定的主键那⼀列);
表的建⽴(表名,列名,列的类型):
create table 需要创建的表名 (列名和列的类型,列名和列的类型);
创建⼀个学⽣表:
create table stus (stu_no number(5), stu_name varchar2(20),........);
建⽴表的同时添加主键:
create table 表名(列名列的类型 primary key not null, 列名列的类型, 列名列的类型...);
表的删除:
drop table 需要删除的表名;
只清空表中的数据,并不删除表:
truncate table 表名;
表的修改:
修改表名:
alter table 修改前的表的名字 rename to 新的表名
修改列名:
alter table 表名 reanme column 修改的列名 to 新的列名
添加列:
alter table 表名 add(需要添加的列名列的类型);
删除列名:
alter table 表名 drop column 需要删除的列名;
修改列的类型:
alter table 表名 modify (需要修改的列名修改的列的类型);
  数据的修改:
      1.增加数据
        insert into 表名 (列名) values (列名对应的值);(使⽤pl/sql操作oracle中时,插⼊varchar2类型数据必须加单引号!)      2.删除数据
        delete from teacher where name='hahaha';
        delete from teacher where id=8;
      3.修改数据
        update teacher set age=29 where id=7;
      4. 通过where关键字进⾏过滤查询数据
        select * from teacher where id =1;
  视图:
     1.创建
       create view 视图名 as (select * from 哪个表)(可以将查询得到的表创建成⼀个视图)
      2.创建替换更名设置权限只读
        create  or replace  view 视图名 as(select st.id  from stu2 st) with read only 
      3.删除
       drop view  视图名
     4.增加数据
       insert into 视图名 (列名) values (列名对应的值); 
      5.修改数据
        update 视图名 s set s.AGE=99,s.SALARY=100,s.NAME='张三' where s.ID=7
      6.查询
        select * from 视图名
4.PL/SQL:
PL/SQL是⼀种sql语⾔
PL/SQL是⼀个oracle的连接⼯具
users:包含了所有oracle的⽤户(在sysdba⽤户登录模式下,来完成⽤户名,登录密码,权限配置)
tables:包含了当前⽤户的所有表
简单的查询语句:
select * from 表名;
查询出表中的所有数据
oracle中的注释:
--
data:
1.通过sql语句插⼊⼀条数据
  -- insert into 表名 (列名) values (列名对应的值);
  -- 在使⽤insert into语句时,如果是字符串类型的数据,就必须要加上单引号''---->中⽂单引号‘’---->英⽂单引号''
  -- 在使⽤insert into语句时,如果设定了⾮空字段,就⼀定要插⼊值,否则会报错。
  -- 并且insert into teacher(列名) values(列所对应的值);--->要⼀⼀对应
  insert into teacher (id,name,age,description) values(5,'tianqi',36,'我是⽥七');
  insert into teacher (id, name, age) values(6,'赵⼋', 34);
  --insert into teacher(id,name,description) values(7, '王九', '我是王九');
  insert into teacher (name, id, age, description) values('hahaha', 7, 30, '我是⼀个哈哈哈');
2.通过sql进⾏删除数据
  -- 在删除的过程中,尽量要使⽤唯⼀键进⾏删除,或者使⽤主键进⾏删除
  delete from teacher where name='hahaha';
  delete from teacher where id=8;
3.通过sql语句修改⼀条数据
  -- modify/update
  -- modify在oracle中适⽤于列的类型修改,也就是对表的修改进⾏操作
  -- update关键字在oracle中适⽤于对数据的修改
  -- 使⽤update关键字修改数据时,⼀定要⽤唯⼀键或者主键进⾏修改
  -- 在修改数据时,如果修改多个数据,中间⽤逗号隔开,字符串带上单引号
  update teacher set id=7, name='我是哈哈哈', age=35, description='我是测试数据' where id=10;
  update teacher set age=29 where id=7;
  --where要讲 in, =, <, >, between and, !=(<>), >=, <=, or, is null, is not null, not in, like "_L%", like "%_a%" escape 'a'
4.通过where关键字进⾏过滤查询
  =关键符号
  select * from teacher where id =1;
  ⼤于和⼩于
  select * from teacher where id > 1;
  select * from teacher where id < 9;
  ⼤于等于和⼩于等于
  select * from teacher where id >= 5;
  select * from teacher where id <= 1;
  实现区间(范围)查询
  select * from teacher where id >= 2 and id <= 10;
  between and 是包含两边的极限数据(闭区间)
  select * from teacher where id between  2 and 10;
  !=(不等于)
  select * from teacher where id != 5;
  select * from teacher where id <> 5;
  or关键字(或者)
  select * from teacher where id =1 or id = 2;
  and关键字(并且)
  select * from teacher where id = 6 and name = '赵⼋';
  in关键字(主要的作⽤:批量操作)
  select * from teacher where id in(1, 5, 10);
 is null 过滤出来所有为null的数据
  select * from teacher where description is null;
  is not null 过滤出来所有不为null的数据
  select * from teacher where description is not null;
  not in(过滤出不在范围内的所有数据)
  select id from teacher where id > 5只查询出了指定的id
  select * from teacher where id not in(select id from teacher where id > 5);
  select * from teacher where id not in(1,5,7);
  select * from teacher where name not in('zhangsan', 'lisi', 'wangwu');
  模糊查询
  --like⼀般情况下要和%结合起来⽤,%其实⼀个占位符,如果把%写在前⾯,匹配以赵结尾的所有名字,反之匹配以赵开头的所有名字    如果所需要查询的字段前后都加上%,只要包含该查询字段就全部查出来
    select * from teacher where name like '%a%';
    以_a%进⾏模糊查询的时候,会匹配以第⼆位为'a'的字符串
    --_就是代表了任意⼀个字符
    select * from teacher where name like '_a%';
    -- 查询以_开头的所有数据
    -- 需要把a给去掉
    -- 匹配规则:使⽤escape的时候会,如果_写在需要查询字段的前⾯,oracle会⾃动把_转移为任意⼀个字符
    -- 只有把下划线写在需要查询字段的后⾯,才能使⽤escape关键字去掉多余字段,只保留下划线。
    如果'%_x%',使⽤escape关键字时,会将要去掉后⾯的⼀位转义
    select * from teacher where name like '%x_d%' escape 'x';
    *查询
    -- 在sql中,可以使⽤简单的运算符(+,-,*,/)
    -- 查询某张表的所有数据
    select * from teacher;
    -- 查询某张表的指定数据
    select name, age from teacher;
    -- 查询某张表的指定数据(计算)
    select name, age from teacher where id=1;
    -- ⼗年后张三多⼤?
    select name, age+10 from teacher where id=1;
    给age字段起别名
    -- 给字段起别名:别名是为了更好对字段进⾏描述,也就是说起⼀个别名并不能随意起,要适⽤于这个字段的意思
    select name, age+10 as age from teacher where id=1;
    -- 通常情况下,这⾥的as关键字可以省略
    select name, age+10 age from teacher where id=1;
    -- 也可以给表起⼀个别名(⼩名)
    select t.name from teacher t;
    更改了列名,⾥⾯加了个空格
     如果别名中间出现了空格,就会报错(不到from关键字)
    只需要给别名加⼀个双引号(必须要是双引号)
    select name, age+10 "zhangsan age" from teacher where id=1;
    更改了列名,数据内容
    -- 姓名:zhangsan 年龄:33<---\\
    -- 姓名:也需要加上引号(⼀定要使⽤单引号)
    select '插⼊数据中的字段'|| name '⾃⼰起的列名' from teacher;
    查询出所有的⽼师信息,并且以年龄从⼩到⼤排列-->order by
    -- order by 默认是升序--->asc升序,如果以升序进⾏排列通常情况下asc省略
    select * from teacher order by age asc;
    查询出所有的⽼师信息,并且以年龄从⼤到⼩排序---->desc降序
    select * from teacher order by age desc;
    -- 如果两个⽼师年纪相同,就以姓名的⾸字母排序
    select * from teacher order by age desc, name;
    去重(关键字:distinct)
    select distinct age from teacher;
    select distinct t.age, t.name  from teacher t;
    select distinct name from teacher;多表查询
    dual,计算1+1等于⼏?
    select 1+1 from dual;-- dual其实也是⼀张表,这⼀表是虚拟的,没有列和数据,当查询的时候会进⾏赋予列和数据,⽤于⽅便⽤户测试使⽤
    -- 查询当前oracle登录的⽤户
    select user from dual;
    --sysdate,sysdate-,months_netween(,),add_months(,),next_day(,'星期⼏'),last_day,to_day
5.时间函数
    获取当前的时间:sysdate
    select sysdate from dual;
    sysdate-时间,查询的是指定⽇期距离当前⽇期的天数
    select t.hire_date, t.name, sysdate, sysdate-hire_date from teacher t;
    add_months:对指定⽇期⽉份进⾏加减计算
    select add_months(sysdate,3) from dual;
    select add_months(sysdate,-3) from dual;
    months_between:指定⽇期距离当前⽇期的⽉份
    select t.hire_date, sysdate,  months_between(sysdate, hire_date) from teacher t;
    next_day:查询出指定⽇期和指定星期⼏的⽇期:只能往后不能往前
    select next_day(sysdate, '星期⼀') from dual;
    last_day:查询出当⽉的最后⼀天
    select last_day(sysdate) from dual;
    select t.hire_date,  last_day(hire_date) from teacher t;
    to_date:时间转换函数
    -- 默认转换为年⽉⽇,不带时分秒
    --但是oracle查询当前⽇期会⾃带时分秒
    -- 使⽤to_date函数进⾏转换的时候,查询出的数据仍然遵循oracle的⽇期规范
    -- to_date:只能把年⽉⽇时分秒转换为年⽉⽇,或者把年⽉⽇转换为时分秒,不能转换oracle的⽇期格式规范
    -- oracle中没有任何⼀个函数可以修改oracle⽇期格式规范
    select to_date('1987/08/21 19:18:02', 'yyyy-mm-dd hh24:MI:ss') from dual;
    --lower(), upper(), initcat(), length(), replace(替换的列名,'z','Z')(把⼩z替换成⼤Z),substr(需要截取的列名,开始截取的位置,最后截取的位置), concat(,),ceil,   
   to_char:把⽇期转化为字符串
      提取年
      select to_char(sysdate,'yyyy')from dual
      提取⽉
      select to_char(sysdate,'mm')from dual
      提取⽇
      select to_char(sysdate,'dd')from dual
      提取⼩时(hh是12制的,hh24是24进制)
      select to_char(sysdate,'hh')from dual
          提取具体时间
      select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')from dual
     to_number:把字符串转为数字类型 (必须为数字类型的字符串)
      select to_number('123456')from dual
     count(*)或count(任意数字):计算数据的数量,其实就是把数据全转化为括号内的数字,再进⾏统计,查询      出来是多出⼀个
count(?)列。
     实际开发中⼀定要使⽤count(1)不要使⽤count(*)!
sql语句替换表中内容
    -- lower
    -- 把所有教师名字(英⽂)全部转换为⼩写
    select lower(name) from teacher;
    -- upper
    -- 把所有教师名字(英⽂)全部转换为⼤写
    select upper(name) from teacher;
    --initcap:⾸字母开头⼤写
    select initcap('oracle') from dual;
    select initcap(name) from teacher;
    --length:获取字符串的长度
    select length(name) from teacher where id =1;
    --replace:有三个参数
    -- 第⼀个参数:列名(字段);第⼆个参数:需要替换字段中的某⼀个字符;第三参数:替换的字符
    select * from teacher where id =1;
    select replace(name,'z','Q') from teacher where id =1;
    -- substr:和Java的subString差不多
    -- substr有两个参数:第⼀个参数:列名,第⼆个参数:从哪⼀位开始截取(包含最后⼀位截取的数):name,要截取前两位:subtr('name',2);--->得到的是ame
    select substr(name, 3) from teacher where id =1;
    -- 如果第⼆个参数为负数的话,就倒着从最后⼀位开始往前截取
    select substr('zhangsan', -3) from dual;
    --substr:
    select * from teacher;
    --subtr:有三个参数:第⼀个参数:列名,第⼆个参数:从哪⼀位开始截取(闭区间),第三个参数:截取到多少位(会从第⼆个参数的截取位置往后开始进⾏截取)    -- oracle中,截取的位置会从0或者1起始(0和1的位置是⼀样的)
    select substr('zhangsan',0,5) from teacher where id = 1;
    select substr('zhangsan',1,5) from teacher where id = 1;
    -- ceil:向上取整
    select ceil('12345.1') from dual;
    -- floor:向下取整
    select floor('12345.1') from dual;
    -- round:四舍五⼊
    select round('12345.1') from dual;
    select round('12345.7') from dual;
    select round('12845.6', -3) from dual;
    -- trunc:截断:会取整数
    -- 第⼆个参数:保留的⼩数位
    -- 如果没有⼩数,并且第⼆个参数为正数:就原样显⽰,不会加上.00
    select trunc('123444.87978787',2) from dual;
    -- 如果没有⼩数,并且第⼆个参数为负数:会把整数位从后往前写为0
    select trunc('123456', -3) from dual;
    -- concat:拼接字符串--->代替||
    select concat('zhang','san') from dual;
    select concat('姓名是:',name) from teacher;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。