SQL语法入门

一:介绍

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语法入门)