• 数据库(主键外键、子查询)


    1.主键

    数据库主键是指表中一个列或列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可强制表的实体完整性。当创建或更改表时可通过定义 PRIMARY KEY约束来创建主键。一个表只能有一个 PRIMARY KEY 约束,而且 PRIMARY KEY 约束中的列不能接受空值。由于 PRIMARY KEY 约束确保唯一数据,所以经常用来定义标识列。

    主键的作用

    主键的主要作用如下:

    1)保证实体的完整性;

    2)加快数据库的操作速度;

    3) 在表中添加新记录时,数据库会自动检查新记录的主键值,不允许该值与其他记录的主键值重复;

    4) 数据库自动按主键值的顺序显示表中的记录。如果没有定义主键,则按输入记录的顺序显示表中的记录。

     主键具有的特点:唯一性、非空性。

    设置主键语句示例:

    code int primary key,   主键不能为空,不能重复,确保唯一性

    设置自增长主键语句示例:

    code int primary key identity(1,1)   从1开始,每次增长1,添加values时不用添加此列

     

    设置外键:

          在要设置外键的表上右键,选择设计,在需要设置外键的列名前右键,如下图:

    选择关系单击,出现对话框,单击添加,单击表和列规范后面的省略号,如下图:

    在出现的界面做出如下操作:

    点击确定,再点击确定,操作成功。

    2.子查询,又叫做嵌套查询。

             将一个查询语句做为一个结果集供其他SQL语句使用,就像使用普通的表一样,被当作结果集的查询语句被称为子查询。

    子查询有两种类型:

    一种是只返回一个单值的子查询,这时它可以用在一个单值可以使用的地方,这时子查询可以看作是一个拥有返回值的函数;

    另外一种是返回一列值的子查询,这时子查询可以看作是一个在内存中临时存在的数据表。

    先建如下图的表并添加内容

    开始如下的子查询:

    --语文成绩前五名的所有信息及班主任
       select top 5 code,name,sex,yuwen,shuxue,yingyu,(select boss from banji where banji.bcode=grade.bc)as'班主任',(select banji from banji where banji.bcode=grade.bc)as '班级'from grade
       --查看英语成绩最大的人所在的班级
      select banji from banji where bcode=(select bc from grade  where yingyu=(select MAX(yingyu) from grade)) 
      --按照数学成绩排序(由高到低)后6/7/8名人员的所有信息
      select top 3 code,name,sex,yuwen,shuxue,yingyu,(select banji from banji where banji.bcode=grade.bc)from grade where code not in (select top 5 code from grade order by shuxue desc) order by shuxue desc
      --分页查询,要求一页给显示5条数据
      --第一页
       select top 5 code,name,sex,yuwen,shuxue,yingyu,(select banji from banji where banji.bcode=grade.bc) as '班级'from grade
      --第二页
      select top 5 code,name,sex,yuwen,shuxue,yingyu,(select banji from banji where banji.bcode=grade.bc) as '班级'from grade where code not in(select top 5 code from grade)
      --第三页
       select top 5 code,name,sex,yuwen,shuxue,yingyu,(select banji from banji where banji.bcode=grade.bc) as '班级'from grade where code not in(select top 10 code from grade )
       --第四页
      select top 5 code,name,sex,yuwen,shuxue,yingyu,(select banji from banji where banji.bcode=grade.bc) as '班级'from grade where code not in(select top 15 code from grade )
       --第五页
       select top 5 code,name,sex,yuwen,shuxue,yingyu,(select banji from banji where banji.bcode=grade.bc) as '班级'from grade where code not in(select top 20 code from grade )
       --总共有几页????
    select CEILING( COUNT(*)/5.0) from grade
    --查询二班里的语文成绩大于85的人的所有信息
    select  code,name,sex,yuwen,shuxue,yingyu,(select banji from banji where banji.bcode=grade.bc) as '班级'from grade where code in(select code from grade where yuwen>85 and bc=(select bcode from banji where banji='二班' ))
  • 相关阅读:
    明明已经include_once() 但还是报错Class 'XXXXXControllerTOPData' not found
    dell U2515H 2k显示器黑屏问题,dp线问题。
    centos7.4 php5升级到php7
    thinkphp批量插入 更新sql
    查询速度慢了10倍,查询条件类型不对,字符串当做数字类型。
    margin-left:auto;margin-right:auto; 不起作用的原因
    jquery 查找元素,id,class
    php分割url,获取参数query
    阿里云服务器删除日志的方法,查看有哪些大文件
    sql优化 分字段统计查询
  • 原文地址:https://www.cnblogs.com/zblc2016/p/5831015.html
Copyright © 2020-2023  润新知