• 第三天.SQL语言基础


    SQLSERVER,ACCESS都用SQL结构化查询语言,这是数据库中不可少的一部分,当然ORACLE也强支持!

    sqlplus

    connect scott/tiger 登陆

    create table abc(a varchar2(10),b char(10)); 新建一个表

    alter table abc add c number; 向表里添加一个字段

    drop table abc; 删除表里的所有信息

    alter table abc drop column c; 删除表里的一个字段

    insert into e(eid,ename) values('','');只能插入一条记录。

    insert into e(eid,ename) select id,name from d;把D表中的结果集插入到当前表中,类型,字段匹配。

    create table name(t char(10))创建一个新表。
    create table t as (select ID,NAME from e);把E表中的ID,NAME字段和对应的记录复制到新表T中。后面的括号可以不加。

    connect tt/tt11  登陆

    select * from scott.dept; 查询某用户下的表,但是没有权限

    conn scott/tiger 登陆

    grant select on dept to tt;受权给TT,可以操作DEPT表的SELECT

    remoke select on dept from tt;收回SELECT权限

    insert into abc(a,b,c) values('c','b','a'); 插入一条记录

    insert into abc values('c','b','a');

    update abc set a='a',b='b' where c='c'; 更新记录

    delete from abc; 删除表中的所有记录

    delete from abc where c='c'; 删除WHERE条件的记录

    常用系统函数:
    1、字符
    length
    select left('abcdef') from dual;查它的字符数
    select lengthb('fdafa  ');查询它的字节数

    select ltrim('  fadf   ') from dual;删除左边空格
    rtrim,trim分别删除右边和两边的字符;

    如果定义的字段为定长的,这时候如果字符不够则会补空格;

    SUBSTR
    select substr('abcdefg',2,3) from dual;取指定第几个到第几个的字符

    ORACLE中不支持LEFT,RIGHT函数


    2、日期
    select sysdate from dual;表示当前时间
    alter session set  nls_date_format='dd-mon-yyyy hh:mi:ss' 设定日期格式
    select current_date from dual;查询上面指定格式的日期
    select next_day(sysdate,'星期三') from dual;查询当前下个星期,指定星期数的那个日期

    3、转换
    select to_char(sysdate,'yyyy-mm-dd') from dual;把日期转换为指定格式的字符串
    to_date:转换成日期格式
    to_number:转换为数字型

    4、聚集函数
    sum:select sum(price) from books:查询价格的总值
    avg:平均值
    max:select max(price) from books;查询价格的最大值
    min:查询最小值
    count:总共多少记录,行数count(*),count(price),一般查询出的结果是一样的,但有些情况是不一样的,当某字符允许有空值的时候就会出现差别

    5、其它
    user:select user from dual;查询当前登陆账号,conn tt/tt11登陆
    select sum(decode(sex,'男',1,0)) 男人数,sum(decode(sex,'女',1,0)) 女人数 from e;查询男人数和女人数的个烽
    select a1,nvl(a2,'没有输入') from aa;但询a2字段如果为空值就显示“没有输入”
    select * from aa where a2 is null;查询A2为空的记录
    select * from aa order by a1 desc;按降序排列,ASC为升序.
    select distinct a1 from aa;只显示重复的一条,distinct

    分组语句
    select sum(price*qty) from books;查询全部总金
    select pub,sum(price*qty) from books group by pub;分组查询每个出版社的总金,前面的PUB和后面的PUB一定要对应
    SUM聚集函数不能在WHERE中出现

    模糊查询
    select  a1 from where a1 link 'a_';以A开头的任意单个字符结尾的
    LINK 'A%':以多个结尾字符结尾的
    LINK '%A%':只要包含A就能查出来

    表的连接
    查询二个或二个以上的表
    select eid 编号,ename 姓名,sex 性别,id 所在部门 from e;
    内连接(两个表完全匹配)
    select eid 编号,ename 姓名,sex 性别,d.id 所在部门 from e,d where e.id=d.id;如果两个表中都有ID这个字段,这里就要在字段列表中表名.字段
    select eid 编号,ename 姓名,sex 性别,d.id 所在部门 from e join d on e.id=d.id;和上一条语句一样,但标准是这一种格式
    外连接(左连接,右连接)
    左外连接:
    select eid 编号,ename 姓名,sex 性别,d.id 所在部门 from e,d where e.id=d.id(+);以左边的记录为准,左边的记录全部显示,右边显示符合条件的记录
    右外连接:where e.id(+)=d.id;与左连接相反

    子查询
    select * from e where id in(select id from d);这是无关子查询,从D里找E
    select * from e where id in(select id from d where id=e.id and id='03');后面那个子查询不能使用*,这样会出现错误 
    select * from e where exists(select id from d);是否存在;这两个后成可以用*
    select * from e where not exists(select id from d);查询不存在的记录

    补充
    selec eid,ename from e union select id,name from d;把E表和D表中的结果集合并到一起来,如果有重复的记录则只显示一条

    select id from e intersect select id from d;返回两者都匹配的记录(ORACLE中独有的)

  • 相关阅读:
    2016/1/18
    正则知识点总结
    爬虫反反爬虫:转
    健身与饮食随想--年轻的每一天,都是弥足珍贵的!!!
    python time模块
    c语言求两个数的最大公因数(穷举法,欧几里得算法,递归)
    c语言递归解决汉诺塔问题
    python用函数打印素数(代码未优化)
    羊车门问题提交
    Delphi Tokyo 10.2.3
  • 原文地址:https://www.cnblogs.com/astar/p/1122126.html
Copyright © 2020-2023  润新知