sql语句之where子句

演示:要求显示first_name 是Carmen的员工,列出id  first_name salary 

select id, first_name, salary from s_emp where first_name='Carmen'

图片 1

注意:一定要加’ ‘代表这是字符串值

5.4 多列排序
  select id,first_name,salary from s_emp
      order by salary;

    order by 排序标准1 排序方式,排序标准2 排序方式
  select id,first_name,salary from s_emp
      order by salary,id desc;
    -- 多列排序时,每一个排序标准的排序方式是自己定义的

 5.5 排序时,默认按照最大值处理
   -- 根据manager_id排序,列出员工的信息
    select id,first_name,manager_id from s_emp
        order by manager_id desc;

(2)显示员工salar  dept_id;

  1. order by子句

条件优先的问题  要优先的部分加括号

3.3 列出表中全部字段
  --
  select id,last_name,first_name,userid,..... from s_emp;
  -- 使用 * 代替所有字段
  select * from s_emp;

3.4 算数运算   一般指的是数字类型
  +  -  *   /  
  -- 列出员工的信息,包括编号、名字、工资、年收入
  12*salary + 1000
  select id,first_name,salary,12*salary+1000 from s_emp;

3.5 字段或表达式 命名 别名
  3.5.1 语法
   字段或表达式 [as] 别名
   select id,first_name as name,salary,
       12*salary+1000 yearsal  from s_emp;
  3.5.2 使用 "" 
    -- 屏蔽特殊字符或关键字等
    select id,first_name as name,salary,
       12*salary+1000 "year sal"  from s_emp;
    -- 大小写敏感
    select id,first_name as name,salary,
       12*salary+1000 "YearSal"  from s_emp;

演示:写程序查询,把s_emp表中id  first_name salary  显示;要求salary在[1450,2500 ] 中。

select id, first_name, salary from s_emp where salary between 1450 and 2500

图片 2

      注意:不可以把2500和1450调换位置,编译不会有错,但逻辑有错)

  使用函数 nvl 处理NULL值
  nvl(par1,par2) : 当par1不为空,返回par1
                            放par1为空,返回par2
  nvl(12*salary*(1+commission_pct/100),12*salary)
  12*salary*(1+nvl(commission_pct,0)/100)

  select id,first_name,salary,
      12*salary*(1+nvl(commission_pct,0)/100) as yearsal
         from s_emp;

现在的登录都是把信息存在数据库,然后把输入的与数据库内容进行匹配,一样就登录成功,否则不成功。验证码是为了防止暴力破解,因为计算机能够自动匹配           密码,但是不能识别图片上的字母,只有人能识别,所以匹配的速度会减慢。还有的会记录登录IP,如果IP频繁变化就会进行提示。还有银行会限制输入次数。

  1.4.2 远程登录
    第一步:远程登录服务器
        telnet  ip
        用户名:
        密码:

    第二步:使用sqlplus工具
      sqlplus
      输入用户名:
      输入密码:

    现场班:
    telnet 172.60.5.80     或172.60.5.81
    用户:oracle
    密码:   oracle

    sqlplus
    输入用户名: openlab
    输入密码: open123

    SQL>
    sqlplus命令:可以不以分号结尾
    sql语句: 必须以分号结尾(学习的内容)

(2)写一个查询,把s_emp表中部门标号是31或者32或者50 部门的员工id first_name  dept_id显示出来(5.6.2里的in(。。,。。,。。))

select id, first_name, dept_id from s_emp where dept_id-31 or dept_id-32 or dept_id=50

图片 3

这里三个都是等价的,不存在顺序问题。

  • >  的对立面是  <=
  •  <  的对立面是  >=
  •  =  的对立面是  !=   ^=   < >  (都是不等于)
  •  between a  and  b  的对立面是  not between  a  and  b
  •  in  的对立面是  not  in
  •  like  的对立面是  not like
  •  is  null  的对立面是  is not  null(只有最后一个不用注意空值,上面的都要注意空值)

3.select..from语句
select 字段列表 from 表名;
3.1 列出表中一个字段
select 字段名 from 表名;
-- 列出所有员工的工资
select salary from s_emp;

演示:写一个查询,把s_emp表中部门标号是31或者32或者50 部门的员工id first_name  dept_id显示出来

select idm first_name, dept_id from s_emp where dept_id in(31, 32, 50)

 图片 4

Name:表中的字段名
Null? 该字段是否允许为空
NOT NULL:不允许为空
Type: 字段的数据类型
number(p,s) 数字类型
p: 有效数字的位数(从第一个非零数字开始)
1<=p<=38 默认38
s: 精度
-84<=s<=127
number ---> number(38,0)
number(p) ----> number(p,0)
number(p,s)
varchar2(n) 变长字符串 n不能省略 1~4000bytes
char(n) 定长字符串 n默认为1 1~2000bytes

where  字段  in(值1,值2,值3)

这个字段的值等于其中的一个值(只要有一个等于就返回), 交换值的顺序可能有影响,也可能没有影响。若值的概率都一样就没有影响(就按一个规律写(比如从小到大),这样不容易遗漏)。若不一样,则把概率高的值放在前面(人为的),这样查询效率高(因为每个数据都要挨个和给的值比较,只要有一个一样就返回)

3.6 sql中的字符串
3.6.1 字符串的表示方式
单引号:''
'a' 'Hello world'
3.6.2 字符串的拼接
||
-- 把员工的first_name和last_name拼接起来
select id,first_name||last_name as name from s_emp;
-- 把员工的first_name和last_name之间拼接一个 .
select id,first_name||'.'||last_name as name
from s_emp;
-- 把员工的first_name和last_name之间拼接一个 '
使用转义字符:'
select id,first_name||''''||last_name as name
from s_emp;

       要求部门标号为41的员工,或者为42的员工里工资大于1000的

select salary, dept_id from s_emp where salary>1000 and (dept_id=41 or dept_id=42)

图片 5 

3.2 列出表中的多个字段
select 字段名,字段名,.... from 表名;
-- 列出员工的编号、名字、职位、工资
select id,first_name,title,salary from s_emp;

表达一个闭区间[a , b] 

where  字段  between a  and  b ;  (字段在闭区间a到b内)

a  b的顺序不能错

  1. where子句
    select ...
    from ..
    where 条件;
    4.1 作用
    根据条件对表中的数据进行筛选,挑选出符合条件的行
    4.2 数字类型的条件
    -- 列出工资大于1400的员工的信息
    select id,first_name,salary from s_emp
    where salary>1400;
    4.3 字符串类型的条件
    -- 列出名字为'Ben'的员工的信息
    select id,first_name,salary from s_emp
    where first_name = 'Ben'; -- 有一行结果
    select id,first_name,salary from s_emp
    where first_name = 'ben'; -- 没有结果
    -- sql中没有 ==
    -- sql中不区分大小写,但是字符串的值是区分的
    4.4 比较运算符
    > < >= <= = !=(<> ^=)
    4.5 sql提供的运算符
    4.5.1 表示一个闭区间 [a,b]
    between a and b
    -- 列出工资在[1100,1550] 之间的员工的信息
    select id,first_name,salary from s_emp
    where salary between 1100 and 1550;

    4.5.2 表示一个列表
    in(值1,值2,...)
    address in('北京','上海','广州')
    -- 列出部门编号为 31,42,50的员工的信息
    select id,first_name,dept_id from s_emp
    where dept_id in(31,42,50);

    4.5.3 模糊查询
    like '包含通配符的字符串'

      通配符:
      %: 任意长度的任意字符
      _:  一位任意字符
    
      StuName  like '李_%'
    
      -- 列出first_name首字母为'M'的员工的信息
      select id,first_name from s_emp
        where first_name like 'M%';
      -- 列出first_name第二个字母为'a'的员工的信息
      select id,first_name from s_emp
        where first_name like '_a%';
    
      user_tables: 数字字典 保存当前用户的所有表的信息
      desc user_tables;
      -- 列出user_tables中以'S_'开头的表的信息
      select table_name from user_tables
             where table_name like 'S_%';
      -- 使用转义字符  escape
      select table_name from user_tables
             where table_name like 'S_%' escape '';
    

    4.5.4 空值的判断
    is null

    -- 列出manager_id为空的员工的信息
    select id,first_name,title from s_emp
         where manager_id = null;
    select id,first_name,title from s_emp
         where manager_id != null;
       -- 使用=或!=判断null值,结果永远为假
    
     select id,first_name,title from s_emp
         where manager_id is null;
    

常见的运算符

= 等于   != 不等于    >大于   < 小于    <= 小于等于   ................

  1. 数据库介绍
    1.1 数据库简介
    1.1.1 数据管理技术的发展
    人工管理阶段:20世纪50年代中期之前

    文件管理阶段:20世纪的50年代末期到60年代中期
    缺点:数据冗余
    数据的不准确
    数据之间的联系弱
    数据库管理阶段:
    数据库技术诞生的三大标志性事件:
    1968年,IBM公司---> IMS
    1969年,DBTG发布了一系列的报告---> 标准和规范
    1970年,IBM的研究员E.F.Codd 发表了一系列论文
    提出了关系模型
    特点:采用复杂的结构化的数据模型
    最低的冗余度
    数据完整性
    数据库系统为用户提供了方便的接口
    控制功能:
    并发控制
    数据库的恢复
    安全性
    系统更加灵活
    信息处理方式不在以程序为中心,而是以数据为中心

    1.1.2 和数据库相关的几个术语
    数据(data):数据库存储的基本对象,包括文字、图形、声音、视频等
    数据库(database):长期存储在计算机内、有组织、可共享的大量数据的集合
    数据库管理系统(DBMS):是位于操作系统和用户之间的一层应用程序,科学的组织、存储数据,高效的获取和维护数据
    数据库系统(DBS): 由数据库、数据库管理系统、应用程序和数据库管理员(或用户) 组成的系统。
    数据库管理员: DBA

    1.1.3 关系数据库
    用二维表保存数据的数据库
    表头 字段


    字段值

条件连接符号

  • and  逻辑与
  • or   逻辑或
  • not  非
  1. select语句
    2.1 几个概念
    选择:选中部分行,全部列
    投影:选中全部行,部分列
    表连接:需要的数据来自于多张表
    2.2 select语句的子句
    基本的查询语句: select..from
    where子句
    order by子句
    单行函数
    表连接
    组函数和分组
    子查询

NULL值的判断

where  字段  is NULL ;

3.8 排重 distinct
-- 列出员工的职位
select distinct title from s_emp;
-- 多列排重
select distinct title,dept_id from s_emp;

字符串条件的表达

4.6 sql中的逻辑运算符
and or not
-- 使用and改写 between and 案例
列出工资在[1100,1550]之间的员工的信息
select id,first_name,salary from s_emp
where salary between 1100 and 1550;
select id,first_name,salary from s_emp
where salary>=1100 and salary<=1550;

演示:列出每个员工的id 和salary   要求显示符合salary等于1400的员工

select id, salary from s_emp where salary=1400

图片 6

        date    日期

演示:查询s_emp表中first_name,找出所有带a(小写a)的

select first_name from s_emp where first_name like '%a%'

图片 7

 

数据库中有一张表user_tables(数据字典,存的都是大写)存了所有表的信息。例如s_emp  s_dept 等

desc user

图片 8

1.5 描述表结构
sqlplus命令:desc
desc 表名[;]
desc s_emp;

本文由金沙官网线上发布于数据库,转载请注明出处:sql语句之where子句

您可能还会对下面的文章感兴趣: