zoukankan      html  css  js  c++  java
  • 《SQL必知必会》总结

    目录
     
    第1章 了解SQL
    第2章 检索数据
    第3章 排序检索数据
    第4章 过滤数据
    第5章 高级数据过滤
    第6章 用通配符进行过滤
    第7章 创建计算字段
    第8章 使用数据处理函数
    第9章 汇总数据
    第10章 分组数据
    第11章 使用子查询
    第12章 联结表
    第13章 创建高级联结
    第14章 组合查询
    第15章 插入数据
    第16章 更新和删除数据
    第17章 创建和操作表
    第18章 使用视图
    第19章 使用存储过程
    第20章 管理实务处理
    第21章 使用游标
    第22章 了解高级SQL特性
    --------------------------------------------------------------------------------------------------------------------------------------------
     
    第1章: 连接数据库
     
    数据库(databases):保存有组织的数据的容器
    表(table):某种特定类型数据的结构化清单
    模式(schema):关于数据库和表的布局及特性的信息
    列(colimn):表中的一个字段,所有表都是由一个或多个列组成的
    数据类型(datatype):所容许的数据的类型
    行(row):表中的记录
    主键(primary key):一列(或一组列),其值能够唯一标识表中每个行
           ①任意两行都不具有相同的主键值;
           ②每个行都必须具有一个主键值(主键列不允许NULL值);
           ③主键列中的值不允许修改或更新
           ④主键值不能重用(如果某行从表中删除,它主键不能赋给以后的新行)
     
    SQL(Structured Query Language,结构化查询语言):与数据库通信的语言
     
     
     
    第2章 检索数据
    SELECT语句:从一个或多个表中检索数据
    关键词(keyword):SQL组成部分的保留字,不能用作表或列的名字
    // 从Products表中检索一个名为prob_name的列
    SELECT prob_name FROM Products;
    // 从Products表中检索多列
    SELECT prob_name, prob_id, prob_price
    FROM Products;
    // 从Products表中检索所有的列
    SELECT  *
    FROM Products;

    第三章 排序检索数据

    子句(clause): SQL语句由子句构成,通常由一个关键字加上所提供的数据组成

    可用ORDER BY子句明确地排序用SELECT语句检索出的数据。应保证ORDER BY子句是SELECT语句中最后一条子句。

    SELECT prob_name
    FROM Products
    ORDER BY prob_name;

    按多个列排序:

    // 首先按价格排序,然后按名称排序
    SELECT prob_id, prob_price, prob_name
    FROM Products
    ORDER BY prob_price, prob_name;

    按列的位置排序:

    SELECT prob_id, prob_price, prob_name
    FROM Products
    ORDER BY 2,3

    指定排序方向:(默认升序ASC, 降序使用DESC关键字)

    SELECT prob_id, prob_price, prob_name
    FROM Products
    ORDER BY prob_price DESC;
    
    
    SELECT prob_id, prob_price, prob_name
    FROM Products
    ORDER BY prob_price DESC, prob_name;
     
    第四章 过滤数据
     只检索所需数据需要指定搜索条件(search criteria),也称为过滤条件(filter condition)
     根据WHERE子句中指定的搜索条件过滤,WHERE子句在表名(FROM 子句)之后给出
    SELECT prod_name, prob_price
    FROM Products
    WHERE prob_price=3.49;

    WHERE子句操作符:

     
    SELECT  prob_name, prob_price
    FROM Products
    WHERE prob_price<=10;
    
    
    SELECT  prob_name, vend_id
    FROM Products
    WHERE vend_id <>  'DLL01';
    
    
    SELECT  prob_name, prob_price
    FROM Products
    WHERE  prob_price BETWEEN 5 AND 10;
    
    
    SELECT  prob_name,
    FROM Products
    WHERE  prob_price  IS NULL;

    第5章:高级数据过滤

    组合WHERE子句:以AND子句的方式或OR子句的方式使用

    SELECT vend_id,prob_price, prob_name
    FROM Products
    WHERE vend_id='DLL01' AND prob_price<=4;
    
    
    SELECT vend_id,prob_price, prob_name
    FROM Products
    WHERE vend_id='DLL01'  OR  vend_id='BRS01';
    
    // 悠闲处理AND操作符
    SELECT prob_price, prob_name
    FROM Products
    WHERE vend_id='DLL01' OR vend_id='BRS01'
         AND prob_price<=4;
    
    SELECT prob_price, prob_name
    FROM Products
    WHERE (vend_id='DLL01' OR vend_id='BRS01'AND prob_price<=4;

    IN操作符指定条件范围,范围中的每个条件都可以进行匹配。IN取合法值得有逗号分隔的清单,全都在圆括号中。功能与OR相当。优点:

         ①使用长的合法选项清单时,IN操作符的语法更清楚、直观。
         ②在用IN时,计算次序更容易管理(操作符更少)。
         ③IN操作符一般比OR操作符清单执行更快。
         ④IN最大优点是可包含其他SELECT语句,使得更能动态地建立WHERE子句。
    SELECT prob_name, prob_price
    FROM Products
    WHERE vend_id IN'DLL01''BES01'ORDER BY prob_name;
     
     
    NOT操作符可以用在要过滤的列前,而不仅是在其后
    SELECT prob_name
    FROM Products
    WHERE NOT vend_id = 'DLL01'
    ORDER BY prob_name;

    第六章 用通配符进行过滤

     LIKE操作符:在搜索子句中使用通配符

       通配符(wildcard):用来匹配值的一部分的特殊字符

       搜索模式(search pattern)由字面值、通配符或两者组合构成的搜索条件

     1)百分号(%)通配符:任何字符出现任意次数

    SELECT prob_id, prob_name
    FROM Prducts
    WHERE prob_name LIKE  'Fish%';

    2)下划线(_)通配符:只匹配单个字符;(%能匹配0个字符不一样,_总是匹配一个字符,不能多也不能少)

    SELECT prob_id, prob_name
    FROM Prducts
    WHERE prob_name LIKE  '__ inch';

    3)方括号([])通配符:指定一个字符集,必须匹配指定位置的一个字符

    // [JM]匹配任何以J或M开都的字符串
    SELECT cust_contact
    FROM Customers
    WHERE cust_contact LIKE '[JM]%'
    ORDER BY cust_contact;
    
    
    //可以使用前缀字符^否定
    SELECT cust_contact
    FROM Customers
    WHERE cust_contact LIKE '[^JM]%'
    ORDER BY cust_contact;

    第7章 创建计算字段

     字段(field):基本上与列意思相同,经常互换使用,不过数据库列一般称为列,而术语字段通常用在计算字段的连接上
     
     
     拼接字段(concatenate):将值联结到一起构成单个值
     
     
     
     
     
     列别名(alias):是一个字段或值的替换名,使用AS关键字赋予
     
     
     
     
     
     执行算术计算
     
     
     
     
     
    第8章:使用数据处理函数
    文本处理函数:
      
     
    日期和时间处理函数:
     
    数值处理函数:
     
     
     
     
     
    第9章 汇总数据
     
    聚集函数(aggregate function):运行在行组上,计算和返回单个值的函数
     
    AVG()函数:通过对表中行数计数并计算特定列值之和,求得该列的平均值
     
     
     
    COUNT()函数:计数,确定表中行的数目或符合特定条件的行的数目
      1)使用COUNT(*) 对表中行的数目进行计算,不管表列中包含的是空值(NULL)还是非空值;
      2)使用COUNT(column) 对特定列中具有值的行进行计算,忽略NULL值
    //返回表中客户的总数
    SELECT COUNT(*)  AS num_cust
    FROM Customers;
    
    //只对具有电子邮件地址的客户计数
    SELECT COUNT(cust_email) AS num_cust
    FROM Customers;

    MAX() 函数:返回指定列中的最大值

    SELECT MAX(prob_price) AS max_price
    FROM Products;
    MIN()函数:返回指定列的最小值
    SELECT MIN(prob_price) AS min_price
    FROM Products;
    SUM函数:返回指定列值的和
    SELECT SUM(quantity) AS items_ordered
    FROM OrderItems
    WHERE order_num=20005;

    组合聚集函数:

     
     
     
    第10章 分组数据
     
     创建分组:
     
     
     
     过滤数组:HAVING过滤分组(类似于:WHERE过滤行)
    SELECT cust_id, COUNT(*) AS orders
    FROM Orders
    GROUP BY cust_id
    HAVING COUNT(*) >=2;
     
     分组 vs 排序:
     
     
     
     
     
    SELECT子句排序:
     
     
     
     
     
    第11章 使用子查询
     
    子查询(subquery):嵌套在其他查询中的查询
    SELECT cust_id
    FROM Orders
    WHERE order_num IN (SELECT order_num
        FROM OrderItems
        WHERE prob_id='RGAN01');

    作为计算字段使用子查询

    SELECT cust_name,
    cust_state,
    (SELECT COUNT(*)
      FROM Orders
     WHERE Orders.cust_id=Customers.cust_id) AS
    orders
    FROM Customers
    ORDER BY cust_name;

     
     
     
     
     
     第12章 联结表
     关系表的设计是要保证把信息分解成多个表,一类数据一个表,各表通过某些常用的值(即关系设计中的关系relational)互相关联。
     
    创建联结:规定要联结的所有表以及它们如何关联即可
    SELECT vend_name, prob_name, prob_price
    FROM Vendors, Products
    WHERE Vendors.vend_id=Products.vend_id;

                 
    联结多个表:
    SELECT prob_name, vend_name, prod_price,quantity
    FROM OrderItems, Products, Vendors
    WHERE Products.vend_id=Vendors.vend_id
        AND OrderItems.prob_id=Products.prob_id
        AND order_num=20007;

     
     
     
     
     
     
     
     
     
     
     
    第13章  高级联结
     
    使用表别名
    SELECT cust_name, cust_contact
    FROM Customers AS C, Order AS O, OrderItems AS OI
    WHERE C.cust_id=0.cust_id
    AND OI.order_num=O.order_num
    AND prob_id='RGAN01';

    使用不同类型的联结:自联结、 自然联结、外部联结

    1)自联结:

    问题: 发送一封信件给为JIM Jones所在的公司工作的所有客户,需要首先找出Jim Jones工作的公司,然后找出为此公司工作的客户.

    方法一:子查询,返回Jim Jones工作的公司的cust_name

    SELECT cust_id, cust_name, cust_contact
    FROM Customers
    WHERE cust_name=(SELECT cust_name
        FROM Customers
        WHERE cust_contact='Jim Jones');

     
    方法二:使用联结
    SELECT c1.cust_id, c1.cust_name, c1.cust_contact
    FROM Customers AS c1, Customers AS c2
    WHERE c1.cust_name=c2.cust_name
     AND c2.cust_contact='Jim Jones';
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    利用序列化进行深度克隆
    原型链
    本地储存cookie,localStorage,sessionStorage
    ES6创建类
    hexo基本命令
    mouseent和mouseover的区别
    Event
    offset,client,scroll
    字符串的常用方法
    数组去重
  • 原文地址:https://www.cnblogs.com/zxqstrong/p/5546340.html
Copyright © 2011-2022 走看看