您好,欢迎访问一九零五行业门户网

Select语句,join,union用法

一、基本的select语句
    1. “*”的注意事项:在select语句中,用*来选取所有的列,这是一个应该抵制的习惯。
    虽然节省了输入列名的时间,但是也意味着获得的数据比真正需要的数据多的多。相应的,也会降低应用程序的性能及网络性能。
    良好的规则是只选所需。
2. join子句
    jion是用来定义如何从多个表中选取数据并组合成一个结果集。
    jion必需是因为(1)我们所要获取的所有信息并不都在一个表中,或者(2)所要返回的信息都在一个表中,但是其上设置的条件信息却在另一个表中。
    jion的共同点是通过记录的连接列,把一条记录同一条或者多条其他记录进行匹配,从而产生出是这些记录的超级的记录。
        2.1 inner join
    inner join只返回进行联接的字段上匹配的记录。inner join是在做排除。
    自引用是为了某种原因把一个表联接回它自身。
    inner join是默认的联接方式。
        2.2 outer join
    outer join有左右联接之分,而inner join没有左右联接之分。
    right(left) outer join是既想要包含右侧表中的所有行,以及左侧表中有匹配记录的行。
        2.3 full join
    full join联接,就是要包含位于联接两侧的表中所有的行。
        2.4 cross join
    cross join没有on联接符,并且将join一侧表中的每一条记录与另一侧的表中所有的记录联接起来。即联接表中的笛卡尔积。
    cross join可用于提供样本数据和科学数据
3. where子句
    一些常用且不太熟悉的操作符:
    between: between num1 and num2
    like: like any% %代表0个或者多个任意字符。_代表单个任意字符。[]表示括号中包含的任意单个字符。^排除下一个。
    exists: exists 查询语句。
4. order by
    你知道吗?查询的返回结果通常是以字母或者数字顺序方式给出,这是偶然的。
    以何种方式给出,在没有指定的情况下,通常取决于sqlserver认为哪一种汇集数据的方式开销最小。因此,返回的结果通常是基于表中数据的物理顺序或者sqlserver用来找寻数据所使用的某个索引。
    默认降序desc,升序是asc
    order by 子句可以基于查询中使用的任何表中的任何字段来进行排序,无论该列是否包含在select列表中。
5. 使用group by 子句聚集数据
    一旦在查询语句中使用了group by,select列表中的每一列要么包含在group by列表中,要不包含在聚集中。
    当聚集不与group by一起使用时,聚集只能与其他聚集一起位于select列表中,而不能与列名搭配出现在select列表中。
    除了count(*) 之外,任何聚集函数都会忽略null值。
6. having子句
    仅当查询语句中有group by子句时使用having子句。
    where子句应用到形成组的每一行上,having子句应用到组的聚集上。
    7. distinct子句
    distinct消除重复数据。如果值是相同的,则该值出现一次。
    distinct出现在列表的开始处,或者出现在count中。
    二、基本的insert语句
    1. 基本结构
    insert [into] table_name [table_column_list] values (data_value_list)
    into是可以省略的。
    table_column_list建议都显式给出,一是增强可读性,二是以后即使是表的结构发生改变,也不会有所影响。
    2. insert into ... select语句
    批量插入数据。
    insert [into] []
三、update语句更改现有数据
    update
    set = [, = ]
    [from ]
    [where ]
    update 可以从一个表中生成数据,但是只影响一个表。
四、delete语句
    delete
    [from]
    [from]
    where
    有关delete的一个小例子:
    films表                                                           actors表
    filmid   |   filmname   |   yearmade                    filmid   |   firstname   |   lastname
    1               'host'           1984                            1                'li'               'si'
    2               'shit'            1999                            2               'wang'          'wu'
                                                                           3               'liu'               'li'
    从actors表中删除在films表中没有匹配的行:
    delete from actors
    from actors a
    left join films f on a.filmid = f.filmid
    where f.filmname is null;
    mysql 语法:delete a.* from actors a left join films f  on a.yearmade = f.yearmade where f. yearmade is null
    mysql不支持双from。
五、union
    union可以让两个或者更多个查询产生单个结果集。
    join水平的合并数据,而union垂直的合并数据。
    union的几个要点:
    1. 要进行union的select 列表中列的数量是相通的。
    2. 合并的结果集返回的标头仅取第一个查询。
    3. 数据类型必须相同或者隐式兼容。
    4. 返回默认是distinct而非all。
其它类似信息

推荐信息