• follow me learning sqlserver transql


    create DATABASE 教务管理系统
    on (
    name=教务管理系统_data,
    filename='E:sql教务管理系统_data.mdf ',
    size=5mb,
    maxsize=20mb

    )
    log on(

    name=教务管理系统_log,
    filename='E:sql教务管理系统_log.ldf',
    size=2mb,
    maxsize=10mb


    )


    create database myTest
    on (
    name=myTest_data,
    filename='E:sqlmyTest_data.mdf ',
    size=5mb,
    maxsize=20mb

    )
    log on(

    name=myTest_log,
    filename='E:sqlmyTest_log.ldf',
    size=2mb,
    maxsize=10mb


    )


    <创建数据库快照》
    create database student_info
    on
    (name=教务管理系统_data,filename='E:sql教务管理系统_data_snop.mdf '),
    (name=shuju,filename='E:sql教务管理系统_data_snop2.mdf ')

    as snapshot of 教务管理系统

    《/创建数据库快照>


    《还原数据库》
    Restore database 教务管理系统
    from database_snapshot ='student_info'

    《?还原数据库》


    《创建表>
    use mysql
    create table meng
    (userNo int identity not null,
    username nvarchar(10) null,
    pohoto image null,
    birthday dateTime null
    )


    use myTest
    create table meng
    (userNo int identity not null,
    username nvarchar(10) null,
    pohoto image null,
    birthday dateTime null
    )

    </创建表>

    <创建临时表>

    <创建本地临时表>
    create table #tempLocal
    (
    name1 varchar null,
    age int null


    )


    可查询
    select * from ##tempLocal

    </创建本地临时表>

    <创建全局临时表>
    create table #tempLocal
    (
    name1 varchar null,
    age int null


    )


    可查询
    select * from ##tempLocal

    </创建全局临时表>

    </创建临时表>


    将列设为标识字段将不需要插入该列,系统会自动生成记录,通过管理器设置
    <创建表>
    create table mytest2
    (
    id int primary key identity(3,1),--主键,自动+1 ,初始值为3
    name varchar(20) unique not null,--不允许重复,不允许为空
    Age tinyint,
    notetime smalldatetime default getdate()
    )
    </创建表>
    <更改数据表的结构>
    alter table mytest2

    alter COLUMN [notetime] smalldatetime not null

    修改字段:
    ALTER TABLE [表名] ALTER COLUMN [字段名] NVARCHAR (50) NULL

    重命名表:(Access 重命名表,请参考文章:在Access数据库中重命名表)
    sp_rename '表名', '新表名', 'OBJECT'

    </更改数据表的结构>

    <对数据表的重命名>
    sp_rename 'mytest2', 'mytest'
    </对数据表的重命名>

    <数据表中增加字段>
    alter table mytest2
    add sex nvarchar(5) null
    </数据表中增加字段>

    <增加数据类型>
    表->可编程性-》类型->用户自定义数据类型
    </增加数据类型>

    <三张表的创建>
    1.
    create table classInfo
    (
    className nvarchar(20) null

    )


    2.
    create table GradeInfo
    (
    stuNo nvarchar(20) primary key not null,
    id int identity(1,1),
    chineseGrade int null,
    java int null,
    math int null,
    english int null


    )

    3.
    create table stuInfo2
    (
    stuNo nvarchar(20) primary key not null,
    id int identity(1,1),
    username nvarchar(20) null,
    sex varchar(5) null,
    birthday date null,
    class nvarchar(20) null


    )

    </三张表的创建>

    <select>

    select * from tablename where a and b or c
    select * from tablename where name like'x%'通配符以x开头
    select * from tablename where name like '%x'

    <排序>
    SELECT * from myTest.dbo.mytest2 order by Age desc

    SELECT * from myTest.dbo.mytest2 order by Age asc,id desc 先按照年龄按升序,年龄相同然后以id降序排列
    SELECT * from myTest.dbo.mytest2 order by Age ,id desc 先按照年龄按降序,年龄相同然后以id降序排列
    </排序>


    select stuNo , max(english),AVG(java) from myTest.dbo.GradeInfo group by rollup (java,stuNo ,id ) having java>90 order by id desc

    select * from stuInfo where class in('软工11001班','软工11002班')

    </select>

    <group by>
    select AVG(Age),name from myTest.dbo.mytest2 group by rollup (name)
    </group by>

    <having>
    select max(Age),AVG(Age) ,name from myTest.dbo.mytest2 group by rollup (name,Age) having Age>20
    </having>


    <where>
    where 后+集合函数 是先where 后集合,所以where AVG(COLNUM)是错的,where 后分组的的,先where后统计
    </where>

    <grouping>
    获取产生的空值
    select max(Age) ,GROUPING(Age) S1 from myTest.dbo.mytest2 group by rollup (Age )
    </grouping>


    <compute >
    use myTest

    select username,stuNo from stuInfo group by username,stuNo compute count(username )
    </compute>


    <内连接查询 内连接把两个表中的数据连接生成第三个表,在第三个表中仅包含那些满足连接条件的数据行。
    在连接中使用inner join 连接运算符,如果在Join关键字前面没明确指定连接类型,那么默认的连接类型是内连接>

    use myTest

    select a.username as'姓名' from stuInfo a inner join GradeInfo b on a.stuNo=b.stuNo on b.java >85


    </内连接查询>


    <外连接查询 在外连接中,不仅包括那些满足的条件的数据,而且某些不满足条件的数据也会显示在结果集中。
    也就是说,外连接中只限制其中一个表的数据行,而不限制另外一个表中的数据,有三种方式:
    left outer join --左连接是对连接条件中左边的表不加限制
    right outer join--右连接是对连接条件中右边的表不加限制
    full outer join--全连接是对连接条件中左右两边边的表不加限制

    >
    <left outer join>
    select a.username as'姓名' ,b.stuNo as '成绩学号' from stuInfo a left outer join GradeInfo b on a.stuNo=b.stuNo and b.java >85

    </left outer join>


    <right outer join>
    select a.username as'姓名' ,b.stuNo as '成绩学号' from stuInfo a left outer join GradeInfo b on a.stuNo=b.stuNo and b.java >85

    </right outer join>


    <full outer join>
    select a.username as'姓名' ,b.stuNo as '成绩学号' from stuInfo a full outer join GradeInfo b on a.stuNo=b.stuNo and b.java >85

    </full outer join>


    </外连接查询>


    <子查询>

    select username from stuInfo where class=(
    select className from classInfo where className='软工11002班' //clasa后面是'=',所以子查询(select className
    from classInfo where className='软工11002班')
    返回的必须是一个值,不能是多个值,还有>,<也是
    )

    select username from stuInfo where class in(
    select className from classInfo //in后面是个集合
    )


    <exists 如果内层的查询结果不为空,则外层的where 的子条件为ture 即第一个where查询的条件为真,相当于select class from stuInfo,否则第一个where查询的条件为假>

    select class from stuInfo where exists(
    select className from classInfo
    )


    select stuNo from stuInfo where exists(
    select * from GradeInfo
    )


    </exists>

    </子查询>

    <联合查询>
    <存储查询结果>
    select class into class from stuInfo where username='孟志军'
    </存储查询结果>

    <if...else begin...end>

    if(select AVG(java) from GradeInfo)>80

    begin
    print 'Bucuo'
    print '不错哦'

    end
    else
    if exists(select * from classInfo where className='软工11003班')
    print '后来--Bucuo'
    print '懂得--不错哦'

    </if...else begin...end>

    <case ..when 返回第一个为true的表达式(若为true将不继续判断),若没有一个表达式为真则返回Null>

    select username ,
    case class
    when '软工11001班' then 'uername:软工1001班'
    when '软工11002班' then 'uername:软工1002班'
    when '软工11003班' then 'uername:软工1003班'
    end as '班级'
    from stuInfo


    select stuNo ,
    case
    when AVG(english)>80 then 'uername:软工1001班'
    when AVG(math)>80then 'uername:软工1002班'
    when AVG(chineseGrade)>80 then 'uername:软工1003班'
    end as '班级'
    from GradeInfo
    group by stuNo

    </case ..when>


    <cast>
    select cast (count(java) as nvarchar(10)) meng ,
    CAST(AVG(english) as int) english2

    from GradeInfo
    </cast>

    <over>

    select max(java) max_java ,rank() over (order by math) meng_rowNow ,ROW_NUMBER() over (order by math) wo from GradeInfo group by math

    select * from(
    select max(java) max_java ,rank() over (order by math) meng_rowNow ,ROW_NUMBER() over (order by math) wo
    from GradeInfo group by math
    )hahh where meng_rowNow=3 and hahh.max_java=(select MAX(java) from GradeInfo)


    select * from(
    select className , ROW_NUMBER() over(order by className) r from classInfo )t
    where t.r>0
    <over>

    </联合查询>

    <insert ...select>
    insert into classInfo (className) select className FROM classInfo where className is not null
    </insert...select>

    <delete 删除最后十行>
    delete top(10) classInfo from (
    select * from(
    select className , max(ROW_NUMBER() over(order by className )) r from classInfo )t
    where t.r>0
    )z where z.r>10
    <delete>

  • 相关阅读:
    SAP training scope SAP从入门到精通课程体系
    萨提亚·纳德拉
    说说为什么不再写博客了
    课上用过的Linux命令
    中国商用密码生产企业和商用密码产品及标准
    在Python中运行gmssl
    基于CMPP协议集成短信测试桩全流程实践分享 做梦的人
    mysqlslap: Error when connecting to server: 1064 Reach limit of connections 做梦的人
    大数据清洗表中没有找到对应表 做梦的人
    自动生成镜像,在上传到仓库 做梦的人
  • 原文地址:https://www.cnblogs.com/mengziHEHE/p/3414492.html
Copyright © 2020-2023  润新知