SQL Server学习笔记

 

时间:2015-9-11 17:19

 

SQL Server 1
学无止境

————————————————————————————————————————————————————————

 

——什么是数据库
    可以针对数码进行仓储和管制之软件以及数据我,统称为数据库。 
    数据库是由表、关系、操作结合。 

——为什么用数据库
    几乎拥有的施用软件的后台还要数据库
    数据库存储数据占用空间小,容易持久保存
    存储于安全
    容易保障及提升
    数据库移植比较便于
    简化对数据的操作
    B/S架构里面包含数据库

——预备知识
    学习数据库必须得修数据库原理为
        应该享有一些数据库原理的知识

    学习Sql Server必须得事先模拟一门户编程语言为
        不需要,但是知道一流派编程语言的言语会助长学习SqlServer的TL_SQL

    数据结构和数据库的界别
        数据库是在使软件(外存)级别研究数据的仓储和操作
        数据结构是以系统软件(内存)的级别研究数据的贮存和操作

    什么是接连
       
数据库和客户端是分别的,如果想通过客户端操作数据库,必须事先用客户端连接数据库,数据库可是地面的,也可以是远程的。

    有矣编程语言为什么还欲数据库
       
对内存数据操作是编程语言的坚强,但是针对硬盘数据操作却是编程语言的欠缺,对硬盘数据操作却是数据库的钢铁,是数据库研究
        的为主问题。

    从三只地方上数据库
        数据库是怎么样存储数据的
            字段  记录  表
约束(主键、外键、唯一键、非空、check、default、触发器)
        数据库是何等操作数据的
            insert、update、delete、T-Sql、存储过程、函数、触发器
        数据库是哪展示数据的
            select(重点的重中之重)

——必备之片操作知识
    如何建立数据库
    如何去数据库
    如何附加和分手数据库(备份和去数据库)

——数据库是何等化解多少存储问题之
    1、表的相关数据
        字段(列)
            一个东西的某某一个静态特征(属性)。
        记录(行)
            字段的三结合,表示的是一个切实可行的事物
        表
            记录之构成,表示的凡一样档事物之联谊
        表和字段、记录的干
            字段表示的凡事物的性质
            记录表示的凡东西本身
            表是事物的集聚

        列
            字段的另一样号
        属性(列)
            字段的任何一样种称谓
        元组(行)
            行、记录之其它一样种植称谓

    2、create table 命令
            通过图形化界面建表。
            通过命令建表:
                create table Course

                (

                        Cou_name nvarchar(50) not null,

                        Cou_id int not null primary key,

                        Cou_tercher nvarchar(20) not null

                )

 

                create table Student

                (

                        Stu_id int not null primary key,

                        Stu_name nvarchar(50) not null,

                        Stu_sex nchar(2) not null,

                        Stu_age int not null,

                        Cou_id int foreign key
references Course(Cou_id) not null

                )

            create table 最后一个字段的后建议不要写逗号。
                references的图是他键表创建外键时引用主键表的主键。
    3、什么是约束
        定义:
            对一个表中的特性操作的限制叫做约束。
        分类:
            主键约束(实体完整性)
                不同意再元素,避免了数的冗余。
            外键约束(引用完整性)
               
通过外键约束从语法上保证了本事物所涉的其余东西一定是有的。
                事物与东西之间的涉是经过外键来体现的。
            constraint约束
                
            check约束
                限制有一个价值在一定范围外。
                例:工资设置必过5000,小于500000
                    create table Employee
                    (
                            Emp_id int not null primary key,
                            Emp_salary float not null
check (Emp_salary>5000 and Emp_salary_<500000)
                    )
            default约束
               
保证实物的性质一定会发生一个价值,用户若非给该属性设置值经常,系统会受一个默认值。
                create table Student

                (

                id int not null primary key,

                name nvarchar(20) not null,

                sex nchar(2) default ‘男’ not null

                )

                   
该约束表示默认Stu_sex值为男性,()可以省略,在数据库中字符串用 ‘ ’
括起来,双引号用来标识一个对象的名,表的
                    名字,列的名字,事物的名字。
                insert into Student (id,name) values (1,’王五’)
                   
在Student表中插入id和name的价值,并没设置sex的价,此时默认值为‘男’。
                insert into Student values (2,’李四’)
                   
则会报错,因为插入入数据和列数不般配,需要指定插入列。
                语句后面不可知写逗号,只能写分号。
            unique约束
               
保证了东西性质之取值不允再次,但允许吗null,null不克重。(Oracle中允许null
重复)
                一个表中可以起差不多个unique列。
                create table Student2

                (

                        id int not null Primary key,

                name nvarchar(50) unique,

                sex nchar(2)not null default ‘男’,

                age int not null

                )

 

                insert into Student2
(id,name,sex,age) values (1,’张三’,’男’,1);

                insert into Student2
(id,name,sex,age) values (2,’张四’,’女’,1);

                insert into Student2
(id,name,sex,age) values (3,null,’男’,1);–注意该记录受的null是主要字。

                insert into Student2
(id,name,sex,age) values (4,’null’,’男’,1);–该记录受之null是字符串。

                insert into Student2 (id,sex,age) values (5,’男’,1);
         
  为了便于数据库的操作,最好使用一个没有实际意义的字段当做主键(一般是整型数字),该主键最好不是记录的性质。
           
把本来是主键的键当做唯一键,比如账号和用户称,都不可再,但是操作用户名时不会见招主键更改。 

            一般设置主键时加一个identity,使主键自增。

                id int primary key identity,
        not null 约束
            要求用户须为该属性赋一个价,否则语法出错。
            如果一个字段不写null也无写not
null,则默认是null,用户可以无吃该字段赋值。
            如果用户没有呢该字段赋值,则该字段的默认值为null。
            null和default的区别:
                相同点
                    都允许用户不赋值。
                不同点
                    null修饰的字段如果用户不赋值的默认为null。
                   
default修饰的字段如果用户不赋值则默认是default指定的价。 

    4、表及束缚的区分
        数据库是透过表明来缓解事物的囤积问题之。
        数据库是经过自律来缓解事物取值的灵光和合法性的题材。
        建表的过程即是点名事物性质和指定事物各种束缚的经过。
    5、什么是涉嫌
        定义:
            表和说明内的关联。
        实现方式:
            通过安装不同款式之外键来反映表和表的差关系。
        分类:
            一对一
                既好将A表的主键充当B表的外键。
                也堪把B表的主键充当A表的外键。
            一对多
                把“一”表底主键充当“多”表底外键。
               
要当多之同一正值补充加外键,不能够在“一”的一样正补充加外键,否则关系虽是差不多对平了。
            多对多
               
不克于里面同样摆表插入外键,多对大多的涉及要透过独立的一模一样摆放表来表示。
                SQL Server 2
               
在数据库关系图备受好观看,banji_jiaoshi_mapping和jiaoshi是多对相同之关联,并且banji_jiaoshi_mapping和banji也是大抵针对性
                一的涉嫌,所以banji和jiaoshi通过第三张表可以反映出多针对性多之关系。
               
如果表和表之间的干让删去,则可通过“关系”来还原表和表之间的涉及。
                至少发生个别列外键,并且完全是一个主键。
                create table banji

                (

                banji_id int primary key not null,

                banji_num int not null

                )

 

                create table jiaoshi

                (

                jiaoshi_id int primary key not null,

                kecheng nvarchar(20) not null

                )

 

                create table banji_jiaoshi_mapping

                (

                banji_id int foreign key references banji(banji_id),

                jiaoshi_id int foreign key
references jiaoshi(jiaoshi_id),

                kecheng nvarchar(20) not null,

                constraint fk_abc primary
key (banji_id,jiaoshi_id,kecheng)
                   
–将(banji_id,jiaoshi_id.kecheng)这三单字段的价的完好安装也主键 

                )

    6、主键
        定义:
           
能够唯一标识一个物之一个字段或者多单字段的咬合,被称之为主键。
        注意:
            含有主键的表叫做主键表。
           
主键通常还是整数,不建议使用字符串当主键(如果主键是用于集群式服务,可以考虑用字符串当主键)。
            主键的价值一般不同意修改,除非本记录为删除。
            主键不要定义成ID,而如果定义成“表明ID”或者“表明_ID”。
            要因此代理主键,不要因此工作主键。
               
任何一样张表,强烈建议不要使用产生工作含义的字段充当主键,通常会于说明中单独添加一个整型的号充当主键字段。
    7、外键
        定义:
           
如果一个表中的几何只字段是来源于另外多独表中的主键或唯一键,则立刻多个字段就是外键。
        注意:
           
外键通常是源于另外表的主键而休是唯一键,因为唯一键可能吗null。
            外键不肯定是来另外的表,也恐怕是自本表的主键。
            外键就是连连两单说明底字段。
            当有多对同一底涉嫌常,一般将外键写在多的等同正。
            可以展现两个说明内的涉,也只能通过外键来表示。
       
    一个含外键字段的表称为外键表,外键为主键的表称为主键表。A表中之主键i在B表中作为外键存在,B表就是他键表,A表就
            是主键表。
        问题:
            先删主键表还是先期去外键表?
                答案:先去外键表
                   
如果先删主键表,会报错,因为当时会招外键表中的数码援引失败。
                    如果外键表在,则主键表无法抹。

——查询 
    1、计算列
        –输出一年的工资(12单月)
            select sal*12 from emp
        select ename as “员工姓名” from emp
           
从员工表查询员工姓名,并拿ename字段改呢中文的“员工姓名”,其中as可以简单,”员工姓名“可以用单引号,也得以无使
            引号,建议以对挑起号 “ ” ,这样便于数据库移植。
        select 123 from emp
           
如果select一个虚幻的价,则会输出这个价值,该值并无代表什么,只是一个价值。
        注意:
           
在Oracle中字段的号不同意用单引号括起来,但是SQL允许使用单引号,为了保兼容性,最好以对引号。
    2、distinct【不容许再的价】
        关键四distinct用于返回唯一不同的价值。
        1、select distinct deptno from emp
            –distinct deptno会过滤掉还的deptno值
        2、select distinct comm from emp(comm中蕴藏多单null)
            –distinct可以过滤掉重的null,或者说
当有差不多个null值,只输出一个null。
        3、select distinct deptno,comm from emp
           
–distinct把deptno和comm的重组展开过滤,输出行数按照多之平等正值输出。
        4、select departno,distinct comm from emp
           
–会出错,因为逻辑上发误,如果显示14行deptno,则无从显示过滤后的comm。
        5、select ename,* from emp
            –SQL
Server不见面报错,而Oracle中见面错,所以为了方便数据库移植,最好不用这样写。
    3、between【两者之间】
        操作符
between…and会选区在两个价期间的数量范围,这些价值好是数值、文本或者日期。
        1、–查询工资超过1500并且小于3000之口
                select * from emp
                    where sal>=1500 and sal <= 3000
            –也可形容成
                select * from emp
                    where sal between 1500 and 3000
        如果欲出示范围以外的价,需要使用not操作符。
        2、–查询工资低于1500同时超出3000底人
                select * from emp
                    where sal < 1500 or sal > 3000
            –也可以描绘成
                select * from emp
                    where sal not between 1500 and 3000
    4、in
        in操作符允许我们当where子句被规定多独价。
        1、–输出工资为1500、3000、5000底人头之音
                select * from emp
                    where sal in (1500,3000,5000)
            –等价于
                select * from emp
                    where sal = 1500 or sal = 3000 or sal = 5000
        2、–输出工资无为1500、3000、5000底口的消息
                select * from emp
                    where sal not in (1500,3000,5000)
            –等价于
                select * from emp
                    where sal <> 1500 and sal <>
3000 and sal <> 5000
            数据库中未抵有点儿种表示法:!=  和
<>,推荐应用<>。
            not and是or。
            not or是and。
    5、top
        top子句用于规定而回的笔录数据。
        –返回emp表前五行的笔录。
            select top 5 * from emp
        –返回emp表前15%的记录
            select top 15 percent * from emp
           
注意:一共14行记录,14*15%=2.1,虽然是小数,但是不论小数位是几乎,都上进一,所以展示的是前方3实行。
    6、null
       
0和null是无同等的,null表示空,没有价值,0意味着一个规定的价值,任何项目的数据都同意吗null。
        –输出奖金非空的职工信息
            select * from emp
                where comm <> null
            select * from emp
                where comm != null
            select * from emp
            总结:
                null不克与<> !=运算。
                任何数字和null运算,结果还为null。
        –null可以参与is、is not运算。
            –输出奖金为空的职工的消息
                select * from emp
                    where comm is null
            –输出奖金不为空的员工的信
                select * from emp
                    where comm is not null
            –输出员工姓名及年薪+奖金
                select ename “员工姓名”,sal*12+isnull(comm,0)
“年薪” from emp
               
因为奖金comm中寓null值,而null不可知与数学运算,所以使用isnull,如果comm是null,就回到回0,否则回comm的价。
    7、order by
        order by
语句默认按照升序(asc)对记录进行排序,如果期望以降序对记录进行排序,可以动用desc关键字展开降序排序。
        –默认按照升序进行排序。
            select * from emp
                order by sal
       
–先对deptno进行升序排序,当deptno相等时,再指向sal进行升序排序。
            select * from emp
                order by deptno,sal
       
–先对deptno进行降序排序,当deptno相等常常,再针对sal进行升序排序。
            select * from emp
                order by deptno desc,sal
            如果在sal后面长desc,则sal也会随降序进行排序。
    8、模糊查询
        格式:
            select 字段的聚众 from 表名 
                where 字段的讳 like 匹配的字符
                –匹配的标准化通常含通配符
        通配符:(大小写通用)
            not like
                –查询ename字段中不分包A字符的员工信息
                    select * from emp
                            where ename not like ‘%A%’
            %
                表示任意0独或多个字符。
                –查询ename字段中涵盖A字符的员工信息。
                    select * from emp
                        where ename like ‘%A%’
            _
                仅代表一个字符。
                –查询ename字段中第二只字符为A的职工信息。
                    select * from emp
                        where ename like ‘_A%’ 
            [a-f]
                可以是字符列[a-f]蒙的任意一个字符。
               
–查询ename字段中第二个字符是A到F中任意一个单一字符的员工信息。
                    select * from emp
                        where ename like ‘_[A-F]%’ 
            [a,f]
                可以是a或f的单一字符。
                –查询ename字段中第二只字符是A或F的职工信息。
                    select * from emp
                        where ename like ‘_[A,F]%’ 
            [^a-c]
                不在字符列中的肆意一个字符。
               
–查询ename字段中第二独字符不在A到F的限外之员工信息。
                    select * from emp
                        where ename like ‘_[A-F]%’
       
注意:匹配的尺码必须用单引号括起来。(单引号代表字符串,双引号表示一个对象的名字)
        –如果要是查询% _ 通配符等特殊字符,可以采用:
            select * from emp
                where ename like ‘%\%%’ escape ‘\’
            –其中escape关键字将’\’转换成“转义字符”,使 ‘\’
之后的字符不再是当含义。
    9、聚合函数
        where中无能够包含聚合函数。
        函数的分类
            单行函数
                每一样尽(记录)都回到一个价
                例:
                    select lower(ename) from emp
                       
–该函数的效益是用ename转换成多少写之后还显示输出,每一样条记下都见面返回一个值并出口,所以lower是单行函数。
            多尽函数
                多实行(记录)返回一个价。
                聚合函数是多行函数。
                例:
                    select max(sal) from emp
                        –该函数的效力是用sal列中的极其老价值输出。
        注意的题目:
            判断如下SQL语句是否对:
                select max(sal) “最高工资”,min(sal)
“最低工资”, count(ename) “员工人数” from emp    –ok
                select max(sal), lower(ename) from emp    –error   
单行函数和多行函数不可知同下
        聚合函数的分类
            max()
            min()
            avg()
            count()
                –返回表中享有的记录的个数
                    select count(*) from emp
                –deptno重复的记录为吃看成有效记录,输出14
                    select count(deptno) from emp    
                    –返回字段值非空的笔录之个数,重复的记录为会见为作有效记录。
                –如果利用distinct则会去丢重的笔录,输有3
                    select count(distinct depeno) from emp
                    –返回字段非重复而非空的记录之个数。
                –如果来差不多只null,则会自行删除null记录,输出4
                    select count(comm) from emp
        
    10、group by

        select deptno “部门编号”,avg(sal) “平均工资” from emp

  group by deptno

    order by avg(sal)    –或者 order by “平均工资”

     
  –分组查询只能显示分组之后的完整信息,不能够显示组内部某平等字段的信。
            select deptno “部门编号”,avg(sal)
“平均工资”,ename”员工姓名” from emp

        group by deptno    –error  
 因为emp输出14推行,而avg和deptno只输出三行。

    11、having
        having可以本着group by之后的多寡进行筛。
       
having语句可以遵循select字段名展开过滤,可以据此聚合函数进行过滤,不可以采取别名和歪曲查询进行询问。
        having中不得不查询组的共同体信息,但无可知查询组的详细信息。
        格式:
            group by 字段的集
        功能:
            把表中的笔录按照字段分成不同的组。
        例子:
            –查询不同机关的平均工资。
                select deptno,avg(sal) “平均工资” from emp
                    group by deptno 
            –输出部门平均工资大于1600的机关编号和机关的平均工资。

                select deptno “部门编号”,avg(sal) “平均工资” from emp

            group by deptno

            having avg(sal) > 1600

            –输出工资高于2000平均工资大于3000的单位编号、平均工资、部门人数以及部门的万丈工资

                select deptno”部门编号”,avg(sal) “平均工资”,count(*)
“部门人数”,max(sal) “部门最高工资” from emp

            where sal > 2000

            group by deptno

            having avg(sal) > 3000 
               
结论:where是对原始记录进行过滤,having是本着分组之后的记录过滤。
        参数顺序不能够变化。 

        注意:
            理解:group by
a,b,c,d的用法,先按a分组,如果A相同,再按b分组其次c,最终统计的是极端小分组的音信。
            一定要理解下列语句为什么是误的
            –select deptno,avg(sal) “部门平均工资” ename from emp
                group by deptno
            –select deptno,ename from emp
                group by emp
            –select deptno,job,sal from emp
                group by deptno,job
        having子句语法注意事项:
           
1、having子句是因此来针对分组之后的数开展过滤,因此利用having时通常还见面先行采取group
by。
            2、如果没有使用group
by但运用了having,则意味having把持有的笔录作为一组来开展过滤。
                select count(*)
                    from emp
                    having avg(sal) > 1000
           
3、having子句出现的字段必须是分组之后的组的一体化信息,having子句不允许出现组内的详细信息。
           
4、select中可出现字段别名,但是having子句中无克冒出字段的号,只能采用字段名。
            5、having和where的异同
                相同点:
                    都是针对性数码开展过滤,只保留有效数据。
                    都未可知起字段别名。
                不同点:
                   
where是指向原有之笔录过滤,having是针对分组之后的记录进行过滤。
                   
where必须写在having前面,顺序不可颠倒,否则运行出错。
    12、连接查询
        定义:
           
将两个表或者个别个以上的申以得之连日条件连接起来,从中寻找出满足条件的多寡。
        分类:
          **内连接:
                1、select … from A,B 的用法
                    select … from A,B得到的凡一个笛卡尔积。
                    行数是A和B的乘积,列数是A和B之和。
                    (该临时表前面的凡A表的总表,后面的是B表的各国一样排)
                    例:
                        –输出70行,11列
                            select * from A,B
                2、select … from A,B where … 的用法
                    对select … from
A.B产生的笛卡尔积用where中之基准进行过滤。
                    例:
                        –输出5行
                            select * from emp.dept
                                where empno = 7369    
–where是过滤条件,不是接二连三条件,区别为join中的on
                3、select … from A join B on … 的用法
                    –输出14行,2列
                        select “E”.ename “员工姓名”,”D”.dname “部门称”

                    from emp “E”

                    join dept “D”

                    on “E”.deptno = “D”.deptno
                               
–用emp表和dept表连接,on指定连接表的规格:部门表明的编号=员工表的机关编号

                4、SQL92规范及SQL99规范的界别
                    select ,,, from A,B where…
                        是SQL92标准
                    select ,,, from A join B on
                        是SQL99标准
                    输出结果是均等的,推荐使用SQL99正规:
                        1、SQL99正经还易于了解。
                        2、在SQL99专业中,on和where可以做不同的分工
                            on指定连接条件
                           
where对连接之后的临时表(笛卡尔积)的多少开展筛选。
                    例:
                       
输出工资过2000之职工姓名、部门称和工资等。
                        –SQL99标准
                            select “E”.ename,”D”.dname,”G”.grade,”E”.sal

                        from emp “E”

                        join dept “D”

                        on “E”.deptno = “D”.deptno

                        join salgrade “G”

                        on “E”.sal > “G”.losal and “E”.sal <
“G”.hisal

                        where “E”.sal > 2000

                        order by sal

                         –SQL92标准

                            select “E”.ename,”D”.dname,”G”.grade,”E”.sal

                        from emp “E”,dept “D”,salgrade “G”

                        where “E”.sal > 2000 and “E”.deptno =
“D”.deptno and (“E”.sal > “G”.losal and “E”.sal < “G”.hisal) 
                5、select、from、where、join、on、group by、order
by、top、having的鱼龙混杂使用。
                6、习题
                   
(1)求出每个员工的人名、部门编号、薪水和薪水的级差。

                        select E.ename “员工姓名”,D.deptno
“部门编号”,E.sal “薪水”,S.grade “薪水等级”

                            from emp “E”

                            join dept “D”

                            on “E”.deptno = “D”.deptno

                            join salgrade “S”

                            on “E”.sal >= S.losal and E.sal <=
S.hisal

                            order by E.deptno

                   
(2)查找每个部门的部门称、部门编号、该机关有着职工的平均工资和平均工资的级差。
                        select
“T”.deptno,”D”.dname,”T”.avg_sal,”S”.grade

                            from(

                                    select deptno,avg(sal) “avg_sal”

                                    from emp

                                    group by deptno

                            )”T”

                            join salgrade “S”

                            on “T”.avg_sal between “S”.losal and
“S”.hisal

                            join dept “D”

                            on “D”.deptno = “T”.deptno

                    (3)求出平均薪水最高的机关编号和机构平均工资。

                        select top 1 deptno,avg(sal) “avg_sal”

                            from emp

                            group by deptno

                            order by avg(sal) desc
            外连接:
                定义:
                   
不但返回满足连续条件的有所记录(内接连),而且会回到部分非满足条件的记录。
                分类:
                    左外连接:
                       
不但返回满足条件的拥有记录,而且会回到左表不饱连续条件的记录。
                        select * from emp “E”
                            left join dept “D”   
–如果未写left,则默认inner内连接。
                            on “E”.deptno = “D”.deptno
                    右外接连: 
                       
不但返回满足连续条件的装有记录,而且会返回右表不饱连续条件的记录。 

            完全连接:
              SQL Server  (左外连接+右外接连)
                完全连接输出的结果集中包含三部分:
                    1、两独说明中匹配的备的实施之笔录。
                   
2、左表中那些当右表中找找不顶相当的行之笔录,这些记录整个吗null。
                   
3、右表中那些以左表中寻觅不至相当的执行之笔录,这些记录整个啊null。
            交叉连接:
                    select *
                        from emp
                        cross join dept
                        on 1 = 1
                    等价于
                    select *
                        from emp,dept
            自连接:
                定义:
                    一摆表自己跟友爱连接起来查询数据。
                例子:
                    不准用聚合函数求薪水最高的员工。
                    select * from emp
                        where empno not in (
                            select distinct “E1”.empno
                                from emp “E1”
                                join emp “E2”
                                on “E1”.sal < “E2”.sal
                        )
            联合:
                定义:
                   
两只select生成的临时表的多寡以纵向的方法连接于共同。
                    注意:以前所模拟用的连续是盖横向的主意连接在一块儿。
                例子:
                    –输出每个职工的真名,工资及顶头上司的人名
                        select “E1″.ename,”E1″.sal,”E2”.ename
“上司的人名”
                            from emp “E1”
                            join emp “E2”
                            on “E1”.mgr = “E2”.empno
                        union
                        select ename,sal,’BOSS’ from emp where mgr is
null
                注意:
                    若干只select子句联合中标的基准:
                        1、这多单select子句输出的列数必须是等的。
                       
2、这多少单select子句输出列的数据类型至少是配合的。
    13、分页查询
        假设每页显示n条记录,当前如出示的是第m页,表名是A,主键是A_id
        公式为:
            select top n *
                from A
                where A_id not in(select top (m-1)*n A_id from A)
        例子:
            select top 3 *

                from emp

                order by sal desc

                ——————–

            select top 3 *

                from emp

                where empno not in(select top 3 empno from emp order by
sal desc)

                order by sal desc

            ——————–

            select top 3 *

                from emp

                where empno not in(select top 6 empno from emp order by
sal desc)

                order by sal desc

            ——————–

            select top 3 *

                from emp

                where empno not in(select top 9 empno from emp order by
sal desc)

                order by sal desc

            ——————–

            select top 3 *

                from emp

                where empno not in(select top 12 empno from emp order by
sal desc)

            order by sal desc

            ——————–

    14、嵌套查询
命令:

SQL Server关键字:
    add
        添加约束。
            alter table Department
            add constraint PK_Department primary key (Department_No)
    create table A
        创建A表。
    constraint
        建表时指定了律名
            create table test

            (

            id int not null,

            num int constraint abc primary key not null

            )
       
将主键的自律名定义为abc,如果未加以constraint定义约束名,则默认分配一个肆意名称。 

    drop table
        删除表。
            删除A表。
            drop table A
    drop constraint
        删除约束
            alter table Department
            add constraint PK_Department primary key (Department_No)
    default
        默认约束。
            sex nchar(2) default ‘男’ not null。
            如果不设置sex的值,则默认为’男‘。
    identity
        设置主键自动增长,用户不需要吗identity修饰的主键赋值。
            create table Student
            (
                Student_id int primary key identity,   
–如果未装identity的值,则默认从1起来,每次增长值为1。
                Student_name nvarchar(20) not null
            ) 
            insert into Student values (1,’张三’)
            ———————————————
            create table Student2
            (
                Student_id int primary key identity(2015,10),   
–设置identity的初始值为2015,每次增长值为10。
                Student_name nvarchar(200) not null
            ) 
            insert into Student2 values (‘张三’)   
–如果主键设置为identity,则插入数据常常得以毫无指定要插入的数额以不需插入主键 
            ——————————————–
            delete Student2 where Student_name = ‘张三’
           
此时张三的主键为105,则去后重新插入数据,主键递增为110,默认略过105.
    select A from B
        从B表查询A列数据,如果A是*,则查询B表全部数额。
    foreign key
        设置外键。
            id int foreign key references Course(Cou_id) not null。
           
设置id为该表的外键,并且id中的律与数据引自Course表中之Cou_id。 
    primary key
        设置主键。
             id int primary key not null,
            设置id为该表的主键。
    references
        references的来意是外键表创建外键时引用主键表的主键的价与束缚。
        create table test

        (

        id int constraint abc primary key not null,

        banji_id int constraint def foreign key
references banji(banji_id)

        )
    select into
        select into语词从一个表明中选择数据,然后将多少插入另一个表中。
        select into语句常用于创建表的备份附件或者用于对记录进行存档。
            select column_name
                into new_table
                from old_table 

    set
    update
    unique
       
设置唯一约束,用法及主键相似,同一表中数据未可以更,可以呢空,null不得以还。
            name nvarchar(50) unique,
           
设置name为该表的唯一约束,name中不克冒出重的值,可以呢空,null不能够再次。
    where
    
SQL Server函数: 
    avg()
        avg函数返回数值列的平均值,null不包在盘算着。
    count(字段名)
        count函数返回指定列的值的数码,null不计入数目。
    first()
        first函数返回指定的字段中率先独记录的值。
    format()
        format函数用于对字段的示进行格式化。
    group by()
        group
by语句子用于结合合计函数,根据一个或者多个列对结果集进行分组。
    having()
       
在SQL中加进having子句的原由是,where关键字无法与协和函数一起使用。
    lower(字段名)
        将该字段转换为稍写输出。
            select lower(ename) from emp
    last()
        last函数返回指定的字段中最终一个笔录的价。
    max()
        max函数返回一排列被的最为特别价值,null值未包于测算中。
    upper(字段名)
        将欠字段转换为好写输出。
            select upper(ename) from emp
    
命令:
    修改名字是‘张三的笔录中的Emp_id,把Emp_id修改为1001’
        update Employee set Emp_id=1001 where Emp_name=’张三’

 

相关文章