Oracle 笔记03

用子查询  查询谁是普通员工


select first_name,id  from s_emp  
    where   id in (领导的id);
select first_name,id  from s_emp  
    where   id in (select 
    distinct manager_id from s_emp);
select first_name,id  from s_emp  
    where   id in (1,2,3,黑盒子);
select first_name,id  from s_emp  
    where   id  not in (select 
    distinct manager_id from s_emp);
注意:not  in  使用时要注意NULL值
select first_name,id  from s_emp  
    where   id  not in (select 
    distinct manager_id from s_emp 
    where manager_id is not null);
select first_name,id  from s_emp  
    where   id  not in (select 
    distinct nvl(manager_id,-1) from s_emp );
select first_name,id  from s_emp  
    where   id  not in (select 
    distinct nvl(manager_id,1) from s_emp );
select first_name,id  from s_emp  
    where   id  not in (select 
    distinct nvl(manager_id,25) from s_emp );
    //logic  error


找出和id 是1的职位相同的员工
select title  from  s_emp where id=1;
select  first_name,title from s_emp where 
title=(select title  from  s_emp where id=1)
and  id!=1;


------------------------------------------
SQL数据类型:
number       数字类型
varchar2(n)  变长字符串
char(n)      定长字符串  4k
date         日期类型


CLOB         大字符类型  4g
BLOB         大二进制类型 4g 


日期类型:
表达系统当前时间   sysdate
和语言相关的-------NLS_LANG
英文默认格式
DD-MON-YY
07-NOV-12


07-11月-12


处理日期的函数
语言环境
时间的表达问题
to_date(要转换的日期字符串,格式字符串)


建表   字段  都要遵循标识符的定义


create table 表名(
    字段名    类型,
    字段名    类型,
    字段名    类型
);


create table  testtype(
    id     number,
    fname  varchar2(10),
    sname  char(10),
    birday date
);
插入语句
insert into testtype values(1,'xsy','xsy',
sysdate);


insert into testtype values(9527,'zxc','zxc',
'01-NOV-08');
insert into testtype values(9527,'zxc','zxc',
'01-11月-08');


我们想把 2008-08-08 08:08:08


to_date


insert into testtype values(1,'abc','abc',
to_date('2008-08-08 08:08:08',
'yyyy-mm-dd hh:mi:ss'));


yyyy   四位年
mm     二位月
dd     日
hh     12小时的   hh24
mi     分钟
ss     秒


day    表达星期几
mon    月的英文缩写
month   




to_char(日期,'日期格式')


select to_char(sysdate,
'yyyy-mm-dd hh24:mi:ss day mon')
from  dual;


to_date  就是按照格式放入日期
to_char  按照格式来显示日期


日期的加减法:


select to_char(sysdate-1,
'yyyy-mm-dd hh24:mi:ss day mon')
from  dual;
向前走一个小时
select to_char(sysdate+1/24,
'yyyy-mm-dd hh24:mi:ss day mon')
from  dual;


往前加一个月   往后推一个月


select to_char(add_months(sysdate,1),
'yyyy-mm-dd hh24:mi:ss day mon')
from  dual;
select to_char(add_months(sysdate,2),
'yyyy-mm-dd hh24:mi:ss day mon')
from  dual;


next_day  下一个星期几是几号


select next_day(sysdate,'星期五') from dual;
select next_day(next_day(sysdate,'星期五'),
'星期五')from dual;




last_day  本月的最后一天
select to_char(last_day(sysdate),
'yyyy-mm-dd hh24:mi:ss day mon')
from  dual;


补充:
round(日期)
select to_char(sysdate,
'yyyy-mm-dd hh24:mi:ss day mon'),
to_char(round(sysdate+1/24),
'yyyy-mm-dd hh24:mi:ss day mon')
from  dual;
默认对天进行四舍五入 
select to_char(sysdate,
'yyyy-mm-dd hh24:mi:ss day mon'),
to_char(round(sysdate,'mm'),
'yyyy-mm-dd hh24:mi:ss day mon')
from  dual;
select to_char(sysdate,
'yyyy-mm-dd hh24:mi:ss day mon'),
to_char(round(sysdate,'y'),
'yyyy-mm-dd hh24:mi:ss day mon')
from  dual;
trunc(日期)
select to_char(sysdate,
'yyyy-mm-dd hh24:mi:ss day mon'),
to_char(trunc(sysdate,'mm'),
'yyyy-mm-dd hh24:mi:ss day mon')
from  dual;
select to_char(sysdate,
'yyyy-mm-dd hh24:mi:ss day mon'),
to_char(trunc(sysdate,'y'),
'yyyy-mm-dd hh24:mi:ss day mon')
from  dual;


在一个月的任何时间执行一条语句
得到的都是下一个月的开始的时间
to_char()


trunc(add_months(sysdate,1),'mm')
trunc(last_day(sysdate)+1)
----------------------------------------------
SQL约束的种类
主键    ------primary key
唯一    ------unique
非空    ------not null
检查    ------check
外键    ------foreign key  references




表上建立约束:对数据的最后一道屏障  
主键    ------唯一  且 非空
                     一个表最多只能有一个主键
唯一    ------------不能有重复的
非空    ------------不能有NULL值
检查    ------字段要符合检查条件
外键    -------------涉及到两张表
                     s_dept  -----id  (主表)
    s_emp   -----dept_id(子表)
    定义了外键的表就是子表
                     s_dept  -----region_id
    s_region ----id(主键)
    外键 引用主表的字段 必须有唯一性限制
    外键的取值只能是主表字段的值 要么是NULL
    这样能保证子表数据的完整性
    一旦违反外键约束 就会报数据完整性约束


约束的语法:
列级约束:在定义表的列的时候 直接定义的约束
1.主键-------列级
create table   testconstraint_pk(
    id    number,
    name  varchar(30)
);
insert into testconstraint_pk values(
1,'aobama');


drop table  testconstraint_pk;
create table   testconstraint_pk1(
    id    number primary key,
    name  varchar(30)
);
insert into testconstraint_pk1 values(
1,'aobama');
如果违法约束 会出现系统的约束名
create table   testconstraint_pk2(
    id    number constraint 
    testconstraint_pk2_id_pk primary key,
    name  varchar(30)
);
insert into testconstraint_pk2 values(
1,'aobama');
要求大家建立一张表 有两个字段 
id   number
name varchar2(20)
要求id 设置列级的主键约束  
    name 设置列级别的唯一性约束
create  table   test_c_pkuk(
    id     number constraint 
    test_c_pkuk_id_pk primary key,
    name   varchar(30) constraint
    test_c_pkuk_name_uk unique
);


insert into test_c_pkuk values(211,'abc');
0001: 违反唯一约束条件 (OPENLAB.TEST_C_PKUK_NAME_UK)


not  null  的列级约束和主键语言相同
检查约束
要求大家建立一张表 有两个字段 
id   number
salary  number
要求id 设置列级的主键约束  
    salary 设置列级别的检查约束  要求工资
    大于3500
create  table   test_c_pkck(
    id     number constraint 
    test_c_pkck_id_cpk primary key,
    salary   number constraint
    test_c_pkck_salary_ck  check(salary>3500)
);


insert into test_c_pkck values(10087,3500);




表级约束:在所有的列定义完成后  对表的某些
列加的约束
为什么要有表级约束?
建立一张表  有三个字段
fid   number 
sid   number 
name  varchar2(30)


要求 fid  和 sid  联合做主键
要求 fid  和 sid  联合唯一
解决联合约束
not  null  这个约束 不可能出现联合非空
所有not null  没有表级约束


语法形式如下:
create table  test_table_pk(
    id   number,
    name  varchar2(30),
    salary number,
    constraint  test_table_pk_id_pk  
    primary key(id)
);


使用表级别约束建立表
fid       number
sid       number
name      varchar2(20)
salary    number


fid  sid  要联合做主键
name   唯一
salary  要求大于8000 


create table  test_table_con1001(
    fid       number,
    sid       number,
    name      varchar2(20),
    salary    number,
    constraint  test_table_con1001_fsid_pk 
    primary key(fid,sid),
    constraint  test_table_con1001_name_uk
    unique(name),
    constraint  test_table_con1001_salary_ck
    check(salary>8000)
);
--------------------------------
外键:
     --主表:部门表
     drop table myemp;
     drop table mydept;
     create  table  mydept(
         id     number primary key,
name   varchar2(30)
     );
      
    /*子表:员工表*/
     create  table  myemp(
         id    number  primary key,
         name  varchar2(30),
         fid   number constraint myemp_fid_fk
         references  mydept(id) 
     );






1.先建立主表  后子表
2.插入数据 一般先插入主表  
  除非子表的外键使用NULL值
  insert into  mydept values(1,'test');
  insert into  myemp values(2,'taoge',1);


3.删除 数据 先删除子表  后删父表
  除非你设置了级联(级联置空  级联删除) 


4.删除表
  先删子表 后删父表
  
  drop   table  s_dept cascade constraints; 
  (先解除主外键关系 再删除表)
把下面的外键关系改成 表级外键约束
     create  table  mmdept(
         id     number primary key,
name   varchar2(30)
     );
      
    /*子表:员工表*/
     create  table  mmemp(
         id    number  primary key,
         name  varchar2(30),
         fid   number ,
constraint mmemp_fid_fk
         foreign  key(fid) 
references  mmdept(id) 
     );
级联  -----级联置空   级联删除
drop table mmdept;
drop table mmemp;


    create  table  mmdept(
         id     number primary key,
name   varchar2(30)
     );
     insert into mmdept values(1,'test');
     commit;
      
    /*子表:员工表*/
     create  table  mmemp(
         id    number  primary key,
         name  varchar2(30),
         fid   number ,
constraint mmemp_fid_fk
         foreign  key(fid) 
references  mmdept(id) 
on delete cascade 
     );
     insert into mmemp values(1,'zs',1);
     insert into mmemp values(2,'zss',1);
     insert into mmemp values(3,'zsss',1);
     commit;
当主表删除数据时级联 删除子表相关的数据


 create  table  mmemp(
         id    number  primary key,
         name  varchar2(30),
         fid   number ,
constraint mmemp_fid_fk
         foreign  key(fid) 
references  mmdept(id) 
on delete set null 
     );


------------------------------------------
约束:
   5类约束----a  b c  d  e
   语法----表级 和列级别
   not   null
   check
   外键----级联置空  删除


------------------------------------------
数据库中dml
insert   
delete  
update 


1.插入语句     insert
create table  testdmla(
    id    number  primary key,
    fname   varchar2(10),
    sname   char(10)
);
insert  into  表名  values 
(字段值1,字段值2,....);
插入值的顺序 和 desc  出现的字段顺序相同


insert into  testdmla values(1,'abc','abc');


select  length(fname) ,length(sname)  from 
testdmla;


select * from testdmla where fname='abc';


select * from testdmla where sname='abc';


select * from testdmla where fname='abc  ';
select * from testdmla where sname='abc  ';
定长字符串 如果数据长度不够则补空格


insert into testdmla(id,sname) 
values(100,'baoge');


必须包含所有的非空字段


注册一个帐号 
insert into testdmla  values(10086,
'quange','chen');


insert into testdmla  values(10087,
'moyan','mo');




commit;   ------确认本次事务(交易) 
rollback; ------取消本次事务(交易)  


一般  事务谁发起  谁结束


drop table testdmla;
create table  testdmla(
    id    number  primary key,
    fname   varchar2(30),
    sname   char(30)
);
insert into testdmla   select id
,first_name,last_name from s_emp;


insert into testdmla(id,fname)   select id
,first_name from s_emp;


2.删除数据


  delete  from  表名 where 条件;
  
  delete from testdmla where id=1;


  commit;
  rollback;
3.更新数据 update
  update   表名  set  字段名=值
  ,字段名2=值 where  条件;


  update  testdmla  set fname='who'
  where  id=10086;


dml 语句都具备事务特性   事务是非自动
提交的
ddl  是自动提交事务
select  没有事务特性
通达信行情API是金融数据提供商通达信(TongDaXin)为开发者和金融机构提供的接口服务,用于获取实时及历史的股票、期货、期权等金融市场数据。这个API允许用户在自己的应用程序中集成通达信的数据服务,实现个性化数据分析、交易策略开发等功能。 1. **API基本概念** - **API**:Application Programming Interface,应用程序编程接口,是软件之间交互的一种方式,提供预定义的函数和方法,使得其他软件能够调用特定功能。 - **通达信**:国内知名的金融终端软件提供商,提供股票、期货、基金等市场数据,以及交易服务。 2. **通达信API的功能** - **实时行情**:获取股票、期货、期权等市场的实时报价信息,包括最新价、涨跌额、涨跌幅、成交量等。 - **历史数据**:获取历史交易日的K线数据、分时数据、交易量等信息,支持自定义时间段查询。 - **深度数据**:获取买卖盘口的五档报价和成交量,有助于分析市场买卖意愿。 - **资讯信息**:获取公告、研报、新闻等市场资讯。 - **交易委托**:通过API进行交易下单、撤单等操作,实现自动化交易。 3. **TdxHqApi** - **TdxHqApi** 是通达信行情API的具体实现,它包含了调用通达信数据服务的各种函数和类,如获取股票列表、获取实时行情、获取历史数据等。 - 开发者需要按照API文档的指示,导入TdxHqApi库,然后通过调用相应的函数来获取所需数据。 4. **使用步骤** - **安装**:下载并安装通达信API的SDK,通常包括头文件和动态链接库。 - **初始化**:在代码中实例化API对象,进行连接设置,如服务器地址、端口号等。 - **连接**:连接到通达信服务器,进行身份验证。 - **数据请求**:调用对应的API函数,例如`GetS
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值