一:介绍
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