• SQl数据操作和查询


    概括的内容包括:

    • Oracle数据类型
    • SQL建表和约束
    • SQL对数据删改
    • SQL查询
    • Oracle伪例

     1、首先说一下SQL的语句: 

        在Oracle数据开发中,客户端把SQL语句发送给服务器,服务器对SQL语句进行编译、执行,把执行的结果返回给客户端,Oracle SQL语句有一下命令组成:

        数据定义语句(DDL):create(创建命令)、alter(修改命令)、drop(删除命令)等;

        数据操作语言(DML):insert(插入命令)、update(跟新命令)、delete(删除命令)、select...from update(查询命令); ------数据操作之后需要commit提交才能在前端显示出信息  

        数据查询语言(DQL):基本查询语句、order by子句、group by分组语句;

        事物控制语言(TCL):commit(提交命令)、savepoint(保存点命令)、rollback(回滚命令);

      就我用过的数据库有:SQLServer、MySQL、Oracle,每个数据库都有各自独特的特点和特性。

          

     2、 Oracle数据类型

      Oracle数据库的核心是表,其他数据库需要手动建表,Oracle数据库不需要。Oracle中我们可以常用的几个数据类型:

    类型 含义
    char(length) 存储固定长度的字符串,参数length指定长度,如果存储的长度小鱼length,我们可以使用空格,默认为1,最长不能超过2000字节。
    varchar2(length) 存储可变长度的字符串,length指定该字符串的最大长度,默认为1,最长不超过4000字符。
    number(p,s) 既可以存储浮点型,也可以存储整数,p表示数字最大位数(如果是小数包括整数部分和小数部分和小数点,p默认38位),s指小数位数。
    date 存储日期和时间,存储纪元、4位年、月、日、时、分、秒,存储时间

    下面就是对number类型的实例:

    格式                             输入的数字                      实例存储

    number                      1234.567                       1234.567

    number(6,2)           1234.567                       123.46

    number(4,2)              1234.567                        输入的数字超过指定的精度,数据库不能存储

    对于日期类型,我们可以使用sysdate内置函数可以获取当前的系统日期和时间,返回date类型,用systimestamp函数返回当前日期时间时区。

     3、创建表和约束

     Oracle创建表同SQLServer一样,使用create table命令来完成,创建约束则使用如下命令:

      语法格式:alter table命令

    -------------------------------------------------------

    alter table 表名 add constraint  约束名 约束内容

    -------------------------------------------------------

    无论是创建表还是约束,和sqlServer基本相同,在Oracle中default是一个值,而SQLServer中的default是一个约束,因此Oracle的default设置可以在建表的时候创建.           注意在和专业人士谈论时:建模==建表!

      

    案例1:创建一个学生信息infos表和约束

    create table infos

    (

     stuid varchar2(7) not null,                                      --学号 学号=‘s’+班号+2位序号

     stuname varchar2(10) not null,                             --姓名

     gender varchar2(2) not null,                                  --性别

     age number(2) not null,                                         --年龄

     seat number(2) not null,                                        --座号

     enrolldate date,                                                     --入学时间

     stuaddress varchar2(50) default '地址不详',            --住址

     classno varchar2(4) not null                                   --班号      班号=学期序号+班级序号

    )

    一、

    alter table infos

    add constraint pk_infos primary key(syuid)   

    二、

    alter table infos

    add constraint ck_infos_gender check(gender='男' or gender='女')

    alter table infos

    add constraint ck_infos_seat check(seat>=0 and seat<=50)

    四、

    alter table infos

    add constraint ck_infos_age check(age>=0 and age<=100)

     4、数据操作语言(DML)

      用于对数据库的表中数据进行添加修改删除select for update操作。

     *简单查询

     语法格式:简单查询

    -------------------------------------------------------

    select *(列名表达式) from 表名 where 条件 order by 列名;

    -------------------------------------------------------

    语法解析:

    一、*表示表中的所有列

    二、列名可以选择若干个表中的列名,各个列表中间用逗号隔开

    三、表达式可以是列名、函数、常数等组成的表达式

    四、where子句是查询条件

    五、order by 要求在查询的结果中排序,默认为升序。

     语法格式:根据结果集创建表(将表所有数据给另一个表)

    -------------------------------------------------------

    create table 表2 as select * from 表1;

    -------------------------------------------------------

    语法格式:复制表结构(将表的字段给另一个表)

    -------------------------------------------------------

    create table 表2 as select * from 表1 where 1=2;

    -------------------------------------------------------

    语法格式:delete操作

    -------------------------------------------------------

    delete from 表名 where 条件

    -------------------------------------------------------

    **---------------------------***

    truncate(DDL命令):将表中的所有数据一次性全部删除,数据不能恢复。

    delete(DML命令):删除后可以通过日志文件恢复。

    **---------------------------***

    distinct消除重复行

    将空的字段值改为指定文字:nvl(字段,'未知')

    left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
    right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
    inner join(等值连接) 只返回两个表中联结字段相等的行

     1 - 多表关联 内关联 
     2 select * from student_phone,phone 
     3 where student_phone.phone=phone.id
     4 -- 1.内关联 (丢失不满足的记录条数)
     5 select * from student_phone a'
     6 inner join
     7 phone b on a.phone=b.id
     8 -- 
     9 insert into student_phone values (9,'小成',3);
    10 commit
    11 select * from phone
    12 select * from student_phone
    13 
    14 
    15 select a.stu_name,b.phone_name from student_phone a
    16 inner join
    17 phone b on a.phone=b.id
    18 --测试 
    19 insert into phone values(3,'iphone8(美国总统专用)');
    20 commit
    21 delete from phone where id=3
    22 
    23 -- 2.左关联 (将不匹配其他的数据一起显示,不删除)
    24 
    25 select a.stu_name,b.phone_name from student_phone a
    26 left join
    27 phone b on a.phone=b.id
    28 
    29 -- 改进一下(空值处理)-----改别名:直接空格+中文(相当于省略as)
    30 select a.stu_name,nvl(b.phone_name,'未知') from student_phone a
    31 left join
    32 phone b on a.phone=b.id

    目前就写这些,休息一下,写随笔真累!

  • 相关阅读:
    JSON跨域请求
    2013.9.26 心得体会
    MemCached用法
    使用SQL联合查询来构建临时vo对象的应用
    ubuntu 16.04 安装php 5 6等版本
    mac php版本切换
    windows 查看端口占用
    nginx 反向代理到目录
    linux挂在samba服务器到本地(用于备份文件到nas或者windows的文件服务器)
    ubuntu 加载新硬盘或分区
  • 原文地址:https://www.cnblogs.com/lhh-njq-best/p/6548724.html
Copyright © 2020-2023  润新知