• SQL学习之增删改查



    注:本文的SQL语法是基于Oracle数据库操作的,但是基本的SQL语法在数据库中应该都是通用的


    数据库

    什么是数据库?什么是表?
    数据库可以理解为图书馆,图书馆里面的书就是数据库中的数据,数据库表就是书架,每个架子都有自己名字(编号),不同的架子放的是不同类型的书,数据库表也一样。

    针对表的操作有很多,可以分为对表本身的操作,包括创建表、删除表、修改表,这类操作称为DDL;还有操作表中的数据,包括插入数据、修改数据、删除数据,这类操作称为DML;还有一类是对前面操作的授权,称为DCL;最重要的是查询表中数据的操作,称为DQL。

    • DDL(data definition language)操作包括:create table、alter table、drop table;
    • DML(data manipulation language)操作包括:insert into、update set、delete from、truncate table;
    • DCL(data control language)操作包括:grant、revoke;
    • TCL(transaction control language)操作包括:commit、rollback;
    • DQL(data query language)操作包括:select;

    数据类型

    Oracle数据库中常用的数据类型大致如下:

    类 型描 述
    char(n)保存固定长度的字符串,n在1-2000之间。
    varchar2(n)保存数字、字母等变长字符串,n在1-4000之间。
    number(m,n)保存数字,是整数或小数。n表示小数长度,整数长度是m-n。
    date保存日期时间类型,不含毫秒。
    timestamp保存日期时间类型,含毫秒。
    clob存放海量文字。
    blob存放海量二进制文件,如图片、电影、音乐等。

    还有其他类型,如long、float、int、rowid(伪列)等。
    注:

    1. oracle数据库的表中的每一行数据都有一个唯一的标识符,或者称为rowid,在oracle内部通常就是使用它来访问数据的。
    2. char是一种固定长度的类型,无论储存的数据有多少都会固定长度,如果插入的长度小于定义长度,则可以用空格进行填充。而varchar2是一种可变长度的类型,当插入的长度小于定义长度时,插入多长就存多长。

    在SQL中没有bool类型,在plsql中有bool类型。

    建表create table

    create  table  表名  (列名1  类型, 列名2  类型....)
    
    • 1

    说明:

    1. “create table 表名(列名 类型)”是固定写法。表名是自己起的,英文开头,可以包含数字,可以包含下划线,表名中不能有空格,不要使用中文做表名。
    2. 表名后面必须跟小括号,里面是列的定义,列名后面是一个类型,中间用空格区分;多个列定义之间使用逗号分割。列名定义规则跟表名一样。
    3. 创建表时,只能执行一次,多次执行会报错“00955 名称已由现有对象使用”。

    eg:创建学生表stu
    在这里插入图片描述

    create table stu(sno number, sname varchar2(32), sage int, sdate date, sincome number(8,2));
    
    • 1

    插入数据insert into

    语法如下:

    insert into 表名(1,列2......)values(1,值2......);
    
    • 1

    说明:

    1. “insert into (…) values (…)”是固定结构,小括号是必须有的。
    2. 第一个小括号中是需要插入的列名,第二个小括号中是需要插入的值。一定要注意的是列名跟值是一一对应的。不仅个数一致,位置也要一致。
    3. 插入的值,必须跟数据类型保持一致:number/int类型就是纯数字,varchar2类型是用单引号引起来;date类型是字符串前面加date;
    4. 被插入的表必须存在,如果不存在,需要create table创建。
    5. 同一条插入语句,重复执行,会插入多条相同的数据。

    eg:向表中插入下述内容
    在这里插入图片描述

    insert into stu(sno, sname, sage, sdate, sincome)values(1,'张三',23,date'1990-02-23', 3000.32);
    insert into stu(sno, sname, sage, sdate, sincome)values(2,'李四',24,date'1989-10-12', 4300.46);
    insert into stu(sno, sname, sage, sdate, sincome)values(3,'王五',25,date'1987-07-03', 4977.58);
    
    • 1
    • 2
    • 3

    查询数据select from

    语法如下:

    select * from 表名;
    select 列名1, 列名2... from 表名;
    
    • 1
    • 2

    说明:

    1. “select … from …”是固定结构,先写select,再写from;
    2. select后面跟着是星号,表示显示所有列;
    3. select后面可以跟具体的列名,多个列名之间使用逗号分割;
    4. from后面跟的是表名;

    修改数据update set

    语法如下:

    update 表名 set 列名1=新值1,列名2=新值2  [where 列名=某值];
    
    • 1

    说明:

    1. “update … set …”是固定结构。
    2. set后面的等号表示把新值1赋给某一列,让该列的值变成新的值;有多个列的值要修改,就写多个等式,中间用逗号分割。
    3. where是可选的,如果没有where条件,意味着对所有行都修改;有where条件,只对满足条件的行做修改。

    eg:按下面要求,修改stu中的数据
    在这里插入图片描述

    update stu set sincome=4000;
    update stu set sincome=4000 where sno=1;
    update stu set sincome=4000 where sno<3;
    update stu set sincome=sincome+1000;
    
    • 1
    • 2
    • 3
    • 4

    删除数据delete from

    语法如下:

    delete  from  表名  [where条件];
    
    • 1

    说明:

    1. 如果不带where条件,则删除表中所有记录;带where条件,则删除符合条件的行。

    eg:按如下要求删除stu表中数据
    在这里插入图片描述

    -- 删除张三
    delete from stu where sno=1;
    -- 删除所有
    delete from stu;
    
    • 1
    • 2
    • 3
    • 4

    备份ctas

    如果对一个表进行备份,或者对表中一部分数据,一部分列备份,就可以使用ctas。
    相当于“文件的另存为”功能。

    语法如下:

    create table 新表名 as select语句
    
    • 1

    eg:
    对stu表备份,新的表名是stu1

    create table stu1 as select * from stu;
    
    • 1

    把stu表的sno、sname、sage三列数据备份到新的表stu2中。

    create table stu2 as select sno, sname, sage from stu;
    
    • 1

    创建一个表stu3,结构跟stu表完全相同,但是没有数据。

    create table stu3 as select * from stu where 1=2;
    
    • 1

    结果插入iis

    查询一个表的内容,把查询结果插入到另一个表中。
    语法如下:

    insert into 表名 select语句;
    
    • 1

    例 :演示iis插入数据。

    insert into stu3 select * from stu;
    
    • 1

    截断表 truncate table

    对于删除整个表的所有数据,delete并不会释放表所占用的空间。
    如果用户确定是删除整表的所有数据,那么使用 truncate table 速度更快。

    一个表可以看做是一张纸,上面有很多数据,使用delete删除相当于使用橡皮擦擦除数据,使用truncate删除相当于换了一张新的纸,非常干净,而且速度快。

    使用delete删除,可以回滚数据;使用truncate删除,不能回滚数据。

    例 :对stu1表进行截断操作。

    truncate table stu2;
    
    • 1

    修改表结构alter table

    主要操作包括增加列、删除列、修改列名、修改列的数据类型。

    • 添加字段
      语法如下:
    alter table 表名 add(列名1 列类型, 列名2 列类型)
    
    • 1

    说明:

    1. 添加列,add后面有小括号,里面是列名和类型;添加多个列,使用逗号分隔;

    例 :在stu表中增加一列sphone,类型是varchar2(11)。

    alter table stu add (sphone varchar2(11));
    
    • 1
    • 删除字段
    alter table 表名 drop column 列名 
    
    • 1

    例 :删除stu表中刚刚添加的sphone列。

    alter table stu drop column sphone;
    
    • 1
    • 修改字段
    -- 列的名字重新命名
    alter table 表名 rename column 旧的列名 to 新的列名
    -- 修改列的类型
    alter table 表名 modify 列名 新的列类型
    
    • 1
    • 2
    • 3
    • 4

    例 :把stu表中的列sincome改为salary。

    alter table stu rename column sincome to salary;
    
    • 1

    添加注释

    comment on table 表名 is '注释内容';
    comment on column 表名.字段名 is '注释内容';
    
    • 1
    • 2

    例 :给stu表添加表注释和字段注释,并在plsql developer中点击右键“描述”查看注释。

    comment on table stu is '学生表';
    comment on column stu.sno is '学号';
    comment on column stu.sname is '学生姓名';
    
    • 1
    • 2
    • 3
  • 相关阅读:
    卷积神经网络-卷积层
    【Linux】2022 安装jdk教程,超级详细
    不是说人工智能是风口吗,那为什么工作还那么难找?
    vscode 常用插件
    计算机毕业设计(附源码)python迎新系统
    Django 路由系统详解
    面试官:你了解git cherry-pick吗?
    java计算机毕业设计古玩玉器交易系统源码+mysql数据库+系统+lw文档+部署
    Nginx(四)
    STM32WL开发之易智联LORA评估板上定时器TIMER的配置与应用
  • 原文地址:https://blog.csdn.net/David_house/article/details/134386472