zoukankan      html  css  js  c++  java
  • sql小总结

    1 左连接又称内部连接 前提:两个表格内都有同样的值。

    2 有的时候,我们有需要将由不同栏位获得的资料串连在一起。每一种数据库都有提供方法来
    达到这个目的:
    MySQL: CONCAT()
    Oracle: CONCAT(), ||
    SQL Server: +
    CONCAT() 的语法如下:
    例子1:
    MySQL/Oracle:
    SELECT CONCAT(region_name,store_name) FROM Geography
    WHERE store_name = 'Boston';
    结果:'EastBoston'
    例子2:
    Oracle:
    SELECT region_name || ' ' || store_name FROM Geography
    WHERE store_name = 'Boston';
    结果:'East Boston'
    例子3:
    SQL Server:
    SELECT region_name + ' ' + store_name FROM Geography
    WHERE store_name = 'Boston';
    结果:'East Boston'

    3 SUBSTRING
    SQL 中的 substring 函数是用来抓出一个栏位资料中的其中一部分。这个函数的名称在不同
    的数据库中不完全一样:
    MySQL: SUBSTR(), SUBSTRING()
    Oracle: SUBSTR()
    SQL Server: SUBSTRING()
    SUBSTR(str,pos): 由<str>中,选出所有从第<pos>位置开始的字符。请注意,这个语法不适
    用于SQL Server 上。
    SUBSTR(str,pos,len): 由<str>中的第<pos>位置开始,选出接下去的<len>个字符。
    SELECT SUBSTR(store_name, 3)
    FROM Geography
    WHERE store_name = 'Los Angeles';
    结果:'s Angeles'
    例2:
    SELECT SUBSTR(store_name,2,4)
    FROM Geography
    WHERE store_name = 'San Diego';
    结果:'an D'

    4 TRIM
    SQL 中的 TRIM 函数是用来移除掉一个字符串中的字头或字尾。最常见的用途是移除字首
    或字尾的空白.
    TRIM([[位置] [要移除的字符串] FROM ] 字符串): [位置] 的可能值为 LEADING (起头),
    TRAILING (结尾), or BOTH (起头及结尾)。 这个函数将把 [要移除的字符串] 从字符串的起
    头、结尾,或是起头及结尾移除。如果我们没有列出 [要移除的字符串] 是什么的话,那空
    白就会被移除。column row
    create table test(Name char(20),Address char(50),City char(30),Phone char(11))

    alter table test add Id char(2)
    not null, unique, check,primary key ,foreign key

    5 UNIQUE 限制是保证一个栏位中的所有资料都是有不一样的值。
    例:
    CREATE TABLE Customer
    (SID integer Unique,
    Last_Name varchar (30),
    First_Name varchar(30));
    "SID" 栏位不能有重复值存在,而 "Last_Name" 及 "First_Name" 这两个栏位则是允许有重
    复值存在。
    请注意,一个被指定为主键的栏位也一定会含有 UNIQUE 的特性。相对来说,一个
    UNIQUE 的栏位并不一定会是一个主键。

    6 CHECK 限制是保证一个栏位中的所有资料都是符合某些条件。
    例:
    CREATE TABLE Customer
    (SID integer CHECK (SID > 0),
    Last_Name varchar (30),
    First_Name varchar(30));
    "SID" 拦只能包含大于 0 的整数。
    请注意,CHECK 限制目前尚未被执行于 MySQL 数据库上。
    主键 and 外来键 将于下两页中讨论。

    7 主键
    MySQL:
    CREATE TABLE Customer
    (SID integer,
    Last_Name varchar(30),
    First_Name varchar(30),
    PRIMARY KEY (SID));
    Oracle:
    CREATE TABLE Customer
    (SID integer PRIMARY KEY,
    Last_Name varchar(30),
    First_Name varchar(30));
    SQL Server:
    CREATE TABLE Customer
    (SID integer PRIMARY KEY,
    Last_Name varchar(30),
    First_Name varchar(30));

    以下则是以改变现有表格架构来设定主键的方式:
    MySQL:
    ALTER TABLE Customer ADD PRIMARY KEY (SID);
    Oracle:
    ALTER TABLE Customer ADD PRIMARY KEY (SID);
    SQL Server:
    ALTER TABLE Customer ADD PRIMARY KEY (SID);
    请注意,在用ALTER TABLE 语句来添加主键之前,我们需要确认被用来当做主键的栏位是
    设定为 『NOT NULL』 ;也就是说,那个栏位一定不能没有资料。

    8 外键
    表A 表B a是表A中的主键,a在表B中是外键。B中的数据不能没有不在A中的数据。
    以下列出几个在建置 ORDERS 表格时指定外来键的方式:
    MySQL:
    CREATE TABLE ORDERS
    (Order_ID integer,
    Order_Date date,
    Customer_SID integer,
    Amount double,
    Primary Key (Order_ID),
    Foreign Key (Customer_SID) references CUSTOMER(SID));
    Oracle:
    CREATE TABLE ORDERS
    (Order_ID integer primary key,
    Order_Date date,
    Customer_SID integer references CUSTOMER(SID),
    Amount double);
    SQL Server:
    CREATE TABLE ORDERS
    (Order_ID integer primary key,
    Order_Date datetime,
    Customer_SID integer references CUSTOMER(SID),
    Amount double);
    以下的例子则是藉着改变表格架构来指定外来键。这里假设 ORDERS 表格已经被建置,而
    外来键尚未被指定:
    MySQL:
    ALTER TABLE ORDERS
    ADD FOREIGN KEY (customer_sid) REFERENCES CUSTOMER(sid);
    Oracle:
    ALTER TABLE ORDERS
    ADD (CONSTRAINT fk_orders1) FOREIGN KEY (customer_sid) REFERENCES
    CUSTOMER(sid);
    SQL Server:
    ALTER TABLE ORDERS
    ADD FOREIGN KEY (customer_sid) REFERENCES CUSTOMER(sid);

    9 视图(新学点)
    视观表 (Views) 可以被当作是虚拟表格。它跟表格的不同是,表格中有实际储存资料,而
    视观表是建立在表格之上的一个架构,它本身并不实际储存资料。
    建立一个视观表的语法如下:
    CREATE VIEW "VIEW_NAME" AS "SQL 语句"
    "SQL 语句" 可以是任何一个我们在这个教材中有提到的 SQL。
    create view v_test as select * from test

    10 清除表中数据 truncate table (新学的)
    TRUNCATE TABLE 的语法为下:
    TRUNCATE TABLE "表格名"

    11 union
    UNION 的语法如下:
    [SQL 语句 1]
    UNION
    [SQL 语句 2]
    SELECT Date FROM Store_Information
    UNION
    SELECT Date FROM Internet_Sales
    结果:Date
    Jan-05-1999
    Jan-07-1999
    Jan-08-1999
    Jan-10-1999
    Jan-11-1999
    Jan-12-1999

    12 union all
    UNION ALL 的语法如下:
    [SQL 语句 1]
    UNION ALL
    [SQL 语句 2]
    SELECT Date FROM Store_Information
    UNION ALL
    SELECT Date FROM Internet_Sales
    结果:Date
    Jan-05-1999
    Jan-07-1999
    Jan-08-1999
    Jan-08-1999
    Jan-07-1999
    Jan-10-1999
    Jan-11-1999
    Jan-12-1999

    13 intersect
    INTERSECT 的语法如下:
    [SQL 语句 1]
    INTERSECT
    [SQL 语句 2]
    SELECT Date FROM Store_Information
    INTERSECT
    SELECT Date FROM Internet_Sales
    结果:Date
    Jan-07-1999
    UNION 是联集,而 INTERSECT 是交集。
    请注意,在 INTERSECT 指令下,不同的值只会被列出一次。

    14 minus
    MINUS 的语法如下:
    [SQL 语句 1]
    MINUS
    [SQL 语句 2]
    SELECT Date FROM Store_Information
    MINUS
    SELECT Date FROM Internet_Sales
    结果:Date
    Jan-05-1999
    Jan-08-1999

    15 Exists
    基本上, EXISTS 是用来测试内查询有没有产生任何结果。如果有的话,系统就会执行外
    查询中的 SQL。若是没有的话,那整个 SQL 语句就不会产生任何结果。
    SELECT "栏位1"
    FROM "表格1"
    WHERE EXISTS
    (SELECT *
    FROM "表格2"
    WHERE [条件])

    16 Case
    CASE 是 SQL 用来做为 if-then-else 之类逻辑的关键字。 CASE 的语法如下:
    SELECT CASE ("栏位名")
    WHEN "条件1" THEN "结果1"
    WHEN "条件2" THEN "结果2"
    ...
    [ELSE "结果N"]
    END
    FROM "表格名"
    "条件" 可以是一个数值或是公式。 ELSE 子句则并不是必须的。


    select a1.Rid ,a1.Rname,count(a2.Rname)AS'排序'
    from Result a1,Result a2
    where a1.Rname<=a2.Rname or(a1.Rid=a2.Rid and a1.Rname=a2.Rname)
    group by a1.Rid,a1.Rname
    order by a1.Rname DESC,a1.Rid DESC

    17 alter table ---------修改表结构
    用法: alter table 表名
    alter column 列名 类型 ---------修改列的类型
    drop column 列名 --------删除列
    add (column) 列名 --------增加列,实际用时不加 column

    1.左连接返回left outer join 关键字左侧指定的表的所以行和右侧指定的表的匹配的行。
    2.右连接返回right outer join 关键字右侧指定的表的所以行和左侧指定的表的匹配的行。
    3.完全外连接返回来自两个表的所以匹配和非匹配行使用full outer join 关键字。 交叉连接就是笛卡尔积,A表有5行,B表有10行,使用交叉连接就有50行。 等值连接是内连接的一种特殊形式,它是要选择所有表的所以属性列。 自连接就是一个表和自己连接。为区分同一个表的两个实例,表被给出两个别名。

  • 相关阅读:
    SPRING-BOOT系列之简介
    SPRING-BOOT系列之Spring4快速入门
    Java网络编程
    python中cursor操作数据库(转)
    TextView显示HTML文本时<IMG>标签指定图片的显示处理
    DBCP连接池介绍
    spring中propertyplaceholderconfigurer简介
    NoSQL 数据建模技术(转)
    分布式服务框架 Zookeeper -- 管理分布式环境中的数据(转载)
    Linux下MySQL5.6的修改字符集编码为UTF8
  • 原文地址:https://www.cnblogs.com/annabook/p/4395414.html
Copyright © 2011-2022 走看看