• SQL 小技巧


    -------查看锁

    SELECT object_name, machine, s.sid, s.serial#
    FROM gv$locked_object l, dba_objects o, gv$session s
    WHERE l.object_id = o.object_id
    AND l.session_id = s.sid;

    -------解除锁

    ALTER system kill session 'sid,serial';

    --------日期格式

    select to_char(to_date(to_char(to_date(to_char(sysdate,'yyyy-MM-dd hh24:mi:ss'),
    'yyyy-MM-dd hh24:mi:ss'),'yyyy-MM-dd hh24:mi:ss'),
    'yyyy-MM-dd hh24:mi:ss'),'yyyy-MM-dd hh24:mi:ss') times
    from dual

    ---------查看用户的总表

    select count(*) from user_tables

    ---------所用用户的总表

    select OWNER , TABLE_NAME from all_tables order by OWNER

    --------所有视图

    select view_name from view_views

    --------索引个数和类别

    select *  from index_name,index_type,table_name from user_indexes order by table_name

    一、基本概念
        表(table):用于存储数据,由行(row)和列(column)构成
        行(row):代表表中的一条数据,也叫实体(entity)
        列(column):代表数据的一个属性,也叫字段(field)
        关系(relationship):表和表之间的联系
            主键(Primary Key)、外键(Foreign Key)


    二、服务器端/客户端(Client/Server)
        必须要启动的服务:OracleServiceXE、OralceXETNSListener
        
        1、sqlplus:oracle提供的一个客户端软件,用于进行数据库的操作。
            开始-->运行-->输入cmd-->在DOS界面,输入 sqlplus 用户名/密码
            
            对HR用户解锁:1)管理员登录
                                sqlplus / as sysdba
                          2)解锁(激活用户)
                                alter user 用户名 account unlock;
            --查询和当前用户相关的表
            select table_name from user_tables;
            
            退出:exit;
        2、iSqlPlus:oracle提供的一个基于IE的客户端软件,用于进行数据库的操作。
            进入:http://localhost:8080/apex
            
            sqlPlus命令:在oracle提供的客户端工具中可以使用的命令。
                sqlPlus
                isqlplus
                --查看表结构
                desc 表名
            SQL命令:用于对数据进行增删改查操作、对数据库进行管理;
                适用于所有的RDBMS;
                结构化查询语句 Structure Query Language
            PLSQL:oracle在标准SQL基础上,进行了功能扩展。

    三、排序
        select 列名 from 表名 order by 列名 asc(升,默认)/desc(降序),列名2 asc/desc
        1、单列排序
            --查询所有员工信息,并按工资从高到低显示
            select * from employees order by salary desc;
            --查询所有员工信息,并按工资从低到高显示
            select * from employees order by salary asc;
        2、多列排序
            --查询所有员工信息,并按工资从高到低显示,如果工资相同,再按部门编号从大到小排
            select * from employees order by salary desc, department_id desc;
            --先按工资升序,如果工资相同,再按部门降序
            select * from employees order by salary , department_id desc;

    五、条件查询

      select 列1,列2 from 表名 where 过滤条件表达式 order by 排序列 asc/desc
        1、等值查询
            --查询工资是24000的员工编号、姓名、工资
            select employee_id, first_name, salary from employees where salary=24000;
            --查询员工姓是king的员工编号、姓名、工资
            select employee_id, first_name, salary from employees where first_name='King';
            注意:在比较时,如果字段类型是字符或字符串类型,必须使用‘’
                    同时,单引号中的内容,严格区分大小写
        2、> >= < <= != and or
            --查询工资是24000同时姓King的员工编号、姓名、工资
            select * from employees where salary=24000 and last_name='King';
            --查询工资高于20000的员工编号、姓名、工资
            select * from employees where salary > 20000;
            --查询部门90和100下的所有员工
            select * from employees where department_id=90 or department_id=100;
        3、列名 is [not] null --字段值是否为null
            --查询没有奖金的员工信息
            select * from employees where COMMISSION_PCT is null;
            --查询有奖金的员工信息
            select * from employees where COMMISSION_PCT is not null;
        4、列名 [not] between 小值 and 大值
            --查询工资介于10000到20000之间的员工信息
            select * from employees where salary >=10000 and salary<=20000;
            select * from employees where salary between 10000 and 20000;
            
            注意:小值在前,大值大后;包含边界值。
        5、列名 [not] in (值1,值2,。。。)
            --查询部门90、100、60下的员工
            select * from employees where department_id=90 or department_id=100 or department_id=60;
            select * from employees where department_id in (90,100,60);
        6、模糊查询【重点】
            列名 [not] like '格式字符串',其中格式字符串中通常包含通配符:
                %(0-N多字符);_(仅代表1个字符)
            --查询姓中包含L的员工
            select * from employees where last_name like '%L%';
            --查询姓中第2个字母是L的员工
            select * from employees where last_name like '_L%' or last_name like '_l%';
            --查询姓的长度是5,并且第2个字母是L的员工
            select * from employees where last_name like '_L___' or last_name like '_l___';
            --查询名字中不包含L的员工
            select * from employees where last_name not like '%L%';
    六、去掉查询结果中的重复数据行
        select distinct 列名 from 表名

    七、case when then else end  类似JAVA中的switch语句
        case
            when 条件1 then 表达式1
            when 条件2 then 表达式2
            else 表达式N
        end  as 列别名

        --查看员工的工资情况:>20000 ***** ; 15000-20000  ****;10000-15000 ***;其它 *
        select employee_id, last_name, salary,
            case
                when salary>20000 then '*****'
                when (salary between 15000 and 20000) then '****'
                else '*'
            end as 工资情况
        from employees
        
        employee_id    last_name    salary    工资情况
        100        King        24000        *****
        105        A            17000        ****
        111        B            22000        *****
        55        C            5000        *
        
        注意:一个case...end 代表的是1列的信息,可以给这个列取别名。

    提示,oracle中的日期默认字符串格式为"d-m月-yy"'1-5月-97' '31-12月-97'

  • 相关阅读:
    C语言编程如何实现输出一个回型递增的N阶矩阵(螺旋矩阵)
    cookie测试要点
    一个网页怎么开展测试
    web和app区别
    app功能测试
    复习Linux笔记
    学习python
    微信小程序测试流程
    Redis
    记录
  • 原文地址:https://www.cnblogs.com/liuruipeng/p/7880780.html
Copyright © 2020-2023  润新知