数据库中的sql

  1. 定义表:
    create table 表名(
    列名1 类型 列级约束
    列名2 类型 列级约束
    列名3 类型 【Default 值】 列级约束
    【表级约束】

  2. 举例:create table student(
    stuid int Constraint PK_stu primary key,
    name varchar2(30) not null,
    age Number(3) Constraint AG check(age>10 and age<50),
    ssex varchar2(5) default ‘男’,
    Foreign key(stuid) references 表名(列名)
    )利用Constraint 名字给约束起名字

  3. 约束:
    主键:primary key;若一个表中主关键字有多个列组成,则需要定义为表级约束;
    唯一:Unique;不可以重复,但可以为空
    外键:Foreign key;引用其它表的主键列
    检查约束:check;(用户自定义)
    非空:not null;只能在列级约束
    默认值:default;只能在列级约束

  4. 外键注意事项:
    1.级联删除:删除主表的记录时,同时删除子表的相关联记录Constraint FK Foreign Key() references() On Delete Cascade;
    2.级联设空:删除主表的记录时,同时将子表中相应记录的外键列值设为空;(On Delete Set NULL)

  5. 修改基本表:
    1.增加列:Alter table 表名 Add 列名 类型 约束
    (若是想增加多个列,用括号括起来)
    2.删除列:Alter table 表名 drop Column 列名
    (若想删除多个列,把列名用括号括起来,省略关键字Column)
    3.修改列:Alter table 表名 Modify 列名 类型 约束
    (若是想修改多个列,用括号括起来)
    4.修改列名:Alter table 表名 Rename 原列名 to 新名
    5.增加约束:Alter table 表名 add [约束名] 表级约束
    6.删除约束:Alter table 表名 drop Constraint 约束名
    7.约束生效:Alter table 表名 enable Constraint 约束名
    8.约束失效:Alter table 表名 disable Constraint 约束名

  6. 删除基本表:
    1.Drop table 表名 【Cascade Constraints】
    【Cascade Constraints】表示删除表的同时,删除表的的所有约束

  7. 索引:通过提供一种直接存取的方法来取代默认的全表扫描检索的方法,通过使用索引可以提高改善数据检索性能,可以快速的定位一条数据。(建立索引的目的是为了减少查询的时间,但是会占用空间,并不是越多越好)

  8. 创建索引:
    格式:create [unique][cluster] index 索引名 on 表名(列名1[次序],列名2[次序]。。。)
    注意:索引可以创建在表中的一个列甚至多个列之上,其中的次序指的是ASC(升序)DESC(降序)若是不写 默认ASC unique代表的是唯一索引

  9. 删除索引:
    格式:drop index 索引名

  10. 插入数据:insert into 表名(列名1,列名2…)values(值1,值2…)

  11. 注意事项:
    1.插入的值必须要与列名完全对应
    2.插入时要是不写某个属性值,若果有默认值则直接添默认值,否则设为空
    3.日期型插入用to_date(‘2016-02-25’,‘yyyy-mm-dd’)
    4.可以插入一个子查询的结果

  12. 更新格式:update 表名 set 列名=值…where 条件

  13. 删除格式:delete from 表名 where 条件

  14. 注意事项:更新删除的where后面都可以跟一个子查询

  15. 查询:
    结构:select [ALL||Distinct] 列名 from 表名 where 条件语句 (group by:分组 having 分组后的条件)(order by 排序)
    单表查询:
    数据库中的sql_第1张图片
    1.查询全体学生的学号,姓名
    select stuid,name from student
    2.查询学生的所有信息
    select * from student
    3.查询表中学生姓名,出生日期
    select name,2014-Sage from student
    4.查询表中学生姓名,出生日期(用birth表示)
    select name,2014-Sage birth from Student
    (如果别名中含有空格,则需要用双引号进行包含。)
    5.查询表中学生姓名,‘Year of Birth’,出生日期
    select Sname NAME,‘Year of Birth’ Birth, 2014-Sage Birthday FROM Student;如果需要再查询结果
    中加入字符,可以在目标列表达式中使用字符常量。
    6.输出所在院系sdept,并且用小写字符显示。
    select LOWER(Sdept) 所在学院 from student
    7.查询时候用distinct去除重复的元组;
    select distinct 列名 from 表名
    8.查询所有学生信息并将结果按年龄升序排列, 按姓名降序排列
    select * from student order by age asc,sname desc
    16.where后面的条件(不能使用聚集函数)
    1.确定范围:between and和not between and
    ~查询年龄在20至23岁之间的学生的姓名和年龄:
    select sname,Sage from student where sage between 20 and 23;
    2.确定集合:In 和not in
    ~查询年龄为18或者20的学生的姓名和年龄:select sname,sage from student where sage in(18,20)
    3.字符匹配:Like和not Like:多个字符通配%,一个字符通配_(下划线);
    ~查姓“欧阳”且全名为3个汉字的学生的姓名:
    select sname,sno from student where sname like’欧阳_’
    ~查所有姓刘的学生的姓名、学号和性别:
    select sname,sdept,ssex from student where sname like’刘%’;
    ~注意:如果用户要查询的匹配字符串本身就含有%或_,比如要查名字为DB_Design开头的课程的学分:SELECT Cno, Ccredit from Course where Cname LIKE ‘DB_Design%’ ESCAPE ‘\’;ESCAPE 短语表示换码字符,这样匹配串中紧跟在其后面的字符不再具有通配符的含义,而是取其本身含义,被转义为普通的字符。
    4.多重条件:and和or和not
    5.存在:exists
    17.聚集函数:
    1.Count (([DISTINCT|ALL]<列名>):对一列中的值计数
    2.Count (([DISTINCT|ALL] *):计算记录个数
    3.SUM (([DISTINCT|ALL]<列名>):求一列值的总和
    4.AVG (([DISTINCT|ALL]<列名>):求一列值的平均值
    5.MIN和MAX (([DISTINCT|ALL]<列名>):求一列值的最小值和最小值
    6.注意:当在用聚集函数的时候,一般都要用到GROUP BY 先进行分组,然后再进行聚集函数的运算。运算完后可能要用到HAVING 子句进行判断
    18.where与having的区别:
    1.作用对象不同;
    2.WHERE子句作用于基本表或视图,从中选择满足条件的元组。HAVING短语作用于分组,从中选择满足条件的组
    19.连接查询(等值查询)
    1.查询每个学生的学号,姓名和所选课程号:
    select student.sno,student.sname,sc.cno from student,sc where student.sno=sc.sno
    如果嫌表名太长不好写可以在表名的后面加上一个自定义的名字
    20.自然连接:前提是等值连接,且在目标列去掉重复的属性列
    21.外连接(即使不满足连接条件的元组也需要作为结果输出)
    1.外连接符出现在连接运算符的左边,则称为左外连接
    2.外连接符出现在连接运算符的右边,称其为右外连接
    22.自连接:对同一个表进行操作
    23.嵌套查询:
    1.出现在where子句中;
    查询选修了2号课程的学生姓名:
    select sname from student where sno in(select sno from sc where cno=2)
    2.出现在having中的:
    查询学生平均年龄最小的学院及其学生平均年龄。
    select sdept,avg(sage) from student group by sdept having avg(sage)=(select min(avg(age)) f+om student group by sdept)
    3.出现在from子句中(子查询在from后放做一个表使用):
    查询计算机系年龄小于20岁的学生学号和姓名
    select sno,sname from (select * from student where sdept=‘CS’ where sage<20)
    4.带有比较符的子查询
    5.带有IN,ALL,ANY,BETWEEN AND的子查询
    24.不相关子查询:子查询都在其父查询处理前求解,它的执行不依赖于父查询的任何条件,这类查询叫做不相关子查询。每个子查询仅执行一次,子查询的结果集为父查询的Where、from或Having条件所用。
    25.相关子查询:子查询的执行依赖于父查询的某个条件,子查询不只执行一次。这类子查询的查询条件往往依赖于其父查询的某属性值,称为相关子查询。
    26.集合查询(并操作)union它会自动去除重复记录
    27.集合查询(交操作)intersect
    28.集合查询(差操作)except

你可能感兴趣的:(oracle中sql语句,sql语句)