zoukankan      html  css  js  c++  java
  • Oracle上课学习笔记<1>

    简单的select查询语句

    1.select查询语句基本语法
    使用两个关键字:
    select 指定要查询的字段和内容
    from 从哪张表中查询
    语法:select 字段名 from 表名;

    三种不同的用法:
    1)查询某张表中特定的某一个字段
    select 字段名 from 表名;
    例如:查询员工表中所有员工的id
    SQL:select id
    from s_emp;
    2)查询某张表中的多个字段
    字段之间通过逗号分隔
    select 字段1,字段2,字段3.... from 表名;
    例如:查询员工表中所有员工的id、last_name?
    SQL:select id,last_name
    from s_emp;
    查询所有员工的id、last_name、salary?
    SQL:select id,last_name,salary
    from s_emp;
    3)查询一张表中的所有字段
    1)将所有字段名全部定义出来进行查询
    2)使用*符号 代表全部字段的含义
    例如:查询部门表中全部字段的全部内容?
    SQL:select id,name,region_id
    from s_dept;
    等同于:select * from s_dept;

    区别:方式1)直接根据字段名取字段值
    效率较高
    方式2)使用*号,要先查询当前表中
    有哪些字段,再根据查询的结果
    去取对应的字段值。
    效率较低。

    2.算数运算
    1)数值类型的运算
    包括 加减乘除
    + - * /
    例如:查询员工12个月的总收入?
    select salary*12 from s_emp;

    练习:员工每个月涨了200元
    查询加薪之后的12个总收入?
    select (salary+200)*12
    from s_emp;

    练习:在加薪200元的基础上,每位员工有
    年终奖500元。
    查询每位员工一年的薪水?
    (该公司一年为员工付薪18月)
    select (salary+200)*18+500
    from s_emp;


    2)日期类型的运算
    日期类型运算只有加减法
    加法代表向指定日期的未来数几天
    减法代表向指定日期的过去数几天

    例如:查询所有员工入职时间的前一天?
    select start_date-1 from s_emp;

    3.处理空值
    查询所有员工的id、提成(commission_pct)?
    select id,commission_pct
    from s_emp;

    查询所有的员工id、工资+提成?
    select id,salary+commission_pct
    from s_emp;

    单值函数:nvl(字段名,默认值)
    把有可能出现空值的字段,写在nvl函数中。
    如果字段值查询结果不为空,则使用原来的值。
    如果字段值为空,使用默认值。
    SQL:select id,salary+nvl(commission_pct,0)
    from s_emp;

    错误写法:
    select id,nvl(salary+commission_pct,0)
    from s_emp;

    4.字符串拼接
    可以把多个字段的结果拼接成一个字段显示。
    例子:查询员工的全名?
    first_name last_name

    select first_name,last_name
    from s_emp;
    在Oracle数据库中拼接字符串使用 ||
    语法:字符串1||字符串2||字符串3.....
    SQL:select first_name||last_name
    from s_emp;

    练习:查询所有员工的全名?
    要求:姓氏和名字之间使用“-”分割。
    select first_name||'-'||last_name
    from s_emp;

    concat:字符串拼接
    select first_name||last_name
    from s_emp;
    等同于:
    select concat(first_name,last_name)
    from s_emp;

    5.查询结果起别名
    1)查询结果可以看作是一张表
    2)这张表中的字段名取决于
    select关键字后面定义的内容(默认)。

    四种方式:
    1)select 字段 别名 from 表名;
    2)select 字段 as 别名 from 表名;
    3)select 字段 "别名" from 表名;
    4)select 字段 as "别名" from 表名;

    方式1和方式2没区别。

    例如:查询所有员工的id以及12个月的薪水?
    并且12个月的薪水显示结果为Sal?
    select id,salary*12 as "Sal"
    from s_emp;
    加双引号和不加双引号的区别:
    在Oracle数据库中,查询的结果字段名默认
    为全部大写字母。
    如果需要使用特定的格式(例如包含小写字母)
    就需要把别名用双引号包含。

    6.设置查询结果的显示格式
    column 修改字段显示格式
    简写为col
    语法:
    column/col 字段名 format 格式;
    例如:
    把last_name字段设置为显示15个字符长度。
    col last_name format a15;
    a:代表要处理的数据是字符类型。
    15:要显示的长度。
    字段名不是特指某张表中的某个特定字段。
    而是指查询结果字段。

     注:例题、例题中的表格是上课时插入的表格

    练习题:

    1)查询员工的工资和last_name,对工资进行升序排列
    select salary,last_name
    from s_emp
    order by salary asc;
    2)查询员工的工资和last_name,对last_name进行降序排列。
    select salary,last_name
    from s_emp
    order by last_name desc;
    字符类型根据首个字母的字典顺序。ASCII码排序
    65-90 A-Z 97-122 a-z


    3)查询员工的工资和last_name,先对salary进行降序排列,再对last_name进行升序排列。
    select salary,last_name
    from s_emp
    order by salary desc,last_name asc;
    4)请举例说明空值的排序规则
    空值在排列时视为无限大。
    所以在降序排列中空值排在最前。
    在升序排列中空值排在最后。

    5)查询41号部门员工的信息?;
    select id,last_name,salary,dept_id
    from s_emp
    where dept_id = 41;
    6)查询工资大于1000的员工的信息?
    select id,last_name,salary
    from s_emp
    where salary > 1000;
    7)查询工资大于1000小于1500员工的信息,
    使用两者方式来做?
    a)select id,last_name,salary
    from s_emp
    where salary>1000 and salary<1500;
    b)select id,last_name,salary
    from s_emp
    where salary between 1000 and 1500;
    8)查询41或者42部门员工的信息,
    使用两者方式来做?
    a)select id,last_name,salary
    from s_emp
    where dept_id = 41 or dept_id = 42;
    b)select id,last_name,salary
    from s_emp
    where dept_id in(41,42);

    9)查询last_name包含n的员工的信息?
    select id,last_name
    from s_emp
    where last_name like '%n%';

    10)查询last_name包含n或者N的员工的信息?
    select id,last_name
    from s_emp
    where last_name like '%n%'
    or last_name like '%N%';

    方法二:
    select id,last_name
    from s_emp
    where upper(last_name) like '%N%';

    select id,last_name
    from s_emp
    where lower(last_name) like '%n%';

    upper函数:可以把指定字符串转换成全部大写的形式。

    11)查询last_name第二个字母为g的员工的信息?
    select id,last_name
    from s_emp
    where last_name like '_g%';

    12)查询last_name最后一个字母为o的员工的信息?
    select id,last_name
    from s_emp
    where last_name like '%o';

    13)查询last_name以N开头的员工的信息?
    select id,last_name
    from s_emp
    where last_name like 'N%';

    14)先插入这条数据
    insert into s_emp(id,last_name)
    values(999,'_briup');
    commit;
    然后查询以_开头的员工的信息?
    select id,salary
    from s_emp
    where last_name like 'a_%' escape 'a';
    15)找出部门41中所有经理和部门43中的所有办事员的详细资料
    职称字段为:Title
    经理职称为:Warehouse Manager
    办事员的职称为:Stock Clerk
    select id,last_name,salary,dept_id
    from s_emp
    where dept_id=41
    and title='Warehouse Manager'
    or dept_id=43 and title='Stock Clerk';

  • 相关阅读:
    第一章 初识shiro
    LDAP概念
    css定位
    css随笔1
    自己动手实现信息检索系统
    IntelliJ IDEA和pycharm注册码
    俄罗斯农夫算法
    [NOIP2013]转圈游戏
    [codevs1287]矩阵乘法
    [洛谷1314]无序字母对
  • 原文地址:https://www.cnblogs.com/weixinyu98/p/9934266.html
Copyright © 2011-2022 走看看