千纸鹤

  博客园  ::  :: 新随笔  ::  ::  :: 管理
  5 随笔 :: 70 文章 :: 0 评论 :: 9301 阅读
一、查询函数
查询(根据条件查询):select * from 表名 where 条件(六种方式进行查询)
1、比较运算符: > < <> >= <= = !=
2、BETWEEN AND:在这个区间之内
3、and(or):两个表达式且(或)的关系
4、in(not in):在(不在)...里面、distinct:避免查询到重复数据
5、like:模糊查询 %匹配任意多个字符串  _匹配一个字符串
6、排序:ORDER BY 字段名 desc(从大到小)/asc(默认:从小到大)
二、查询结构
where...group by...having...order by(asc:升序 desc:降序)
1、group by(进行分组查询):一般having是和 group by 连用... 目的:分组后进行的条件查询
2、过滤条件
where :在分组之前过滤条件,where后面不可以用聚合函数
having:在分组之后过滤条件,having后面可以用聚合函数
3、示范语句
a.查询出年龄大于22岁的学生信息,按性别分组,统计每组人数 ,显示性别人数大于3的数据
select sex,count(id) FROM student3 where age>22 GROUP BY sex having count(id)>3;
b.列出至少有2个员工的部门 分组 条件
select e.id,e.name,gender,salary,join_date,d.name,count(*) from emp e,dept d where e.dept_id=d.id GROUP BY d.name HAVING count(*)>=2;
三、聚合函数
1、max:最大
max(列名):求这一列最大的值
select max(age) from student:查询出所有学生年龄最大的一个
2、min:最小
min(列名):求这一列最小的值
select min(age) from student:查询出所有学生年龄最小的一个
3、avg:平均值
avg(列名):求这一列的平均值
select avg(age) from student:查询出所有学生年龄的平均值
4、count:计数
统计这一列有多少数据(三种方式进行查询)
select count(id) from 表名
select count(1) from 表名
select count(*) from 表名
5、sum:求和
sum(列名):求这一列的总和
select sum(age) from 表名:查询出所有学生年龄的总和
四、分页函数
1、LIMIT:分页
总共显示多少条数据,下标从0开始
select * from 表名 LIMIT 10:统计前10条数据
select * from 表名 LIMIT n,m:从第n+1条数据开始进行后面统计m条数据
五、单行函数
(1)字符函数
length 获取字节个数
concat 连接字符串
trim 去掉字符串前后空格
replace 替换子字符串
(2)数字函数
round 四舍五入
ceil 向上取整
floor 向下取整
trunc 截断
mod取余
rand 随机数
(3)日期函数
now()
当前系统时间,等同于:sysdate
2022-04-28 10:48:45
curdate()
当前系统日期,不包含时间
2022-04-28
curtime()
当前系统日期,不包含日期
10:48:45
str_to_date
将字符转换成日期
date_format
将日期转换成字符
六、表链接函数
定义:在一个SQL语句中嵌套另一个SQL语句称之为子查询:不要求两表有相关字段
(1)内连接
表结构
select * from emp;(员工表)
select * from dept;(部门表)
select * from grade;(薪资表) gradeName(等级名称) losal(这个级别的最低工资数) hisal(这个级别的最高工资数)
显示的内连接:等值连接
语法规则:inner join 表 on 连接条件
题目:查询出员工信息:员工的编号、员工姓名、性别、薪资、入职日期和员工所在部门
select e.id,e.name,gender,salary,join_date,d.name from emp e inner join dept d on e.dept_id=d.id;
隐式的内连接:等值连接
题目:查询出员工信息:员工的编号、员工姓名、性别、薪资、入职日期和员工所在部门
select emp.id,emp.name,gender,salary,join_date,dept_id,dept.name from emp,dept where dept_id=dept.id;
隐式的内连接:非等值连接
题目:查询每个员工的工资等级
select g.gradeName,e.name from emp e,grade g where e.salary>=g.losal ane e.salary<=g.hisal
(2)外连接
左外连接(left join...on)
语法规则:left join 表 on 连接条件(左连接:即左表为基表,显示左边全部的和右边与左边相同的)
select e.id,e.name,gender,salary,join_date,d.name from emp as e left join dept d on e.dept_id=d.id;
右外连接(right join...on)
语法规则:right join 表 on 连接条件(左连接:即右表为基表,显示右边全部的和左边与右边相同的)
select e.id,e.name,gender,salary,join_date,d.name from emp as e right join dept d on e.dept_id=d.id where e.name like '孙%';
全外连接(full join...on):
语法规则:full join 表 on 左外连接和右外连接的集合(并集)
七、SQL资料
一套Oracle SQL练习题及答案
http://www.2cto.com/database/201203/121949.html
八、存储过程
创建存储过程的语法
delimiter //
create procedure 存储过程的名字(参数)
begin
sql语句
end //
call 存储过程的名字
说明:1、delimiter //:(定义结束语句)
2、create procedure 存储过程的名字(参数):(可填写多个参数)
3、call 存储过程的名字:使用存储过程
《示例一》: 创建存储过程
delimiter //
create procedure 存储过程的名字()
begin
select * from 表名;
end //
《示例二》: 参数仅输进(参数可多个)
delimiter //
create procedure 存储过程的名字(in uname varchar(20),uage int)
begin
select * from 表名 where name=uname and age =uage;
end //

call 存储过程的名字('马云',55)
select * from 表名;
参数示例
in: uname varchar(20)
uage int
《示例三》in:参数仅输进(参数可多个) out:参数仅输出
delimiter //
create procedure 存储过程的名字(in uname varchar(20),uage int,out usex varchar(20) )
begin
select sex into usex from student3 where name=uname and age =uage;
end //

call sp_test3('马化腾',45,@usex);
select @usex
代码说明:out(输出参数去)sex into(输出去 赋值给某个字段:usex)
参数示例
in: uname varchar(20)
uage int
out: usex varchar(20)
《示例四》in:参数仅输进 inout:参数可输入可输出 out:参数仅输出
delimiter //
create procedure 存储过程的名字(in uname varchar(20),inout uage int,out usex varchar(20) )
begin
select sex,age into usex,uage from student3 where name=uname and age =uage;
end //

set @uage=45;
call sp_test4('马化腾',@uage,@usex);
SELECT @uage,@usex
参数示例
in: uname varchar(20)
inout: uage int
out: usex varchar(20)
posted on   隆江猪脚饭  阅读(47)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示