美文网首页
SQL学习笔记(1)

SQL学习笔记(1)

作者: dukecoder | 来源:发表于2015-05-17 16:50 被阅读0次

    这个简单的学习笔记是我通过阅读《Sams Teach Yourself SQL in 10 minutes》这本书总结的。我采用的学习SQL的方法还是Learning by do it,在做完每一个实例之后,隔两天再总结总结,再隔两天在在其他语言的程序(比如C++,JAVA)中利用SQL进行调用数据来测试。

    这里是第一部分,很多例子其实真的是很直观,很容易理解,所以我基本都没有写太多的解释。文中SQL命令关键词大小写不影响,但是建议采用大写。

    学习的样表材料:www.forta.com/books/0672336073/

    1.SELECT

    1.1 检索

    1.1.1 检索多列

    SELECT prod_id, prod_name, prod_price

    From Products;

    1.1.2 检索所有列

    SELECT *
    From Products;

    1.1.3 检索不同值

    SELECT DISTINCT prod_name

    From Products;

    1.1.4 检索限制个数

    SELECT prod_name

    From Products

    LIMIT 5;

    OR if use in oracle:

    SELECT prod_name

    From Products

    where ROWNUM <=5;

    1.2 排序

    1.2.1 排序单列

    SELECT prod_name

    From Products

    order by prod_name;

    1.2.2 排序多列

    SELECT prod_id, prod_name, prod_price

    From Products

    order by prod_price, prod_name;

    其中,prod_price是第一顺序,prod_name是第二顺序,第二顺序只在第一顺序作业下无法分出高下的时候起效。

    1.2.3 排序顺序

    默认是升序,如果想采用降序,需要对想降序的序列指定DESC:

    SELECT prod_id, prod_name, prod_price

    From Products

    order by prod_price DESC, prod_name;

    1.3 过滤

    1.3.1 基础过滤

    在数据库过滤比在客户端过滤好的得多,因为这样避免的通过网络发送多余的数据。过滤的字句为:

    where prod_price < 10; --过滤单值

    where prod_price != 10; --排除单值

    where prod_price between 10 AND 100; 范围过滤

    where prod_price IS NULL; --空值检查

    1.3.2 高级过滤

    where prod_price < 10 AND vend_id = 'DLL01'; --AND

    where prod_price < 10 OR vend_id = 'DLL01'; --OR

    where vend_id in ('DLL01', 'BRS01'); --range

    where NOT vend_id = 'DLL01'; --否定其后条件

    1.3.3 使用通配符过滤

    Concept: wildcard, 通配符, 是用来匹配一部分的特殊字符

    A.使用百分号%过滤

    a.匹配所有“FISHXXXXX”字串

    SELECT prod_name

    From Products

    where prod_name LIKE 'FISH%';

    b.匹配所有“XXXFISHXXXXX”字串

    SELECT prod_name

    From Products

    where prod_name LIKE '%FISH%';

    c.匹配所有“F"开头,"Y”结尾的字串

    SELECT prod_name

    From Products

    where prod_name LIKE 'F%Y';

    B.使用下划线_过滤

    只匹配单个字符

    sqlite> select prod_id, prod_name

    ...> from Products

    ...> where prod_name LIKE '_ inch teddy bear';

    C.使用方括号[]过滤

    指定一个字符集,必须匹配特定位置的单个字符。比如打算查找客户中以J或者K开头的联系人:

    sqlite> select cust_contact

    ...> from Customers

    ...> where cust_contact LIKE '[JK]%'

    ...> ORDER by cust_contact;

    不过在SQLite中貌似无用。

    2. 计算&字段

    2.1 拼接字段

    在SQLite, Oracle, DB2中,使用

    select vend_name || '(' || vend_country || ')'

    from Vendors;

    Results:

    Bears R Us(USA)

    Bear Emporium(USA)

    Doll House Inc.(USA)

    Furball Inc.(USA)

    Fun and Games(England)

    Jouets et ours(France)

    如果使用的是SQL Server,第一句应当用:

    select vend_name + '(' + vend_country + ')'

    如果使用的是MySQL,第一句应当用:

    select Concat(vend_name, '(', vend_country, ')')

    为了保证返回有期望的格式,应当消除多余空格

    select RTRIM(vend_name) || '(' || RTRIM(vend_country) || ')'

    from Vendors;

    2.2 执行计算

    Code:

    SELECT prod_id, quantity, item_price, quantity*item_price AS subtotal

    FROM OrderItems

    WHERE order_num = 20008;

    输出:

    RGAN01 |5 |4.99 |24.95

    BR03 |5 |11.99|59.95

    BNBG01 |10|3.49 |34.9

    BNBG02 |10|3.49 |34.9

    BNBG03 |10|3.49 |34.9

    相关文章

      网友评论

          本文标题:SQL学习笔记(1)

          本文链接:https://www.haomeiwen.com/subject/vwakqttx.html