SQL

作者: 人未识 | 来源:发表于2017-10-27 17:10 被阅读0次

    1.建立数据库:
    create database XXX;
    USE Databasename;

    2.建立表:
    create table table_name(
    列名称1 数据类型,
    列名称2 数据类型,
    列名称3 数据类型,
    .... );

    3.插入数据:
    a.原有数据插入:
    SELECT *
    INTO new_table_name [IN externaldatabase]
    FROM old_tablename;
    b.或者只把希望的列插入新表:
    SELECT column_name(s)
    INTO new_table_name [IN externaldatabase]
    FROM old_tablename;
    c.探究SQL插入(insert)大量数据时的效率问题:
    http://www.jianshu.com/p/3a7fb9d7d91f
    d.insert into.....
    INSERT INTO 表名称 VALUES (值1, 值2,....);
    INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....);

    4.更新表的内容:
    UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值;

    5.删除表中的数据:
    DELETE FROM 表名称 WHERE 列名称 = 值;

    6.查询数据:
    a.指定行:
    sql server:SELECT TOP number|percent column_name(s) FROM table_name;
    my sql:select * from table_name limit 3,1; #跳过前3条数据,从数据库中第4条开始查询,取一条数据,即第4条数据
    b.模糊查询:
    LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。
    SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern;
    通配符:
    %: 替代一个或多个字符
    _ :仅替代一个字符
    [charlist]:字符列中的任何单一字符
    [^charlist]或者[!charlist]:不在字符列中的任何单一字符
    正则表达式:
    http://www.cnblogs.com/shimily/articles/6553514.html
    属性名 REGEXP ‘匹配方式’
    正则表达式的模式字符 含义
    ^ 匹配字符串开始的部分
    $ 匹配字符串结束的部分
    . 代表字符串中任意一个字符,包括回车和换行
    [字符集合] 匹配”字符集合”中的任何一个字符
    [^字符集合] 匹配除了“字符集合”以外的任何一个字符
    S1|S2|S3 匹配S1、S2和S3中的任意一个字符串

    • 代表多个该符号之前的字符,包括0和1个
    • 代表多个该符号之前的字符,包括1个
      字符串{N} 字符串出现N次
      字符串{M,N} 字符串出现至少M次,最多N次
      c.条件查询:
      ----IN 操作符允许我们在 WHERE 子句中规定多个值。
      SELECT column_name(s) FROM table_name WHERE column_name IN(value1,value2,...);
      ----BETWEEN 操作符在 WHERE 子句中使用,作用是选取介于两个值之间的数据范围。
      SELECT column_name(s)
      FROM table_name
      WHERE column_name
      BETWEEN value1 AND value2;:
      ----group by,Having:
      SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name HAVING aggregate_function(column_name) operator value;

    d.查询条件:
    比较 =、<、<=、>、>=、!=、<>、!<、!>
    指定范围 BETWEEN AND、NOT BETWEEN AND
    指定集合 IN、NOT IN
    匹配字符 LIKE、NOT LIKE(只能匹配字符串,%代表任意长度,_代表单个字符)
    是否为空值 IS NULL、IS NOT NULL
    多个查询条件 AND、OR(SQL总是会先处理AND操作符!!!然后才会处理OR操作符)
    限制条件 LIMIT
    查询结果不重复:SELECT DISTINCT num FROM grade;
    where 后限定的条件:WHERE EXISTS(NOT EXISTS),WHERE score >=ANY,WHERE score>=ALL (SELECT score FROM scholarship)

    7.数据类型:
    http://www.w3school.com.cn/sql/sql_datatypes.asp
    常用:my sql:varchar(),Int(),date(),double()

    8.表约束:
    NOT NULL:非空。
    UNIQUE:唯一。
    PRIMARY KEY:唯一,不为NULL,每个表都应有一个主键,并且每个表只能一个。
    FOREIGN KEY:一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。
    CHECK:用于限制列中的值的范围。
    DEFAULT:例如:字段名 DEFAULT 'Sandnes',
    备注:请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。

    9.索引:
    a.在表上创建一个简单的索引。允许使用重复的值:
    CREATE INDEX index_name ON table_name (column_name);
    b.在表上创建一个唯一的索引。唯一的索引意味着两个行不能拥有相同的索引值。
    CREATE UNIQUE INDEX index_name ON table_name (column_name);
    c.删除索引:
    my sql:ALTER TABLE table_name DROP INDEX index_name;
    sql server:DROP INDEX table_name.index_name;

    10.sql 日期:
    http://www.w3school.com.cn/sql/sql_dates.asp

    11.sql函数:
    http://www.w3school.com.cn/sql/sql_functions.asp
    Eg:
    a.在MySql中连接要是用CONCAT函数:
    SELECT OrderID,FirstName,LastName,
    CONCAT(FirstName,' ',LastName) AS 'fullname'
    FROM orders
    b.字符函数:left(字段,几个),right(字符, 几个),LTRIM(CharacterValue)
    可以删除左边开始的空格,RTRIM作用类似;SUBSTRING('thewhitegoat',4,5)返回white
    c,日期函数:
    ----GETDATE()返回当前日期和时间。
    PS:在MySql中,等价函数是NOW,在Oracle中是CURRENT_DATE。
    ----DATEPART(datepart,DateValue)--(datepart可以是year,month,quarter,day,dayofyear,week,weekday,hour,minute,second);
    ----DATEDIFF可以让我们得到任意两个日期之间相差的天数(或周数、月数等)。
    DATEDIFF(datepart1,startdate1,startdate2)
    DATEDIFF(day,'7/8/2009','8/14/2009') 37
    PS:MySql中,DATEDIFF函数只允许我们计算两个日期之间的天数,如果想要得到一个正数,结束的日期通常要作为第一个参数:
    DATEDIFF(enddate,startdate)
    Oracle中没有等价函数
    d.转换函数:
    ----CAST函数:允许我们把数据从一种类型转换成另一种类型。
    CAST(expression AS DateType)
    例子:SELECT '2009-04-11' AS 'Original Date',
    CAST('2009--04-11' AS DATETIME) AS 'Converted Date';
    ----isnull:SELECT Description,ISNULL(Color,'Unknown') AS 'Color' FROM Products;
    e.CASE表达式对于把不好理解的值转换成有意义的描述是很有用的。
    SELECT
    CASE CategoryCode
    WHEN 'F' THEN 'Fruit'
    WHEN 'V' THEN 'Vegetable'
    ELSE 'other'
    END AS 'Category',
    ProductDescription As 'Description'
    FROM Products;
    ----CASE
    WHEN ebv.db_no IN (22978, 23218, 23219) THEN 'WECS 9500'
    ELSE 'WECS 9520'
    END as wecs_system;
    ----CASE ebv.db_no
    WHEN 22978 THEN 'WECS 9500'
    WHEN 23218 THEN 'WECS 9500'
    WHEN 23219 THEN 'WECS 9500'
    ELSE 'WECS 9520'
    END as wecs_system;(同上一效果)

    12.别名
    1)列的别名
    SELECT firstname AS fn FROM customers;
    2) 表的别名
    SELECT firstname FROM customers AS cu;
    说明:
    列的别名不能在WHERE中使用列的别名,可以在WHERE中使用表的别名进行!

    相关文章

      网友评论

          本文标题:SQL

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