select单表查询以及sqlplus

南楼画角 提交于 2019-12-16 14:12:29

1.使用select语句查询某张表的所有数据内容
    语法:
    select [distinct] *{col_name1,col_name2,..}
    from tb_name;
    注意:语法中出现的中括号[],表示该部分可有可无
    *:表示所有列,仅仅作为测试和学习使用,在企业用语中不出现,因为效率低下且可读性差
    col_name1:列名,将需要查阅的数据字段列举出来,可以查看多列值,列名之间用,进行分割即可
    s_emp :员工信息表
    s_dept:员工部门表
需求:查看s_dept表中的所有记录
    select *
    from s_dept;

    select id,name,region_id
    from s_dept;
练习:查看s_dept表中的所有记录的id和name
    select id,name
    from s_dept;


练习:查看所有员工的id,名字(last_name)和薪资(salary)
    select id,last_name,salary
    from s_emp;

2.select语句可以对指定的列的所有值进行算术运算。
    语法:
    select col_name 运算符 数字
    from tb_name;
需求:查看每个员工的员工id,名字和年薪。
    select id,last_name,salary*12
    from s_emp;
注意:select语句永远不对原始数据进行修改。
练习:查看每个员工的员工id,名字和月薪涨100以后的年薪
    select id,last_name,(salary+100)*12
    from s_emp;
3.给查询的列起别名
    语法:
    select old_column [as] new_column_name
    from tb_name;
需求:查看员工的员工id,名字和年薪,年薪列名为annual
    select id,last_name,salary*12 as annual
    from s_emp;

4.使用||可以使得多列的值或者列和特殊的字符串合并到一个列进行显示
    语法:
    select col_name||'spe_char'||col_name
    from tb_name
    'spe_char':如果一个列的值要跟特殊的字符串连接显示,使用该语法。
需求:查看员工的员工id,全名
    select id,first_name||last_name
    from s_emp;
练习:查看员工的员工id,全名和职位名称,全名和职位名称合并成一列显示,且格式为:姓 名,职位名称
    select id,first_name||' '||last_name||','||title as name
    from s_emp;

5.对null值得替换运算
    nvl()函数
    语法:
    select nvl(col_name,change_value)
    from tb_name;
需求:查看所有员工的员工id,名字和提成,如果提成为空,显示成0
    select id,last_name,nvl(commission_pct,0) commission_pct
    from s_emp;
6.使用distinct关键词,可以将显示中重复的记录只显示一条
    语法:
    select distinct col_name,col_name...
    from tb_name;

    注意1:distinct关键词只能放在select关键词后面
    如:select id,distinct title
        from s_emp;
    该语句语法错!!!!!
    注意2:如果distinct关键词后面如果出现多列,表示多列联合去重,即多列的值都相同的时候才会认为是重复的记录。
    test表:
    id    id2
    1    2
    1    3
    2    4
    3    4
    3    4
    select distinct id,id2
    from test;
    显示结果为:
    id    id2
    1    2
    1    3
    2    4
    3    4
需求:查看所有员工的职位名称和部门id,同职位同部门的只显示一次
    select distinct title,dept_id
    from s_emp;

7.sqlplus命令
   sqlplus 登录之后,可以使用buff(缓存)来存储/执行/修改要执行的sql语句
   这里的buff的特点:
      1.buff中只能存储一条sql语句(但是这条sql语句可能有很多行)
      2.每次放入新的sql语句,会把之前的覆盖掉
      3.每次执行sql语句,都会把这个sql语句放到buff里面

    l   查看缓存中的sql语句
    a   在[定位]的那一行后面追加新的内容
    i   在[定位]的那一行下面插入新的一行
    c   替换[定位]的那一行中的某些字符串
        c/老的字符串/新的字符串
    del 删除[定位]的那一行内容
    n   后面加内容可以重写这一行
    !   后面接终端命令 !clear:清屏 windows中使用$符号 例如:$cls
    /   执行缓存sql命令

    clear buffer:清空当前缓存的命令

        
    save  test.sql  buff中的sql语句保存在test.sql文件中
    get   test.sql  把test.sql中的内容在加载到buff中,但是没有运行
    start test.sql  把test.sql中的内容在加载到buff中并且执行
    @test.sql       把test.sql中的内容在加载到buff中并且执行
    edit file_name  使用系统默认编辑器去编辑文件



    spool file_name 将接下来的sql语句以及sql的运行结果保存到文件中
        sql1
        result1
        sql2
        result2
        ...
    spool off  关闭spool功能
    exit:退出
    
8.select id,last_name,first_name, salary, dept_id
  from s_emp
  Where rownum <=10;

  结果不好看,通过column使我们的显示界面好看。

    COLUMN last_name FORMAT a15;
    可以简写为:
    col last_name for a15;
    COLUMN first_name FORMAT a15;



第二章:排序和限制查询
1.排序:所谓排序,就是根据某个字段的值按照升序或者降序的情况将记录查询出来
    语法:
    select col_name,...
    from tb_name
    order by col_name [asc|desc],...
    注意:1.排序使用order by字句,该子句只对查询记录显示调整,并不改变查询结果,所以执行权最低,即最后执行。
    2.排序关键词:
        asc:升序(默认,默认的意思是不加关键词的时候默认为生序排序)
        desc:降序
    3.如果有多个列排序,后面的列排序的前提是前面的列排好序以后有重复(相同)的值。

    例子:
    id    id2
    1    2
    2    3
    3    4
    4    1
    4    2

    语句:
    select id,id2
    from test
    order by id,id2 desc;
    
    结果:
    id    id2
    1    2
    2    3
    3    4
    4    2
    4    1
    注意:先排第一列,如果第一列有重复的值再排第二列,以此类推
需求:查看员工的id,名字和薪资,按照薪资的降序排序显示。

2.限制查询,即指定查询条件进行查询
    语法:
    select col_name,...
    from tb_name
    where col_name 比较操作表达式
    逻辑操作符
          col_name 比较操作表达式
    ...
    注意:
    1.限制查询条件,使用where子句
    2.条件可以多个,使用逻辑操作符和()进行条件的逻辑整合
    3.where子句的优先级别最高
    4.比较操作表达式由操作符和值组成
        常见的操作:
        1》逻辑比较操作符
        =  >  <  >=  <=  !=
        2》不等于:三个都表示不等于的意思(经常用的是!=)
        !=   <>   ^=

需求:查看员工工资小于1000的员工id和名字
    select id,last_name,salary
    from s_emp
    where salary < 1000;

        2》sql比较操作符
        between and:在什么范围之内
需求:查看员工工资在700 到 1500之间的员工id,和名字
    select id,last_name,salary
    from s_emp
    where salary between 700 and 1500;
        in(list):在一个列表中
需求:查看员工号1,3,5,7,9员工的工资
    select id,last_name,salary
    from s_emp
    where id in (1,3,5,7,9);
        like:模糊查询,即值不是精确的值的时候使用
        通配符,即可以代替任何内容的符号
        % :通配0到多个字符
        _ : 当且仅当通配一个字符

        转义字符:
        默认为\,可以指定 指定的时候用escape 符号指明即可,转义字符只能转义后面的一个字符
需求:查看员工名字以C字母开头的员工的id,工资。
    select id,last_name,salary
    from s_emp
    where last_name like 'C%';
练习:查看员工名字长度不小于5,且第四个字母为n字母的员工id和工资
     select id,last_name,salary
    from s_emp
    where last_name like '___n_%';
需求:查看员工名字中包换一个_的员工id和工资
    select id,last_name,salary
    from s_emp
    where last_name like '%\_%' escape '\';


        is null:对null值操作特定义的操作符,不能使用=
需求:查看员工提成为为空的员工的id和名字
    select id,last_name,commission_pct
    from s_emp
    where commission_pct is null;
    3.逻辑操作符
    当条件有多个的时候使用
        and:且逻辑
        or:或逻辑
        注意:and逻辑比or逻辑要高
    not:非逻辑
需求:查看员工部门id为41且职位名称为Stock Clerk(存库管理员)的员工id和名字
    select id,last_name,dept_id,title
    from s_emp
    where dept_id = 41
    and
          title = 'Stock Clerk';
练习:查看员工部门为41 或者 44号部门 且工资大于1000的员工id和名字
    select id,last_name,dept_id,title
    from s_emp
    where salary > 1000
    and
          (dept_id = 41
          or
          dept_id = 44);
      查看员工部门为41且工资大于1000 或者 44号部门的员工id和名字
    select id,last_name,dept_id,title
    from s_emp
    where salary > 1000
    and
          dept_id = 41
    or
          dept_id = 44;





标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!