zoukankan      html  css  js  c++  java
  • SQL

    SQL

    DBMS: Database Management System

    检索语句

    SELECT:

    • 检索单列 select name(列名) FROM users(表名) ;
    • 检索多列 select id(列名) , name(列名) FROM users(表名) ;
    • 检索所有列 select * FROM users(表名)
    • 检索不同的值 select DISTINCT name from users(表名); ,DISTINCT关键字,它指示数据库只返回不同的值
    • 限制结果(取前5条)select name(列名) from users(表名) limit 5(前5行数据);,指定从哪里开始检索:select name(列名) from users(表名) limit 5(前5行数据) offset 5(从第5条开始); mysql的简写形式 limit 5,5

    注释使用 # /* 注释 */ -- 注释

    排序检索数据

    SELECT 结合ORDER BY的使用

    • 排序数据 select name from users order by name(排序 按照名字排序);
    • 多个列排序 SELECT prod_id, prod_price, prod_name FROM Products ORDER BY prod_price, prod_name; 检索3个列,并按其中两个列对结果进行排序——首先按价格,然后按名称排序。
    • 按列位置排序 SELECT prod_id, prod_price, prod_name FROM Products ORDER BY 2, 3; ORDER BY 2,3表示先按prod_price,再按prod_name进行排序。
    • 指定排序方向 DESC(降序) / ASC(升序,默认就是升序)
      SELECT prod_id, prod_price, prod_name FROM Products ORDER BY prod_price DESC, prod_name; 以价格降序来排序产品

    过滤数据

    SELECT 结合WHERE的使用

    • 使用WHERE子句:SELECT prod_name, prod_price FROM Products WHERE prod_price = 3.49; 在同时使用ORDER BYWHERE子句时,应该让ORDER BY位于WHERE之后
    • 使用WHERE子句操作符:
    操作符 说明
    = 等于
    <> 不等于
    != 不等于
    < 小于
    <= 小于等于
    !< 不小于
    > 大于
    >= 大于等于
    !> 不大于
    BETWEEN 在制定的2个值之间
    IS NULL 为NULL的值

    并非所有的DBMS 都支持这些操作符

    高级数据过滤

    多个WHERE子句,以及与 逻辑操作符AND / OR结合

    • AND操作符:SELECT prod_id, prod_price, prod_name FROM Products WHERE vend_id = 'DLL01' AND prod_price <= 4 ; WHERE子句中的关键字AND,用来指示检索满足所有给定条件的行。
    • OR操作符:SELECT prod_name, prod_price FROM Products WHERE vend_id = 'DLL01' OR vend_id = ‘BRS01’; WHERE子句中使用的关键字OR,用来表示检索匹配任一给定条件的行。
    • 同时使用AND , OR : 任何时候使用具有ANDOR操作符的WHERE子句,都应该使用圆括号明确地分组操作符。不要过分依赖默认求值顺序,即使它确实如你希望的那样。
    • IN 指定取值范围: SELECT prod_name, prod_price FROM Products WHERE vend_id IN ( 'DLL01', 'BRS01' ) ORDER BY prod_name;
    • NOT操作符:SELECT prod_name FROM Products WHERE NOT vend_id ='DLL01' ORDER BY prod_name; 是用来否定其后条件的关键字,也可以使用<>操作符来完成

    使用通配符过滤

    通配符(wildcard):用来匹配值的一部分的特殊字符。
    搜索模式(search pattern):由字面值、通配符或两者组合构成的搜索条件。
    *通配符搜索只能用于文本字段(字符串),非文本数据类型字段不能使用通配符搜索。
    使用LIKE操作符进行通配搜索:

    • % 表示任何字符出现任意次数: SELECT prod_id, prod_name FROM Products WHERE prod_name LIKE 'Fish%'; 找出所有以词Fish起头的name。 LIKE '%bean bag%' 表示匹配任何位置上包含文本bean bag,LIKE 'F%y'表示匹配f开头y结尾的。
    • _匹配单个字符 : SELECT prod_id, prod_name FROM Products WHERE prod_name LIKE '_ inch teddy bear';
    • []指定一个字符集: 只有微软的Access和SQL Server支持集合。 SELECT cust_contact FROM Customers WHERE cust_contact LIKE '[JM]%' ORDER BY cust_contact; 找出所有名字以J或M起头的联系人
    • 不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符。
    • 在确实需要使用通配符时,也尽量不要把它们用在搜索模式的开始处。把通配符置于开始处,搜索起来是最慢的。
    • 仔细注意通配符的位置。如果放错地方,可能不会返回想要的数据。

    创建计算字段

    计算字段是运行时在SELECT语句内创建的。

    • 拼接字段(不同DBMS 语法不同):

    拼接(concatenate)
    将值联结到一起(将一个值附加到另一个值)构成单个值。

    SELECT CONCAT(vend_name ,' (' ,vend_country ,')')
    FROM Vendors
    ORDER BY vend_name; 
    // mysql用 concat 来实现拼接
    
    • AS 别名(给新计算的列定义一个别名):
    SELECT CONCAT(vend_name ,' (' ,vend_country ,')') AS vend_concat
    FROM Vendors
    ORDER BY vend_name  ; 
    // AS 语法
    
    • 执行算术计算(+ - * /):
    SELECT prod_id,
           quantity,
           item_price,
           quantity*item_price AS expanded_price
    FROM OrderItems
    WHERE order_num = 20008; 
    

    使用函数处理数据

    与大多数其他计算机语言一样,SQL也可以用函数来处理数据。函数一般是在数据上执行的,为数据的转换和处理提供了方便。
    每一个DBMS都有特定的函数,不同DBMS支持的函数不同。

    函  数 语  法
    提取字符串的组成部分 Access使用MID();DB2、Oracle、PostgreSQL和SQLite使用SUBSTR();MySQL和SQL Server使用SUBSTRING()
    数据类型转换 Access和Oracle使用多个函数,每种类型的转换有一个函数;DB2和PostgreSQL使用CAST();MariaDB、MySQL和SQL Server使用CONVERT()
    取当前日期 Access使用NOW();DB2和PostgreSQL使用CURRENT_DATE;MariaDB和MySQL使用CURDATE();Oracle使用SYSDATE;SQL Server使用GETDATE();SQLite使用DATE()
    • 文本处理函数:
    SELECT vend_name, UPPER(vend_name) AS vend_name_upcase
    FROM Vendors
    ORDER BY vend_name;
    // UPPER() 文本转换为大写
    
    函  数 说 明
    LEFT()(或使用子字符串函数) 返回字符串左边的字符
    LENGTH()(也使用DATALENGTH()或LEN()) 返回字符串的长度
    LOWER()(Access使用LCASE()) 将字符串转换为小写
    LTRIM() 去掉字符串左边的空格
    RIGHT()(或使用子字符串函数) 返回字符串右边的字符
    RTRIM() 去掉字符串右边的空格
    SOUNDEX() 返回字符串的SOUNDEX值
    UPPER()(Access使用UCASE()) 将字符串转换为大写

    SOUNDEX是一个将任何文本串转换为描述其语音表示的字母数字模式的算法。SOUNDEX考虑了类似的发音字符和音节,使得能对字符串进行发音比较而不是字母比较。虽然SOUNDEX不是SQL概念,但多数DBMS都提供对SOUNDEX的支持

    • 日期和时间处理函数:
    SELECT *
    FROM Orders
    WHERE YEAR( order_date) = 2012;
    // mysql 
    
    • 数值处理函数:

    主要DBMS的函数中,数值函数是最一致、最统一的函数。

    函  数 说 明
    ABS() 返回一个数的绝对值
    COS() 返回一个角度的余弦
    EXP() 返回一个数的指数值
    PI() 返回圆周率
    SIN() 返回一个角度的正弦
    SQRT() 返回一个数的平方根
    TAN() 返回一个角度的正切

    汇总数据

    SQL的聚集函数,如何利用它们汇总表的数据

    函  数 说 明
    AVG() 返回某列的平均值
    COUNT() 返回某列的行数
    MAX() 返回某列的最大值
    MIN() 返回某列的最小值
    SUM() 返回某列值之和
    • AVG:通过对表中行数计数并计算其列值之和,求得该列的平均值
    SELECT AVG(prod_price) AS avg_price
    FROM Products;
    //mysql
    
    • COUNT:帮助确定表中行的数目或符合特定条件的行的数目。
    SELECT COUNT(*) AS num_cust
    FROM Customers;
    //mysql
    
    • MAX:返回指定列中的最大值
    SELECT MAX(prod_price) AS max_price
    FROM Products;
    //mysql
    

    在用于文本数据时,MAX()返回按该列排序后的最后一行。

    • MIN:返回指定列中的最小值
    SELECT MIN(prod_price) AS min_price
    FROM Products;
    //mysql
    

    在用于文本数据时,MIN()返回该列排序后最前面的行。

    -SUM: 用来返回指定列值的和

    SELECT SUM(quantity) AS items_ordered
    FROM OrderItems
    WHERE order_num = 20005;
    //mysql
    
  • 相关阅读:
    算法分析之最小子段求和
    算法分析之最大子段求和(二)
    算法分析之爬楼梯问题
    .net编码规则
    tensorflow mnist
    The tensorflow simplest calculate
    python opencv
    english
    opencv 图片识别
    随机概率
  • 原文地址:https://www.cnblogs.com/iyueyao/p/4323783.html
Copyright © 2011-2022 走看看