基本SQL,轻松入门 1

数据库基础
DBMS_database management system
       DDL_data definition language  数据定义语言
       Schema 模式
       DML_data manipulation language  数据操作语言
       SQL_structured query language   结构化查询语句
       Metadata元数据
       Transaction事务:
  atomicty原子性,同成功同失败
  comsistency一致性,一个座位不能分配给两个顾客
  isolation隔离性,两个事务并发运行的效果等同于一前一后运行的效果
  durability持久性、事务已经完成,即使系统出现故障,事务结果也不能丢失
事务提交:为保证持久性和原子性,一般以试验的方式完成,并不真正地更新数据库本身
范式
非平凡依赖的定义:A={a1,a2,……},B={b1,b2,……},A à B, 如果 B 中至少有一个不属于 A 的元素 , 称该依赖为非平凡依赖、 (B 依赖于 A,A 函数决定 B)
键码的定义: 如果 A 满足以下条件 , A 是关系(表) ( )R 的键码 :
1)      A函数决定R的所有其他属性
2)      A的任何真子集都不能函数决定R的所有其他属性,也就是说键码必须是最小的
NF_normal form 范式
1NF:行(元组)的分量不可再分
2NF:不允许所有存在的非平凡依赖的左边是键码的真子集,允许传递依赖__也就是说AàB,不允许A的某个真子集AxàB,但是允许AàB,BàC的情况
3NF:2NF的基础上,不允许传递依赖,但是允许BA的真子集的情况、
BCNF:3NF的基础上,不允许非平凡依赖AàB的右边是左边的组成部分、


sqlselect)入门经典^_^原创
一、准备及说明
本文实例均使用oracle10g作为测试数据库,并均能得到预期效果
测试用例在安装并配置好oracle10g的基础上进行
       1、建表并插入测试数据
sql window中输入以下内容创建学生表
-- Create table
create table student
(
  stuid     varchar2(32),
  stuname   varchar2(20),
  stugender varchar2(2),
  stuage    number
)
;
-- Add comments to the columns 
comment on column student、stuid
  is '学生标识';
comment on column student、stuname
  is '学生名字';
comment on column student、stugender
  is '学生性别';
comment on column student、stuage
       is '学生年龄';
-- Create/Recreate primary, unique and foreign key constraints 
alter table student
        add constraint stu_pk primary key (STUID);
在sql window中输入以下内容创建班主任表
-- Create table
create table teacher
(
  teaid     varchar2(32),
  teaname   varchar2(20),
  teagender varchar2(2),
  teaage    number
)
;
-- Add comments to the columns 
comment on column teacher、teaid
  is '教师标识';
comment on column teacher、teaname
  is '教师名字';
comment on column teacher、teagender
  is '教师性别';
comment on column teacher、teaage
  is '教师年龄';
-- Create/Recreate primary, unique and foreign key constraints 
alter table teacher
  add constraint tea_pk primary key (TEAID);
       在sql window中输入以下内容建立两个表的联系(一个班主任对应多个学生)
       -- Add/modify columns 
alter table STUDENT add TEAID varchar2(32);
-- Create/Recreate primary, unique and foreign key constraints 
alter table STUDENT
        add constraint STU_FK_TEA foreign key (TEAID)
        references teacher (TEAID);
        插入测试数据
       insert into teacher values('1','张老师','男',30);
insert into teacher values('2','李老师','女',28);
insert into student values('1','张同学','男',18,'1');
insert into student values('2','李同学','女',20,'1');
insert into student values('3','王同学','女',18,'2');
insert into student values('4','郑同学','男',20,'2');
二、查询语句全面展现
    经过以上的准备,我们可以看看sql(查询)的各种用法了
常用分页语句
Mysqlselect * from tableName limit startrow,perpagesize——startrow:起始行号;perpagesize:每页显示行数。
Oracleselect * from (select a* ,rownum rc from (select * from tableName order by …) a where rs<=endrow) b where rc>=startrow——startrow:起始行号;endrow:结束行号。
select查询语句
请注意这样的事实where后面是一个布尔表达式,为true或为false,要得到预想结果需要在where后面构造一个为true的布尔表达式!!!

1、别名:select stu.stuname as 学生名字,stu.stugender as 学生性别 from student stu
学生名字
学生性别
张同学

王同学

郑同学

李同学


2、运算:select stu.stuname as 学生名字,2007-stu.stuage as 出生年 from student stu
学生名字
出生年
张同学
1989
王同学
1987
郑同学
1989
李同学
1987

3Where子句:
1)可以运用运算符=,<>,(!=),<,>,<=,>=
select stu.stuname as 学生名字,2007-stu.stuage as 出生年 from student stu where stu.stuage=20得到年龄为20的学生的相关信息
学生名字
出生年
王同学
1987
李同学
1987

       2)逻辑运算符:andornot
select stu.stuname as 学生名字,2007-stu.stuage as 出生年 from student stu where stu.stuage=20 and stu.stugender='男'得到年龄为20的男学生的相关信息

学生名字
出生年
李同学
1987
       3)比较前可以运用基本运算符+—×/等进行数值运算
select stu.stuname as 学生名字,stu.stugender as 学生性别 from student stu where stu.stuage-20>=0得到年龄大于等于20的学生的相关信息
学生名字
学生性别
王同学

李同学


       4)字符串比较:><等比较,按字典顺序;like字符匹配比较
              name like ‘张%--姓张的学生
              name like ‘__’ –姓张且名字为三个字的学生(匹配符为下划线)
select * from student where stuname like '张%'
STUID
STUNAME
STUGENDER
STUAGE
TEAID
1
张同学

18
1
select * from student where stuname like '张__'
结果与上同
       5)日期比较
              <意味着之前的年月日或者时间
              >意味着之后的年月日或者时间
4、输出顺序: select * from student order by stuage按照年龄降序排列(默认为升序)
STUID
STUNAME
STUGENDER
STUAGE
TEAID
3
王同学

20
2
2
李同学

20
1
1
张同学

18
1
4
郑同学

18
2
5、消除二义性:属性前面加上表名,表名该字段所属表
       select student.stuname from student

你可能感兴趣的:(sql,oracle10g)