SQL基础语法
1.基础
-
语句以分号结尾,/* */插入多行注释
-
表的创建
- 创建数据库:create database<数据库名>;
- 创建表:create table <表名>(列的设置);
- 常用约束
- default默认值约束
- primary key主键约束
- not null非空值约束
- 常用数据类型
- char字符串
- varchar可变长度的字符串
- integer整数
- date日期
-
表的删除和更新
-
删除表:drop table <表名>
-
添加列:alter table <表名> add column <列名>
-
删除列:alter table <表名>drop column <列名>
-
插入数据:insert into<表名> values(数据1.数据2,.….)
-
2.查询
- select语句
- 列的查询:select<列名> from<表名>
- 查询表中所有的列:select * from<表名>(数据显示顺序随机)
- 为列设定别名:select <列名> as<新列名> from表名(中文新列名加双引号)
- 常数的查询:select <常值> as<新列名> from<表名>
- 从结果中删除重复行: select distinct<列名>from<表名>(nul数据会合并为一条,distinct只能用在第一个列名之前)
- where条件查询: select <列名> from<表名> where<行的条件>;
- 算术运算符与比较运算符
- 算术运算符 + - * / (null经过算术运算仍然是null)
- 比较运算符
- 大于>小于<等号=不等号<>
- 字符串类型的数据按照字典顺序进行排序,不同于数字大小
- 逻辑运算符
- AND,OR,NOT
3.聚合与排序
- 聚合查询
- 计数count
- 计算所有行数:count(*)
- 计算null以外行数:count(<列名>)
- 计算去除重复数据后的行数: count(distinct<列名>)
- 求和sum
- 求平均
- 求最值max/min
- 计数count
- 对表分组
- group by
- 指定的列称为聚合键或分组列
- null也会作为一组数据
- 聚合键之外的列名不能在select子句出现
- group by子句中不能写列的别名
- where和group by同时使用—where中不能选择聚合函数
- group by
- 为聚合结果指定条件 having
- 写在group by句子之后,用来指定分组的条件
- 可以指定多个排序列
- 可以使用聚合函数和select子句中未出现的列
- 对查询结果排序
4. 数据更新
-
insert插入
-
基本语法—insert into<表名>(列1,列2,…) values(值1,值2,.…)
-
写入空值和默认值
- 写入null就可以插入null值(not null约束的除外)
- 写入default就可以插入默认值(需要有default约束)
-
从其他表复制数据
-
insert into<表名1>(<列名>)
select语句from<表名2>
-
-
-
delete删除
- 删除表中全部数据
- delete from <表名>
- truncate <表名>
- 删除指定行数据—delete from<表名>where<行条件>
- 删除表中全部数据
-
update更新
- update<表名>
- set<列1>=<表达式1>,<列2>=<表达式2>,….where<行条件>
-
事务
-
创建事务——start transaction;
<事务语句>
commit;
-
取消处理 ——start transaction;
<事务语句>
rollback;
-
事务特性ACID 原子性 一致性 隔离性 持久性
-
5. 复杂查询
-
视图
-
创建视图
create view<视图名>(列名1,列名2,…)
as
select语句
-
删除视图
drop view<视图名>;
-
视图的限制
- 不能用order by语句定义视图
- 没有经过聚合汇总、只select了一张表、未使用distinct的视图才可以进行更新,表也随之更新
-
-
子查询
-
基础语法
select<列名>
from (select语句) as<子查询名>;
-
标量子查询
- 必须且只能返回单一值,用括号括起来使用
- 能够使用常数或者列名的地方,SELECT子句、WHERE子句,GROUP BY子句、HAVING子句,ORDER BY子句,都可以使用
- where子句中使用的子查询必须是标量子查询
-
-
关联子查询
select<列名1>,<列名2>…
from<表名> as <主查询名>
where <列名>=
(select<列名>
from<表名>as<子查询名>
where<主查询名>.<列名>=<子查询名>.<列名>);
6.函数,谓词,case表达式
-
函数
- 算数函数
- abs()绝对值
- mod()求余
- round()四舍五入
- 字符串函数
- concat( str1, str2…)拼接
- upper()或lower()大小写转换
- length()计算字符长度
- replace(str, from_str, to_str)替换字符串中的部分字符
- substr(str,start__position,char_nun截取字符串中的一部分
- 日期函数
- current_date获得当前曰期
- current_time 获得当前时间
- current_timestamp获得当前日期和时间
- extract(<日期元素> from<日期>)截取曰期元素
- 转换函数
- cast(<值>as<想转换的类型>)类型转换函数
- coalesce(数据1,数据2,数据3,…)返回左侧开始第一个不是null的值
- 算数函数
-
谓词
- like一致查询
- %_0个字符以上的任意个字符
- -_1个任意字符
- between 范围查询
- is null/ is not null空值查询
- exist / not exist 判断是否存在某个条件的记录
- 通常指定关联子查询作为exist的参数
- 实际应用时写的是exists ()
- exist的子查询尽量写select *
- like一致查询
-
case表达式–条件分支
case when<条件>
then<表达式>
else<表达式>
end
7.集合运算
-
表的加减法
-
并集
select语句
union
select语句
-
交集
-
差集
-
-
表的联结
-
内连接
select<表别名>.<列名>
from<表1> as<别名1>
inner join<表2> as<别名2>
on<联结条件>;
-
外联结
select<表别名>.<列名>
from<表1> as<别名1>
left outer join<表2> as<别名2>
on<联结条件>;
-
交叉联结
select<表别名>.<列名>
from<表1> as<别名1>
cross join<表2> as<别名2>
on<联结条件>;
-