美文网首页
SQL语法入门

SQL语法入门

作者: 晨语凡心 | 来源:发表于2019-02-27 18:07 被阅读0次

    一:介绍

    SQL全称为结构化查询语言

    RDBMS全称为关系数据库管理系统,如SQL SERVER, MYSQL,ORACLE等

    SQL的关键字对大小写并不敏感,所以select与SELECT在SQL 中的意思是一样的

    二:SELECT

    SELECT column 

    FROM table;

    考虑到一列中的数据往往有很多重复值,如果希望挑选出来的数据不含重复值,则可以:

    SELECT DISTINCT column 

    FROM table;

    三:WHERE

    WHERE用来提取满足特定条件的记录,

    SELECT column 

    FROM table

    WHERE condition;

    四:AND, OR, NOT

    根据一个或多个条件来提取记录,

    SELECT column

    FROM table

    WHERE condition1 AND condition2 AND condition3 ...;

    五:ORDER

    对提取的数据按照某一列或几列的值排序,

    SELECT column1, column2, ...

    FROM table_name

    ORDER BY column1, column2, ... ASC|DESC;

    六:INSERT

    插入新的数据

    INSERT INTO table_name (column1, column2, column3, ...)

    VALUES (value1, value2, value3, ...);

    七:NULL

    判断记录是否为空

    SELECT column_names

    FROM table_name

    WHERE column_name IS (NOT) NULL;

    八:UPDATE

    更新满足特定条件的记录的某些值,注意不能忘记WHERE,否则所有所有记录更将被更改

    UPDATE table_name

    SET column1 = value1, column2 = value2, ...

    WHERE condition;

    九:DELETE

    删除满足特定条件的记录

    DELETE FROM table_name 

    WHERE condition;

    十:LIMIT for MYSQL

    限定返回的记录的数量

    SELECT column_name(s)

    FROM table_name

    WHERE condition

    LIMIT parameter 1,parameter 2;

    第一个参数表示从哪一行开始查,默认为0, 即第一行;第二个参数表示取多少行数据

    十一:描述统计函数

    MIN(), MAX(), COUNT(), AVG(), SUM()

    SELECT FUNCTION(column_name)

    FROM table_name

    WHERE condition;

    补充:AVG()忽略NULL值,而不是将其作为“0”参与计算;

    COUNT(*),对表中行数进行计数不管是否有NULL;

    COUNT(字段名),对特定列有数据的行进行计数忽略NULL值;

    SUM(),可以对单个列求和,也可以对多个列运算后求和忽略NULL值,且当对多个列运算求和时,如果运算的列中任意一列的值为NULL,则忽略这行的记录。

    十二:LIKE

    % ----表示0+个character

    _ -----表示一个character

    SELECT column1, column2, ...

    FROM table_name

    WHERE columnN LIKE pattern;

    十三:IN

    指定多个值,只要符合其中一个值,就将记录提取出来

    SELECT column_name(s)

    FROM table_name

    WHERE column_name IN (value1, value2, ...);

    十四:BETWEEN

    指定一个范围,可以是数字范围,日期范围和文本范围

    SELECT column_name(s)

    FROM table_name

    WHERE column_name BETWEEN value1 AND value2;

    十五:AS

    给table或者column指定一个别名,若别名中有空格,需要用[]括起来

    SELECT column_name(s)

    FROM table_name AS alias_name;

    SELECT column_name AS alias_name

    FROM table_name;

    十六:JOIN

    根据两个表之间的某些关系进行连接,有(INNER) JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN

    SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate

    FROM Orders

    INNER JOIN Customers ON Orders.CustomerID=Customers.CustomerID;

    十七:Self JOIN

    自己与自己连接

    SELECT column_name(s)

    FROM table1 T1, table1 T2

    WHERE condition;

    十八:UNION

    将两个SELECT的结果合并,要求:两个结果具有相同的行数,行顺序和行数据类型;

    重复的records只保留其中一个,若要保留所有重复的records则改用UNION ALL

    十九:GROUP BY

    按照一列或多列的值分类,

    SELECT column_name(s)

    FROM table_name

    WHERE condition

    GROUP BY column_name(s)

    ORDER BY column_name(s);

    二十:HAVING

    根据某个整合函数的值对records进行过滤,而WHERE并不能与整合函数连用,

    SELECT column_name(s)

    FROM table_name

    WHERE condition

    GROUP BY column_name(s)

    HAVING condition

    ORDER BY column_name(s);

    二十一:EXIST

    检测某个subquery是否有返回records

    SELECT column_name(s)

    FROM table_name

    WHERE EXISTS

    (SELECT column_name FROM table_name WHERE condition);

    二十二:ANY 和 AND

    如果subquery中有任何一个record满足条件,ANY返回TRUE

    如果subquery中所有records满足条件,ALL返回TRUE

    二十三:INTO

    将SELECT返回的结果复制到一个表中,

    SELECT *

    INTO newtable [IN externaldb]

    FROM oldtable

    WHERE condition;

    或者

    Create table new_table_name (Select * from old_table_name);

    二十四:INSERT INTO

    将SELECT返回的结果复制到另一个表中,

    INSERT INTO table2

    SELECT * FROM table1

    WHERE condition;

    二十五:CASE

    CASE里面列有各种条件,若满足哪种条件,则返回相应的结果,不满足任一种条件,则返回ELSE后的结果,

    CASE

         WHEN condition1 THEN result1

         WHEN condition2 THEN result2

         WHEN conditionN THEN resultN

         ELSE result

    END

    二十六:COMMENT

    单行注释用:--any text

    多行注释用:/*any text*/

    二十七:字符串连接函数

    CONCAT()函数用于将多个字符串连接成一个字符串

    CONCAT(str1,str2,…)   

    CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。

    CONCAT_WS(separator,str1,str2,…)

    GROUP_CONCAT函数返回一个字符串结果,该结果由分组中的值连接组合而成

    GROUP_CONCAT([DISTINCT] expr [,expr ...]

    [ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] [,col ...]]

    [SEPARATOR str_val])

    二十八:窗口函数

    窗口函数的基本语法如下:

        <窗口函数> over (partition by <用于分组的列名>

                                     order by <用于排序的列名>)

    窗口函数有两种:

    1) 专用窗口函数,包括后面要讲到的rank, dense_rank, row_number等专用窗口函数。

    2) 聚合函数,如sum. avg, count, max, min等

    举例1:

    select *,

      rank() over (order by 成绩 desc) as ranking,

      dense_rank() over (order by 成绩 desc) as dese_rank,

      row_number() over (order by 成绩 desc) as row_num

    from 班级表

    举例2:

    select *,

      sum(成绩) over (order by 学号) as current_sum,

      avg(成绩) over (order by 学号) as current_avg,

      count(成绩) over (order by 学号) as current_count,

      max(成绩) over (order by 学号) as current_max,

      min(成绩) over (order by 学号) as current_min

    from 班级表

    如上图,聚合函数sum在窗口函数中,是对自身记录、及位于自身记录以上的数据进行求和的结果。比如0004号,在使用sum窗口函数后的结果,是对0001,0002,0003,0004号的成绩求和,若是0005号,则结果是0001号~0005号成绩的求和,以此类推。不仅是sum求和,平均、计数、最大最小值,也是同理,都是针对自身记录、以及自身记录之上的所有数据进行计算。

    二十九:索引

    提升搜索效率

    常用于索引的数据结构:B-tree,哈希表

    创建索引:

        CREATE INDEX name_index ON TABLE (col1, [col2, ...])

    查询:

        SELECT *** FROM TABLE [{USE|IGNORE|FORCE} INDEX (key_list)] WHERE ……

    三十:条件计数

    使用count()函数实现条件统计的基础是对于值为NULL的记录不计数,常用的有以下三种方式,假设统计num大于200的记录

    select count(num > 200 or null) from a;

    select count(if(num > 200, 1, null)) from a

    select count(case when num > 200 then 1 end) from a

    相关文章

      网友评论

          本文标题:SQL语法入门

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