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

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

原文地址:https://www.cnblogs.com/lhh-njq-best/p/6548724.html