Day37_数据库、select

本文介绍了关系型数据库管理系统的基本概念,包括常见的数据库系统如Oracle、DB2和MySQL等,并详细讲解了SQL语言的使用方法,如数据查询、条件筛选、排序及函数应用等。
DBMS  数据库管理系统
DB    数据库(FILE)

RDEMS 关系型数据库管理系统
RDB   关系型数据库

2.关系型数据库的代表
oracle      甲骨文      50%
    版本: oracle9i   oracle10g   oracle11g
db2         IBM         20%
sqlserver   微软        15%

 开源免费:
mysql     sun(oracle收购了)

3.操作数据库的语言
  SQL  结构化查询语言
  a. select语句  select
  b. ddl语句(数据库定义语言)
     create   drop   alter
  c. dml语句(数据库操作语言)
     insert   delete   update
  d. tcl语句(食物控制语句)
     commit   rollback  savepoint
  f. DCL(数据控制语言)
     grant    revoke
4.要使用服务器上数据库
  telnet 192.168.88.35(oracle,oracle)
  sqlplus(openlab,open123) 或 sqlplus  openlab/open123
  SQL>
  查看数据库中表的结构
  SQL> desc  表名;
  SQL> desc s_emp
 Name					   Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID					   NOT NULL NUMBER(7)
 LAST_NAME				   NOT NULL VARCHAR2(25)
 FIRST_NAME					    VARCHAR2(25)
 USERID 					    VARCHAR2(8)
 START_DATE					    DATE
 COMMENTS					    VARCHAR2(255)
 MANAGER_ID					    NUMBER(7)
 TITLE						    VARCHAR2(25)
 DEPT_ID					    NUMBER(7)
 SALARY 					    NUMBER(11,2)
 COMMISSION_PCT 				    NUMBER(4,2)
 
 表头中每个字段的信息
 NULL? 这个字段上的记录 能不能没有值
 数据类型  number  数字类型
           varchar2 字符串类型
           date    日期类型
5.select语句
  选择:当所有列被选中 部分行被选择
  投影:当所有的行被选中 部分行被选择
  表连接:当查询的数据来于多张表,就需要把多张连接成一张表
select 语句
A.from 子句
  1.从表中查询一个字段
  select 字段名  from 表名;必须有分号
  select salary from s_emp;
  2.从表中查询多个字段
   select 字段名1,字段名2 from 表名;
  3.把s_emp表中的所有数据查询出来;
    *可以替代所有的字段名;
    select id,first_name,last_name,salary,from s_emp; //逻辑清晰,语法比较复杂;
    select * from s_emp;//语法简洁,但是逻辑不清晰。
  4.表中字段的数学运算+ - * 、/
    把每个人的工资+100,之后显示;
     select id ,salary,salary+100 from s_emp;
  5.字段或者表达式的别名
      select id ,salary sal,salary*12 ysal from s_emp;
    一个字段或者一个表达式的别名只能有一个并且处理为大写;
       双引号,可以处理成想要的任何形式“Sal”.
  6.C语言中 双引号表达字符串
       sql如何表达字符串?
          单引号'hello'
      如何拼接字符串? ||  select first_name || '_' || last_name name from s_emp;
    作业在姓名之间拼接个单引号; '''',表示的是单引号;
select first_name || '''' || last_name name from s_emp;
  7.NULL 值的处理
    a.计算每个员工的年薪 需要考虑提成
      1000*12+1000*12*25/100
      select salary*12,salary*12+salary*12*(commission_pct/100) from s_emp;
      NULL 值和任何值做运算结果都是NULL
    b.NULL 值处理函数
      nvl(par1,par2)
      当par1的值为NULL就返回par2的值
      当par1的值不为NULL就返回par1的值
      select salary*12,nvl(salary*12+salary*12*(commission_pct/100),0) from s_emp;
      NULL 要尽早处理
      select salary*12,salary*12+salary*12*(nvl(commission_pct,10)/100) from s_emp;
  8.数据的排重显示  distinct
    select salary from s_emp;
    select distinct salary from s_emp;
    多字段排重
    select distinct 字段1,字段2 from 表名;
    select distinct id,salary from s_emp;
B.where 子句(条件子句)
  1.条件子句
    符合where条件的数据就会被选中,不符合where条件的数据就会被过滤掉
  2.数字类型的条件
    查询工资小于1000的员工  列出id,first_name,salary
    --select id,first_name,salary from s_emp where 1=1;
    --select id,first_name,salary from s_emp where 1=2;
    select id,first_name,salary from s_emp where salary<1000;
  3.找出first_name 叫 Mark的  列出id,first_name,salary
    select id,first_name,salary from s_emp where first_name='Mark';
    对字符串的值进行操作时一定要加单引号
    SQL语句不区分大小写,但字符串的值要区分大小写
  4.where 条件后可以使用的运算符
    where 字段 运算符 值
    > < >= <= !=
  5.sql提供的运算符
    a.表达一个闭区间 [a,b]
      where 字段 between a and b
      求工资在 12000 到 12010员工的id,first_name,salary
      select id,first_name,salary from s_emp where salary between 1000 and 1200;
      求id在 10 到 15 员工的id,first_name,salary
      select id,first_name,salary from s_emp where id between 10 and 15;
    b.表达一个字段的取值在一个列表中 where 字段 in(列表)
      列表就是用逗号隔开的一组值
      找出部门编号 是 31,32,50 的员工的id,dept_id,first_name
      select id,dept_id,first_name from s_emp where dept_id in(31,32,50);
      出现概率高的放前面(提高效率)
    c.模糊查询
      找出所有姓李的人?    where 字段 like '李%';
      找出所有带龙的词?    where 字段 like '%龙_';
      where 字段 like '统配串';
      %   可以代表0-n个任意字符
      _   代表一个任意字符
      查询 first_name 带 a 的
      select first_name from s_emp where first_name like '%a%';
      查询 first_name 第二个字符是a的
      select first_name from s_emp where first_name like '_a%';
      
      desc user_tables;
      select table_name from user_tables;
      select table_name from user_tables where table_name like 'S\_%' escape '\';'
    d.如何判断NULL值
      where 字段 is NULL;
      找出manager_id 是 NULL 的员工的id
      select id,first_name,salary from s_emp where manager_id is null;
  6.sql提供的逻辑运算符
    and
    or
    not
    a.求工资在[1000,1200]人的id,first_name,salary
      select id,first_name,salary from s_emp where salary>=1000 and salary<=1200;
    b.找部门编号在 31 或者 32 或者 50 的人的id,first_name,dept_id
      select id,first_name,dept_id from s_emp where dept_id='31' or dept_id='32' or dept_id='50';
    c.找出提成不是NULL的员工的id,first_name,commission_pct
      select id,first_name,commission_pct from s_emp where commission_pct is not null;
    d.条件的优先级
      select id,first_name,salary from s_emp where salary>1000 and (dept_id=41 or dept_id=42);
C.order by 子句(排序)
  1.order by 一定出现在语句最后
  2.select id,salary from s_emp order by 排序标准 排序方式
    排序方式
     升序 默认的顺序 asc    自然顺序 字典顺序
     降序            desc
     select id,salary from s_emp order by salary asc;
  3.按照manager_id 排序显示 id,manager_id,first_name
    select id,manager_id,first_name from s_emp order by manager_id;--未指明就默认顺序排列
    NULL 在排序中作为最大值来处理
  4.多字段排序
    先按照工资排序 显示 id,salary,first_name 如果工资相同 则按照first_name降序排列
    select id,salary,first_name from s_emp order by salary,first_name desc;
D.单行函数
  1.单行函数 和 组函数 的概念
    单行函数:针对sql影响的每一行数据都做处理,并且每一行都返回一个结果
    select upper(first_name) from s_emp where id=1;
    select upper(first_name) from s_emp where id<1;
    select upper(first_name) from s_emp where id>1;
    组函数:  针对一组数据做处理,最终返回一个结果
    count(first_name)
    select count(first_name) from s_emp where id=1;
    select count(first_name) from s_emp where id<1;
    select count(first_name) from s_emp where id>1;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值