zoukankan      html  css  js  c++  java
  • sql必知必会(第四版) 学习笔记

    还有一个《Sqlserver2008技术内幕》的笔记,也很好!~

    http://www.cnblogs.com/liupeng61624/p/4354983.html

    温习一遍简单的sql语法,把自己掌握还不够的地方,做了些笔记....

    1 去重复关键词,distinct

        select distinct sname from student;

    2 限制结果top的用法

         select top 5 id from student 获取前五条记录

         可以利用top来写sql分页语句

    3 排序order by

        select * from student order by id,name desc;

        默认是升序 asc,若是降序要在列名后标明desc

        order by语句在sql句尾,在where语句后面出现

    4 where

       操作符 =,<> !=(不等于),>,>=,<,<=,!(不小于),!>(不大于)

                 BETWEEN......(在...之间)

                  is NULL(空值)

          AND 条件与

          OR   条件或 

          注意: and的结合优先级高于or,所以where后面多条件时候最好用括号写清楚

    5 IN,NOT

         select * from student

         where id in(1,2,3)

          where 条件中的NOT表明否定其后跟的任何条件,也就是筛选的是where条件外的数据

    6 通配符匹配过滤

        Like...模糊匹配

       select * from student

        where name like '汪%'

       选出汪姓 的同学,其中 % 代表匹配任意次,_ 代表匹配单个字符,[]表示匹配中括号里面的字符

    7 as 利用as起别名,简便写法

      

    8 聚合函数

        利用一些简单的聚合函数汇总数据

       AVG()  计算平均值

       Count() 计算 个数

       Max() 最大值

       Min() 最小值

    9 分组数据

      select COUNT(*) as 人数, Kind as 科目类型
      from Course
      Group by Kind

    Having的用法,和where的区别就是where是在检索时过滤行的,而Having是用来过滤分组的

    如上,在sql句末加上,Having Count(*) > 2 那么就是要筛选出人数大于2的组了

    另外一种理解,where是对数据分组前进行过滤,而Having 是对数据分组后进行过滤,where中排出的行就不包括在分组中了,从而影响到Having子句中基于这些值过滤掉的分组。

    至此简单回顾下select子句及其顺序

      句子                   说明                       是否必须使用

    ---------       -----------------       -------------------------

    select            要返回的列或者表达式         是

    from             从中检索数据的表                仅在从表中选择数据使用

    where           行级的过滤                          否

    group by       分组说明                             仅在按组计算聚合时使用

    Having          组级过略                              否

    Order by        输出排序顺序                       否

        以前一直弄不清,group by,having...一起怎么使用的,现在清楚了许多。

    10 子查询

           不多说了,就是一级级嵌套查询下去

    11 联结表 多表查询

        对于关系表而言,那么就是一种数据存放在对应的一张数据表中,避免数据的重复,比如把产品相关信息放在一张Products表中,产品对应的供应商相关信息放在另一张供应商表Vendors中。

      如果我们要通过产品查询其对应的供应商Vendor的相关信息,要么使用之前的子查询,这样就过于繁琐,所以我们要使用表的连接查询。

       多表的连接有自然连接,通过join来连接的左外连接和右外连接。

    12 组合查询 

        union

    select * from StuCou
    where StuNo = 1
    union
    select * from StuCou
    where StuNo = 2 

    等价于

    select * from StuCou
    where StuNo = 1 or StuNo = 2

    13 插入数据

        insert [into] Student  values('1','King',13,'浙江杭州')

         这样的话,就是插入一整行数据,要求插入数据个数和数据表中定义的个数要一致

       或者可以这么写

       insert into Student(stu_id,stu_name,stu_age,stu_address,stu_score)

       values(1,'King',13,'浙江杭州',100);

       values中的值和前面的属性一一对应

        从一个表复制到另一个表

         insert * into class1 from class

         那么数据库会新建一个名为class1的数据表然后把class中的数据复制到class1中。

        如果你想将class表中的部分新数据导入到class1中的话,那么你可以这么写

        insert into class1(列1,列2,列3)

        select 列11,列22,列33

        from class

        但是如果行中有不能为null的属性,就不能这么做了

    14 更新和删除数据

       update ,delete

       update 表名

        set 列名 ='值'

       where 条件

        值得注意的是,更新操作往往会因为,表与表之间的约束关系发生冲突

      delete from 表名

      where 条件

      delete是删除表的内容

       若想删除整张表中的内容,那么delete from 表名

       更快的删除表中所有行,而且速度更快

        truncate Table  这样删除不用记录数据的变动所以删除更快

    15 创建表,更新,删除

         create table 表名(

             列名 数据类型 说明(null/not null),

             ...

            )

         更新表

         给表增加一列

        Alter Table 表名

        ADD 列名, 数据类型

        Drop Column 列名   --删除一列

       删除表

       Drop Table 表名

  • 相关阅读:
    Leetcode 92. Reverse Linked List II
    Leetcode 206. Reverse Linked List
    Leetcode 763. Partition Labels
    Leetcode 746. Min Cost Climbing Stairs
    Leetcode 759. Employee Free Time
    Leetcode 763. Partition Labels
    搭建数据仓库第09篇:物理建模
    Python进阶篇:Socket多线程
    Python进阶篇:文件系统的操作
    搭建数据仓库第08篇:逻辑建模–5–维度建模核心之一致性维度2
  • 原文地址:https://www.cnblogs.com/zzt-lovelinlin/p/4465903.html
Copyright © 2011-2022 走看看