DML-SQL

命令 作用
insert 插入语句
insert into:追加数据
insert overwrite:覆盖数据
UPDATE 更新语句
DELETE 删除语句

增、删、改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-- 插入语句
Insert Into Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')
Insert Into St (S#, Sname, avgScore)
Select S#, Sname, Avg(Score) From Student, SC
Where Student.S# = SC.S#
Group by Student.S# ;
Insert overwrite St (S#, Sname, avgScore)
Select S#, Sname, Avg(Score) From Student, SC
Where Student.S# = SC.S#
Group by Student.S# ;
-- 更新语句-UPDATE 修改某一行数据
UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing' WHERE LastName = 'Wilson'

-- 删除语句-DELETE
DELETE FROM Person WHERE LastName = 'Wilson' --删除行名为Wilson

查询语句

1
2
3
4
5
select expr,列名 as 列的别名,function(列名) as 列的别名
from 表名 as 表的别名
where 条件(对每一个元组进行过滤)
group by 列名(分组) having 对每一组进行过滤
Order by 列名 [asc|desc]
命令 关键字 说明
select expr 常量
when case select when st.score>90 then 1
          when st.score<60 then 0
          else 0
          end label
function count 求个数
sum 求和
avg 求平均
max 求最大
min 求最小
first 返回列中第一个记录的值
last 返回列中最后一个记录的值
UCASE 把字段的值转换为大写
LCASE 把字段的值转换为小写
MID 从文本字段中提取字符
SELECT MID(column_name,start[,length]) FROM table_name;
column_name:必需。要提取字符的字段。
Start:必需。规定开始位置(起始值是 1)。
Length:可选。要返回的字符数。如果省略,则 MID() 函数返回剩余文本。
LEN 函数返回文本字段中值的长度
ROUND 函数用于把数值字段舍入为指定的小数位数。
SELECT ROUND(column_name,decimals) FROM table_name;
column_name 必需。要舍入的字段。
decimals 必需。规定要返回的小数位数。
NOW 函数返回当前系统的日期和时间
FORMAT FORMAT 函数用于对字段的显示进行格式化。


SELECT ProductName, UnitPrice, FORMAT(Now(),'YYYY-MM-DD') as PerDate
FROM Products
from 原理 从表格中选取数据,采用笛卡尔积
join连接 join on
inner join on
INNER JOIN 与 JOIN 是相同的
不保留空值
Left join on 保留左表中所有的数据,右表中不能匹配的数据使用空值填充
Right join on 保留右表中所有的数据,左表中不能匹配的数据使用空值填充
Full join on 保留两个表中所有的数据,,两个表中不能匹配的数据使用空值填充
where 运算符 =、<>、>、<、>=、<=
函数 between BETWEEN ... AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期
like "%" : 可以匹配0个或者多个字符
“ _ ” :只可以匹配一个字符
“\” : 转义字符,用于去掉一些特殊字符 ,使其变为普通字符。比如用"\%"可以去匹配字符%,而“”是去匹配字符“_”.
[charlist]:字符列中的任何单一字符
[^charlist]或者[!charlist]:不在字符列中的任何单一字符
in = exists 是否存在
group by 列名 分组计算
having 条件 函数 count、sum、avg、max、min、first、last、UCASE、LCASE、MID、LEN、ROUND、NOW、FORMAT
运算符 =、<>、>、<、>=、<=;like;in = exists

关系代数操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- 并:求学过002号课的同学或学过003号课的同学学号
Select S# From SC Where C# = ‘002
UNION [ALL] --使用ALL命令之后会保留所有重复的元组
Select S# From SC Where C# = ‘003’;

-- 交:求既学过002号课,又学过003号课的同学学号
Select S# From SC Where C# = ‘002
INTERSECT
Select S# From SC Where C# = ‘003’;

-- 差:假定所有学生都有选课,求没学过002号课程的学生学号
Select DISTINCT S# From SC
EXCEPT
Select S# From SC Where C# = ‘002’;

排序

1
order by columns asc(desc)  #升序或者降序

分组排序

1
2
3
4
5
6
select subject,score,
rank() over(partition by name order by score) rank,
dense_rank() over(partition by name order by score) dense_rank,
row_number() over(partition by name order by score) row_number,
rank() over(order by score) rank2
from score_table --对score_table中的数据按照subject分组对score进行排序

dense_rank、rank与row_number的区别

subject score rank dense_rank row_number rank2
数学 67 1 1 1 1
数学 77 2 2 2 2
数学 78 3 3 3 3
数学 88 4 4 4 4
数学 99 5 5 5 5
语文 60 1 1 1 6
语文 70 2 2 2 6
语文 80 3 3 3 8
语文 80 3 3 4 9
语文 90 5 4 5 10