C++学习笔记day62-----oracle-select...from...where...order by

1、数据库的介绍
1.1、数据库简介
1.1.1、数据处理技术的发展
人工管理阶段: 20世纪50年代中期之前
以科学计算为主
批处理方式
文件系统阶段: 20世纪50年代末~60年代中后期
缺点: 数据冗余
数据不一致
数据联系弱
数据库阶段: 20世纪60年代末~至今
大三标志性:
1968年,IBM公司推出了 IMS
1968年,DBTG给出了一系列报告,给出了数据库领域的标准和规范
1970年,IBM公司的研究员,E.F.Codd 发表了大量论文,首次提出关系性数据库的概念。
特点:
采用复杂的结构化的数据模型
数据库系统为用户提供了方便的用户接口
数据库控制功能:并发控制、数据库恢复、数据的完整性(准确)、安全性。
系统更为灵活
信息处理方式不再以程序为中心,而是以数据为中心。

    1.1.2、数据库技术的几个术语
        数据(Data):数据库中的存储对象,包括文字、图形、视频、音频
        数据库(DataBase):是长期存储在计算机内、有组织、可共享的大量数据的集合。
        数据库管理系统(DataBase Manager System): 处于用户和操作系统之间的一层数据库软件
                                                 科学的组织和存储数据,高效的获得和维护数据。
        数据库系统(DBS):是指在计算机系统中引入数据库后的系统构成的。
                        由数据库、数据库管理系统(及其开发工具)、应用系统和数据库管理员(DBA)构成。
    1.1.3、关系型数据库
        用二维表保存数据的数据库
        表头、行、列、字段、字段的值
1.2、主流的关系型数据库产品
    商业型
    Oracle      Oracle(甲骨文) 10g
    DB2         IBM
    SQL server  微软
    开源:
    Mysql       Oracle

1.3、SQL语言
    SQL(Structured Query Language):结构化查询语句
    SQL是在关系型数据库上执行数据操作、检索以及维护使用的标准语言,可以用来查询数据、操作数据、定义数据,控制数据等。
    SQL分为:
        DQL(数据查询语句):select
            用来从数据库中查询需要的数据。使用最广泛、语法最复杂的语句。
        DML(数据操作语句):insert delete update
            用来改变数据库表中的数据。
        DEL(数据定义语句):create drop alter
            用来创建、删除、更改数据库对象
        TCL(事务控制语句):commit rollback savepoint
            用来维护数据库中数据的一致性
        DCL(数据控制语句):grant revoke create user
            用于执行权限的授予和回收,创建用户等。
1.4、运程登入
    1.4.1、开发工具
        sqlplus:命令提示符下的工具
        Oracle sql developer: 图形化的工具
    1.4.2、远程登入的步骤
        1)登入服务器
            telnet ip
            login:
            password:
        2)登入服务器上的数据库
            sqlplus:
            enter user-name:
            enter password:
        成功:
            SQL>
1.5、查看表结构
    语法:
        desc 表名[;]    --sqlplus命令   
                        --语法中的[]表示其中的内容是可选项
    --查看员工表的表结构
    desc s_emp;
    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)

    Name:字段名
    Null:是否允许为空
        NOT NULL:不允许为空
    Type:数据类型
        NUMBER(p,s) --数值类型
            p:  1<=p<=38    默认38  有效位数
            s:  -84<=s<=127 默认0   精确到小数点后几位
            有效位:从左边第一个非0数字开始的位数
            s的情况:
                s>0:精确到小数点后s位,并进行四舍五入,然后检查有效位是否<=p
                s<0:精确到小数点前|s|位,并四舍五入,然后检查有效位是否<=p+|s|
                s=0:整数
        VARCHAR2(n) --字符串类型    变长字符串 1~4000Bytes  查询效率低,占用空间小  没有默认
        CHAR(n)     --字符串类型    定长字符串 1~2000Bytes  查询效率高,占用空间大  n默认为1
        DATE        --日期类型      

2、select语句
2.1、三个概念
选择:部分行、全部列
投影:全部行、部分列
表连接:查询的数据来自于多张表时,需要把多张表关联起来,再进行查询。
2.2、select语句
1) 基本查询语句
2) where子句
3) order by子句
4) 单行函数
5) 多表查询
6) 组函数和分组
7) 子查询
3、基本查询语句
select … from …;
3.1、查询一个字段
select 字段名 from 表名;
–列出所有员工的工资
select salary from s_emp;
3.2、查询多个字段
select 字段名1,字段名2,… from 表名;
–查询员工的编号、名字和工资
select id,first_name,salary from s_emp;
3.3、查询表中的所有字段
select 字段列表 from 表名;
字段列表用 * 代替
select * from s_emp;
3.4、表中字段的算数运算 一般指的是数值类型
+ - * /
– 列出员工的年收入
select id,first_name,14*salary + 1000 from s_emp;
3.5、字段或表达式的别名
语法:
字段或表达式[as]别名
–为字段和表达式命名别名
select id,first_name,14*salary+1000 as “year salary” from s_emp;
select id,first_name,14*salary+1000 “year salary” from s_emp;
–使用双引号把别名括起来,就可以使用关键字,别名变为大小写敏感
3.6、oracle中的字符串
3.6.1、字符串的表示方式
使用单引号,比如:’a’、’Hello World!’
3.6.2、字符串的拼接
||–字符串的拼接符号
‘Hello’||’World’
–把员工表中的first_name和last_name拼接起来
select first_name||’ ‘||last_name name from s_emp;
–把员工表中的first_name和last_name拼接起来,中间加入单引号
‘作为SQL中的转意字符
select first_name||””||last_name name from s_emp;
–列出员工的年收入,加上提成
select id,first_name,(14*salary+1000)*(1 + nvl(commission_pct,0)/100) “year salary” from s_emp;
–NULL值出现在表达式中,会造成表达式的结果为NULL。
处理NULL值的函数: nvl
nvl(par1,par2):如果说第一个参数不为空,返回par1;如果第一个参数为空,返回par2。
par1,par2的数据类型可以是任意类型,但是必须相互匹配。
3.8、排重显示
可以使用 distinsct 去掉查询结果集中的重复行
–列出所有的职位
select distinct title from s_emp;
–多列排重
select distinct title,dept_id from s_emp;

4、where子句
4.1、作用
根据条件,从表中筛选数据行。符合条件的行被挑选出来,不符合条件的行被过滤掉。
select 字段列表 from 表名 where 条件;
4.2、数值类型的条件
–列出工资高于1500的员工的编号,名字和工资
select id,first_name,salary from s_emp where salary>1500;
4.3、字符串类型的条件
–列出名字为’Ben’的员工的信息。
select id,first_name,salary from s_emp where first_name = ‘Ben’;
注意:sql中不区分大小写,但是字符串类型的值是区分的。
sql中没有==符号
4.4、oracle中的比较运算符

< >= <= !=(<>、^=)
4.5、sql提供的运算符
4.5.1、表示一个闭区间
字段 between par1 and par2
–列出工资在[1100,1450]范围内的员工的信息
select id,first_name,salary from s_emp where salary between 1100 and 1450;
4.5.2、表示一个列表
字段名 in(值1,值2,…)
–列出部门编号为31 35 41 45 50
select id,first_name,dept_id,salary from s_emp where dept_id in(31,35,41,45,50);
4.5.3、模糊查询
学生名中包含’龙’的学生的信息
like ‘模式’
模式中可以包含通配符:
%:匹配任意长度的任意字符
_:匹配一个任意字符
–列出员工的first_name包含’a’的员工
select id,first_name,salary from s_emp where first_name like ‘_a%’;
–user_tables:数字字典 保存当前用户的所有标的信息,由系统进行管理,用户只有查看的权限
select table_name from user_tables where table_name like ‘%_%’ escape ‘\’;
使用escape制定转意字符
where 字段 like ‘模式’ escape ‘转意字符’
4.5.4、NULL值的判断
–列出领导编号为NULL为员工的信息
select id,first_name,MANAGER_ID from s_emp where MANAGER_ID=NULL;
–NULL的判断不能使用比较运算符。
select id,first_name,manager_id from s_emp where manager_id is NULL;
4.6、sql中的逻辑运算符
与 或 非
and or not
4.6.1、使用逻辑与改写闭区间的案例
select id,first_name,salary from s_emp where salary>1100 and salary<1500;
4.6.2、使用逻辑或改写列表的案例
select id,first_name,salary from s_emp where dept_id=31 or dept_id=35 or dept_id=50;
4.6.3、对立面
<=
< >=
= !=
between par1 and par2 not between par1 and par2
in not in /注意NULL/
like not like
is null is not null

        select id,COMMISSION_PCT from s_emp where COMMISSION_PCT is not NULL;

5、order by子句
5.1、order by子句的位置和作用
select 字段列表 from 表名 where 筛选条件… order by 子句;
order by 在一条select语句的最后,对结果集进行排序.
语法:
order by 排序标准 排序方式[,排序标准 排序方式,…]
排序标准值得是用于排序的字段或表达式
其中,排序方式有两种:
asc: 升序 缺省方式
desc: 降序
5.2、对工资进行降序排序,显示id,first_name,salary
select id,first_name,salary from s_emp where 1=1 order by salary desc;
5.3、多列排序
select id,first_name,salary from s_emp where 1=1 order by salary desc,id;
5.4、排序时NULL处理
select id,first_name,salary from s_emp where 1=1 order by manager_id;
排序时,默认把NULL值作为最大值处理。

猜你喜欢

转载自blog.csdn.net/displaymessage/article/details/80917016