zoukankan      html  css  js  c++  java
  • SQL基础和高级(语法格式)总结一

    前几天同学问了我一个sql问题,发现她有些语法都忘了。在此整理一下学过的知识和笔记,总结出了sql语句的基本格式。希望给大家有所帮助。

    一.创建

         1.创建数据库,一般来说我们都是通过界面来创建数据库的。但是用sql语句创建数据库也是必须掌握的。

          语法格式如下:

         示例代码如下:

     1 create database blackhourse
     2 on primary
     3 (
     4     name='黑马'
     5     ,filename='E:新建文件夹黑马.mdf'
     6     ,size=10MB
     7     ,maxsize=100MB
     8     ,filegrowth=10%    
     9 )log on
    10 (
    11     name='黑马_log'
    12     ,filename='E:新建文件夹黑马_log.ldf'
    13     ,size=5MB
    14     ,maxsize=50MB
    15     ,filegrowth=10%
    16 );
    创建数据库

      2.手动删除数据库,示例代码如下

           3.分离和附加数据库,一般来说都是通过界面方式来附加和分离数据库的,包括我也是。因为比较快捷。但是sql语句方式我们也是需要知道的。

           示例代码如下

     1 /*调用存储过程,分离数据库*/
     2 
     3 exec sp_detach_db 'blackhourse';
     4 exec sp_detach_db 'archive';
     5 exec sp_detach_db 'zdp';
     6 exec sp_detach_db 'zdpdsy';
     7 exec sp_detach_db  'archive1';
     8 
     9 /*附加数据库*/
    10 create database archive
    11 on(
    12     filename='E:新建文件夹黑马.mdf'
    13 )log on(
    14     filename='E:新建文件夹黑马_log.ldf'
    15 )
    16 for attach;
    分离和附加数据库

          4.创建表,这个是最基本的语法,必须要掌握。格式:create table 表名(列名,数据类型,约束(自动编号,主键))

          示例代码如下:

    1 create table Mydounaifen.TlStudent
    2 (
    3     /*列名,数据类型,约束(自动编号,主键)*/
    4     stuName char(10),
    5     stuAge int,
    6     stuSex char(2)
    7 );
    创建表

     

    二.约束

       什么叫约束呢。约束有什么作用呢?答:保护数据完整性的机制:让存储的数据有意义的条件。

       分为1.主键约束 2.唯一约束 3.检车约束 4.默认约束 5.非空约束 6.主外键约束 6种。

       基本语法格式:alter table 架构.表名  add constraint 约束名 约束类

       1.添加约束。在此添加一个检查约束,其他约束类似。

    1 alter table Mydounaifen.TlStudent
    2 add constraint CK_TlStudent_stuSex 
    3 check(stuSex=''or stuSex='');
    添加约束

       2.添加多个约束,添加非空约束,为年龄与性别添加检查约束,为邮箱添加唯一约束。一般来说sql考试会经常考到

    1 alter table Student
    2 add constraint ck_Student_stuAge
    3 check(stuAge>0 and stuAge<30),
    4 constraint ck_Student_stuSex
    5 check( stuSex=''or stuSex=''),
    6 constraint uq_Student_stuEmail
    7 unique(stuEmail);
    添加多个约束

       3.列操作。包括添加一列,修改列的数据类型,删除列。

     1 --增加一列
     2 alter table Mydounaifen.TlStudent
     3 add email varchar(20) null;
     4 
     5 --删除一列
     6 alter table Mydounaifen.TlStudent
     7 drop column email;
     8 
     9 --修改某个列数据类型
    10 alter table Mydounaifen.TlStudent
    11 alter column email nvarchar(20) null;
    列操作

      4.主外键约束。sql语句容易忘,不过在此还是给大家罗列出来。

     1 create table tblCourseT_SQL2
     2 (
     3     cId int identity(1,1) not null
     4     , cName nvarchar(10) not null
     5     , cDesc nvarchar(100) null   -- description
     6 );
     7 alter table tblCourseT_SQL2
     8 add constraint PK_tblCourseT_SQL2_cId primary key(cId);
     9 
    10 -- 学生
    11 create table tblStudentT_SQL2
    12 (
    13     stuId int identity(1,1) not null
    14     , stuName nvarchar(10) not null
    15     , cId int null -- 外键stuTocId
    16 );
    17 
    18 --创建外键约束主键表中必须有个主键
    19 alter table  tblStudentT_SQL2
    20 add constraint [FK_tblStudentT_SQL2_tblCourseT_SQL2_cId]
    21 foreign key(cId) references tblCourseT_SQL2(cId);
    22 
    23 /*
    24     补充说明
    25     主外键表中,关联主键表的字段必须是主键和唯一键
    26 
    27 */
    添加主外键约束

     

    三.增删改查

      增删改查,想必大家都很熟悉了吧。在做网站开发的时候,通常和ado.net结合起来使用。拼接各种sql语句,来操作数据。

      1.插入insert

       插入语句语法格式非常简单,也比较好记。格式:insert 架构名.表名(列,列,.....) values(值,值,....)。

       也有其他的用法。在此一一罗列出来

     1 --基本插入
     2 insert into Mydounaifen.TlStudent(stuName,stuAge,stuSex)
     3 values('豆奶粉',22,'');
     4 insert into Mydounaifen.TlStudent(stuName,stuAge,stuSex)
     5 values('大鹏',22,'');
     6 这种写法每次只能插入一条数据
     7 
     8 --为自动编号插入数据(tid为自动编号)
     9 set IDENTIY_INSERT TblTeacher on
    10 insert into TblTeacher(tid,tname,tsalary)
    11 values(100,'bob',50000)
    12 
    13 --当向表中的除自动编号外的所有其他列插入数据的时候,这是可以省略列名。
    14 insert into T_Seats values(LoginId,RealName,Pwd);
    15 
    16 --向一个已经存在的表中插入数据,数据的来源是另外一张表
    17 insert into NewTblTeacher (tname,tage)
    18 select tname,tage from TblTeacher
    19 
    20 --返回刚插入数据的自动增长编号 
    21 insert into Exe2.LoginTbl output inserted.id values('zdpdsy123','123');
    22 
    23 --表值函数
    24 /*
    25     格式:insert into 表名(列1,列2,…) values(值1,值2,…), (值1,值2,…),
    26 (值1,值2,…);
    27        可以插入多个数据
    28 */ 
    29 insert into StudentTest(stuName,stuSex,StuAge)
    30 values('牛亮亮','m',30),('王成伟', 'm', 28),
    31 ('赵晓虎', 'm', 29),('李艳茹', 'f', 19),
    32 ('牛亮亮','f',22),('苏坤','m',30),('苏坤','f',27);
    插入用法

      2.修改update

       没什么复杂的用法。就一条基本的语法:update 架构名.表名set 字段=值,字段=值.... where 条件

    1 update Mydounaifen.TlStudent set stuAge=20 where stuName='豆奶粉';
    修改

       3.删除delete

         有三种方式。delete,drop,truncate.

     1 语法
     2 -- delete from 表名where 条件;
     3 -- drop database|table|schema 名字;
     4 -- truncate table 表名
     5 
     6 drop table Student;
     7 
     8 delete from Mydounaifen.TlStudent where stuName='大鹏';
     9 
    10 truncate table TblTeacher
    11 
    12 
    13 ===========================
    14 两者区别
    15 1.delete删除的时候,自动编号没有恢复到默认值,而truncate 可以.
    16 2.truncate 删除数据的时候,只能一次性都清除,不能根据条件来删除 则delete可以.
    17 3.truncate删除数据的速度比delete快的多
    18 4.truncate语句不会触发delete触发器
    View Code

        4.查询select

          也有两种方式。一种是普通的select用法。还有一种是select into 用法

           1.普通的select用法

        格式如下:

        select distinct |top 数字[percent]

           字段as常量

           ,包含字段表达式

           ,函数 Sum,max

           ,常量

        from

           表或结果集

        where

           条件: 逻辑|空值|多条件|模糊|范围

        group by

           字段

        having

           筛选条件

        order by

           字段 desc | asc

        执行顺序

        from -> where -> group by -> having -> select -> order by

       示例代码:

    select 
      *
    from MyStudent --1>先从MyStudent表中拿到数据
    where fage>30  --2>从MyStudent的数据中筛选出所有年龄大于30的人的信息
    group by fgender --3>按照性别分组,分完组以后又得到一个新结果集
    having count(*)>500 --4>基于分组以后的结果集,然后再筛选,筛选出人数>500的记录
    
    
    /*
        from 子句
        寻找数据源,后面可以跟表,视图,表值函数,结果集等
        where子句
        对from所得到的临时表做一次筛选,是直接在结果中将筛选到的结果组成一个临时表
        null值处理
        判断一个字段是否为null使用
            字段 is [not] null
        null表示的是不知道,凡是与null参与的运算得到的结果都是null和不知道    
    
    */
    --查看整个表
    select * from TblScore;
    
    --考试期中及格
    select * from TblScore where ScoreNum>=60;
    
    --期末及格考试
    select * from TblScore where ScoreLast>=60;
    
    --按照姓名分组
    select stuName from StudentTest 
    group by stuName;
    
    --取成绩前五名
    select top 5 * from MyStudent 
    order by fag desc
    
    /*模糊查询 */
    通配符;
    1. % //匹配多个字符
    select 
    * 
    from Mystudent
    where fname like '%敏%'
    2. -//匹配一个字符
    --查询姓赵的同学,且长度为三个
    select * from MyStudent
    where fanme like '赵__'
    
    select * from MyStudent
    where fanme like '赵%' and len(fname)=3
    
    3. []
    --查询出姓名包含'雷'或'伟'的人的姓名
    
    select * from MyStudent
    where fname like '%[雷伟]%'[]括起来,表示转义字符 如[%]
    View Code

      补充:给列取名。

    --  select列 as 别名   (推荐)

    --  select列 别名     (不推荐)

    --  别名=select列     (推荐)

     

        2.select into 通常用来把旧表数据插入到新表中

        格式如下:

          select

           字段等

        into 表名

        from

           数据源

        其他子句

        示例代码:

     1 select * into
     2 FormSelect
     3 from StuSetInto;
     4 
     5 select * from FormSelect;
     6 /*
     7     select * into 新表名from 数据源where 1>2;
     8     只会把表的结构复制过来,
     9     但是键和约束索引等不会复制过来。
    10     除了自动增长的
    11 */
    12 select * into NewTable from FormSelect where 1>2;
    View Code

    以上是个人的SQL学习总结,有错的地方还望众大神海涵啊。

    SQL基础和高级总结.zip
  • 相关阅读:
    Java Socket
    路由器和交换机的区别
    OSI七层协议
    traceroute命令
    DNS递归和迭代原理
    出栈入栈顺序问题
    A记录、CNAME记录、MX记录
    DNS解析原理
    RAID磁盘阵列0、1、5、10
    http状态码
  • 原文地址:https://www.cnblogs.com/zdpdsy/p/3561947.html
Copyright © 2011-2022 走看看