• SQL基础巩固


    1.一定要记住,SQL 对大小写不敏感

    2.分号是在数据库系统中分隔每条 SQL 语句的标准方法,这样就可以在对服务器的相同请求中执行一条以上的语句。

    如果您使用的是 MS Access 和 SQL Server 2000,则不必在每条 SQL 语句之后使用分号,不过某些数据库软件要求必须使用分号。

    3.关键词 DISTINCT 用于返回唯一不同的值

    4.SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,请不要使用引号

    5.ORDER BY 语句默认按照升序对记录进行排序。如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。

    6.插入行:INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing')

      插入指定列:INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')

    7.更新(同时可以为空值赋值)

       UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值

    8.删除行:DELETE FROM 表名称 WHERE 列名称 = 值            

     删除表中所有行(表结构不动,只是没有数据):DELETE FROM 表名称  =truncate table

    9.TOP 子句用于规定要返回的记录的数目。

    SELECT TOP 2 * FROM Persons

    SELECT TOP 50 PERCENT * FROM Persons

    10.where后面跟的条件

    (1)like:"%" 可用于定义通配符(模式中缺少的字母)。 如:'%a' 'a%' '%a%'

    _表示任一个字   [abc]_表示以a/b/c开头

    (2)in

     

     

    (3)(not) between and 

     

     

     

    11.使用别名

     

     

     

    (1)表设置 SELECT column_name   FROM table_name AS alias_name

     

     

     

    (2)列名设置 SELECT column_name AS alias_name

     

    12.内连接,左连接,右连接和where条件

    总结:(转自  http://blog.csdn.net/muxiaoshan/article/details/7617533

    1. 对于left join,不管on后面跟什么条件,左表的数据全部查出来,因此要想过滤需把条件放到where后面

    2. 对于inner join,满足on后面的条件表的数据才能查出,可以起到过滤作用。也可以把条件放到where后面。

    3.数据库左连接和右连接的区别:主表不一样

    (1)左连接:只要左边表中有记录,数据就能检索出来,而右边有的记录必要在左边表中有的记录才能被检索出来

    (2)右连接:右连接是只要右边表中有记录,数据就能检索出来

    SQL中on条件与where条件的区别

     数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。

    在使用left jion时,on和where条件的区别如下:

    1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录!!!!!!!

    2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉

     假设有两张表:

    表1:tab2

    id
    size
    1
    10
    2
    20
    3
    30

     

     

     

    表2:tab2

    size
    name
     
    10
    AAA
    20
    BBB
    20
    CCC

     

     

     


    两条SQL:
    1、select * form tab1 left join tab2 on (tab1.size = tab2.size) where tab2.name=’AAA’
    2、select * form tab1 left join tab2 on (tab1.size = tab2.size and tab2.name=’AAA’)

    第一条SQL的过程:
    1、中间表
    on条件: 
    tab1.size = tab2.size
    tab1.id tab1.size tab2.size tab2.name
    1
    10
    10
    AAA
    2
    20
    20
    BBB
    2
    20
    20
    CCC
    3
    30
    (null)
    (null)
    |
    |
    2、再对中间表过滤
    where 条件:
    tab2.name=’AAA’
    tab1.id tab1.size tab2.size tab2.name
    1
    10
    10
    AAA
       
     
    第二条SQL的过程:
    1、中间表
    on条件: 
    tab1.size = tab2.size and tab2.name=’AAA’
    (条件不为真也会返回左表中的记录)
    tab1.id tab1.size tab2.size tab2.name
    1
    10
    10
    AAA
    2
    20
    (null)
    (null)
    3
    30
    (null)
    (null)

        

         其实以上结果的关键原因就是left join,right join,full join的特殊性,不管on上的条件是否为真都会返回left或right表中的记录,full则具有left和right的特性的并集。 而inner jion没这个特殊性,则条件放在on中和where中,返回的结果集是相同的。

    on、where、having的区别
        on、where、having这三个都可以加条件的子句中,on是最先执行,where次之,having最后。有时候如果这先后顺序不影响中间结果的话,那最终结果是相同的。但因为on是先把不符合条件的记录过滤后才进行统计,它就可以减少中间运算要处理的数据,按理说应该速度是最快的。   
         在多表联接查询时,on比where更早起作用。系统首先根据各个表之间的联接条件,把多个表合成一个临时表后,再由where进行过滤,然后再计算,计算完后再由having进行过滤。由此可见,要想过滤条件起到正确的作用,首先要明白这个条件应该在什么时候起作用,然后再决定放在那里。
     
    13.union:UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
       UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
    14.SELECT INTO :SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中。SELECT INTO 语句常用于创建表的备份复件或者用于对记录进行存档。
    SELECT Persons.LastName,Orders.OrderNo INTO Persons_Order_Backup FROM Persons INNER JOIN Orders ON Persons.Id_P=Orders.Id_P
    15.对数据库的操作
    CREATE DATABASE 用于创建数据库。
    CREATE TABLE 表名称(列名称1 数据类型,列名称2 数据类型,列名称3 数据类型,....)    primary key /foreignkey/isNull/uniqueCHECK 约束用于限制列中的值的范围。如果对单个列定义
    CHECK 约束,那么该列只允许特定的值。如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。如 CHECK (Id_P>0)DEFAULT 约束用于向列中插入默认值

    AUTO_INCREMENT 用于设置id自增

    ALTER TABLE 语句用于在已有的表中添加、修改或删除列,alter对表的结构进行修改操作,update对表数据进行操作 
    TRUNCATE TABLE       (deletes only the data inside the table) 只删除数据
    16.函数调用
       GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。可以和having合用,不能同时用where
    例如:SELECT Customer,SUM(OrderPrice) FROM Orders   GROUP BY Customer    HAVING SUM(OrderPrice)<2000
    UCase为转化为大写
    LCASE 函数把字段的值转换为小写
    MID 函数用于从文本字段中提取字符, SELECT MID(column_name,start[,length]) FROM table_name
    LEN 函数返回文本字段中值的长度
    ROUND 函数用于把数值字段舍入为指定的小数位数 SELECT ROUND(column_name列名,decimals 返回的小数位数) FROM table_name
    NOW 函数返回当前的日期和时间。
    FORMAT 函数用于对字段的显示进行格式化。 FORMAT(Now(),'YYYY-MM-DD') !!!!!!!!!项目中用到!!!!
    17.嵌套查询见:
    http://www.cnblogs.com/kissdodog/archive/2013/06/03/3116284.html

    由于时间紧,排版太丑了~~~~>>


     

     






    
    
    
  • 相关阅读:
    OnEraseBkgnd、OnPaint与画面重绘
    .编译ADO类DLL时报错的解决方案
    VC列表框样式
    Codeforces 131D. Subway 寻找环树的最短路径
    Codeforces 103B. Cthulhu 寻找奈亚子
    Codeforces 246D. Colorful Graph
    Codeforces 278C. Learning Languages 图的遍历
    Codeforces 217A. Ice Skating 搜索
    Codeforces 107A. Dorm Water Supply 搜图
    Codeforces 263 D. Cycle in Graph 环
  • 原文地址:https://www.cnblogs.com/alwayswyy/p/4915106.html
Copyright © 2020-2023  润新知