SQL 语句 笔记
Structured Query Language 结构化查询语言
SQL 标准之外,大部分 SQL 数据库程序都拥有它们自己的专有扩展!
RDBMS (Relational Database Management System) 指关系型数据库管理系统。
database 库
create database 建库
create database 数据库名;
alter database 改库
alter database 数据库名;
选中数据库
use 数据库名
table 表
create table 建表
create table 表名(
属性名1 varchar(20) not null,
属性名2 varchar(15) not null,
属性名3 oumeric(12, 2),
primary key (属性名1,属性名2),
foreign key (属性名3) references 另一个表名(属性名)
);
约束字 | |
---|---|
not null | 指示某列不能存储 NULL 值。 |
unique | 保证某列的每行必须有唯一的值。 |
primary key | not null 和 unique 的结合。确保某列(或两个列多个列的结合)有唯一标识。 |
foreign key | 保证一个表中的数据匹配另一个表中的值的参照完整性。 |
check | 保证列中的值符合指定的条件。 |
default | 规定没有给列赋值时的默认值。 |
check 独立一行(,
分隔)定义
// 命名约束
constraint chk_Person check (condition)
追加 check
alter table Persons
add check (condition)
AUTO INCREMENT 自动递增
drop table 删表
drop table 表名;
alter table 改表
// 增加 属性
alter table 表名 add 新的属性名 数据类型;
// 删去 属性
alter table 表名 drop 已有属性名;
索引
CREATE INDEX - 创建索引(搜索键)
create index index_name
on table_name (col1,col2,···)
CREATE UNIQUE INDEX 创建唯一索引
DROP INDEX - 删除索引
drop view view_name
insert into 增
insert into 表名(属性1,属性2,···)
values (属性值1, 属性值2,···);
insert into 表名
values (属性值1, 属性值2,···); // 需要列出插入行的每一列数据
复制表插入
select into
select col(s)
into 插入表名 [in 另一个数据库名]
from 复制表名
where condition;
insert into select
insert into table2
(col1, col2,···, coln)
select col1, col2,···, coln
from 复制表名
where condition;
delete 删
delete from 表名 // 无where则删除表内全部数据,此操作可回滚;truncate 不可回滚
[where 谓词];
update 改
update 表名
set 赋值操作
[from 另一个表中获取属性,供赋值操作]
where 条件筛选
赋值格式:
col1=123, col2='xxx'
case条件分支
case
when pred1 then result1
when pred2 then result2
when pred3 then result3
···
when predn then resultn
else result0
end
select 查
//单表查询(单关系)
select [distinct/all] 属性名1,属性名2,..[可对属性进行加减乘除运算]
from 表名
[where 谓词]; //通过谓词对表的数据项进行筛选, 支持 and or not 比较运算符
[order by 属性名1 desc降序, 属性名2 asc升序]
//联表查询(多关系)
from 表1,表2,..
where 表1.属性A = 表2.属性B; //给定匹配关系
关键字说明:
distinct
去除重复行;all
全部显示(重复行)
where 子句
用于提取那些满足指定条件的记录
select column1, column2, ...
from table_name
where condition;
condition 写法:
列名='xxx'
列名=123
比较字符与关键字
= | 等于 |
<> | 不等于。注释:在 SQL 的一些版本中,该操作符可被写成 != |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
between xx and yy | 在 xx~yy 范围内 |
like | 搜索某种模式,可使用通配符 col1 like '_xxx%' |
in | 指定针对某个列的多个可能值 col1 in (1,3,5) |
is null | col1 is null |
where 子句并不一定带比较运算符,当不带运算符时,会执行一个隐式转换。
当 0 时转化为 false,1 转化为 true。
通配符:
%
匹配任意字符串
_
匹配任意单个字符
[charlist]
字符列中的任何单一字符
[^charlist]
或者[!charlist]
不在字符列中的任何单一字符
逻辑运算关键字:
()
> not
> and
> or
order by 排序
order by column1 [asc|desc], column2, ...
多列时,依次按照列排序,前列同名时,才会考虑后列排序。
asc
:按升序排序。默认
desc
:按降序排序。
mysql
select top n
选取前n项
col1 regexp '^[A-H]'
join 连接 连表
inner join
:如果表中有至少一个匹配,则返回行 必须能找到on匹配才返回left join
:即使右表中没有匹配,也从左表返回所有的行 未匹配的最终列以null填充right join
:即使左表中没有匹配,也从右表返回所有的行 未匹配的最终列以null填充full join
:只要其中一个表中存在匹配,则返回行
where 条件是在临时表生成好后,再对临时表进行过滤的条件。
笛卡尔积
自然连接
链接两个关系中都出现的相同属性取值相等的元组
from 表1 natural join 表2
更名 as
子句
旧名字 as 新名字 //很多语言都有这种操作
concat(url, ', ', alexa, ', ', country) as site_info // 把三个列(url、alexa 和 country)结合在一起,并创建一个名为 "site_info" 的别名
upper(s)/lower(s)
转换字符串大小写\
转义字符union
并 运算 默认自动去除重复,加上all
全部实现intersect
交 运算
set names utf8;
命令用于设置使用的字符集。
union / union all 操作符 取并集
函数
Aggregate 聚合函数
特点就是它们的结果都是一个单一的值,多个行一起应用一个这样的函数后,就变成一行了。
AVG()
- 返回平均值COUNT()
- 返回行数FIRST()
- 返回第一个记录的值LAST()
- 返回最后一个记录的值MAX()
- 返回最大值MIN()
- 返回最小值SUM()
- 返回总和
Scalar 函数
基于输入值,返回一个单一的值
UCASE()
- 将某个字段转换为大写LCASE()
- 将某个字段转换为小写MID()
- 从某个文本字段提取字符,MySql 中使用SubString(字段,1,end)
- 从某个文本字段提取字符LEN()
- 返回某个文本字段的长度ROUND()
- 对某个数值字段进行指定小数位数的四舍五入NOW()
- 返回当前的系统日期和时间FORMAT()
- 格式化某个字段的显示方式
group by
指定聚合函数 按照哪些列进行分组计算
分组依据是值相同分为一组
having 子句
- having 在 group by 之后
- 聚合函数(avg、sum、max、min、count)不能直接作为条件放在where之后,但可以放在having之后
where count > (select AVG(count) from access_log);
having SUM(access_log.count) > 200;
视图 Views
create or replace view view_name as
select column_name(s)
from table_name
where condition;
使用 视图
SELECT * FROM view_name
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)