sql 的基础函数

基础操作

jdbc 操作

基础步骤

// 注册驱动
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/hxwang?characterEncoding=utf-8";
 // 2. 连接数据库,返回数据库的对象
Connection connection = DriverManager.getConnection(url, "root", "root");
// 3. 获取传输器
PreparedStatement preparedStatement = connection.prepareStatement("insert into dept values(?,?,?)");
preparedStatement.setObject(2,dname);
preparedStatement.setObject(3,loc);
preparedStatement.executeUpdate();
preparedStatement.close();
connection.close();

库的操作

创建库

create database 库名 default character set utf-8;
								# 防止中文乱码
用命令行执行sql脚本文件
source F:/java/TCGBIV/codes/nacos-mysql.sql

查询库

show databases;

删除库

drop databases 库名;

表的操作

创建表

create table 表名(字段名 字段类型(长度),字段2,字段3....);

查看表

show tables

修改表

alter table 表名 add column 列名 列的类型;

描述表结构

desc 表名;

删除表

drop table 表名;

数据的操作

查询数据

select * from 表名; 

插入数据

insert into 表名 values(根据字段设置值);

修改数据

update 表名 set 字段名=新值

删除数据

delete from 表名;

数据类型

1, 整型:int
2, 小数:double(不精确) / numeric(a,b) / decimal(a,b)–a是数字的位数b是小数位数
3, 时间: date(年月日) time(时分秒) datetime(年月日时分秒) timestamp(时间戳,毫秒数)
4, 字符串: char / varchar
区别:
char 是固定长度,浪费空间char(10)
varchar 是可变长度,节省空间varchar(10)
特殊场景: 数据长度如果就是固定的,优先选char,因为查的快
5, 图片: 如果想存入数据库,只会存文件的磁盘路径D:/abc/1.jpg,不是存文件本身
————————————————
版权声明:本文为CSDN博主「cgblpx」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u012932876/article/details/121027616

字段约束

非空约束 not null
主键约束 primary key 非空且唯一
唯一约束 unique
外键约束 FOREIGN KEY (本表的键) REFERENCES 要关联的表名(要关联的表的键)

基本函数

基础函数

lower–全转小写
upper–全转大写
length–求长度
substr–截取子串

#substr截取子串
#SUBSTR(a,b)-a是截取谁b是从哪个字符开始
SELECT ename,SUBSTR(ename,2) FROM 表名;
#SUBSTR(a,b,c)-a是截取谁b是从哪个字符开始c是截取的长度
SELECT ename,SUBSTR(ename,2,2) FROM emp

concat–拼接字符串

#concat(a,b,...)拼串-a是列名b是要拼接的数据
#...是指可以有多个参数
SELECT ename,CONCAT(ename,"hello",1,2) FROM emp

replace–替换

#替换replace(a,b,c)-a是字段名把b换成c
SELECT ename,REPLACE(ename,'a','666') FROM emp

IFNULL - 将NULL 值替换

#ifnull(a,b)-a是字段名b是要换成的值
SELECT comm,IFNULL(comm,100) FROM emp#如果是null就换成100

小数的操作

SELECT comm,ROUND(comm) FROM emp#四舍五入,取整
SELECT comm,ROUND(comm,1) FROM emp#四舍五入,保留1位小数
SELECT comm,CEIL(comm) FROM emp#ceil向上取整
SELECT comm,FLOOR(comm) FROM emp#floor向下取整

时间的函数

SELECT NOW() #当前时间
SELECT YEAR('1999-1-1')
SELECT YEAR( NOW() )#当前年
SELECT MONTH( NOW() ),DAY( NOW() )#当前月,当前日
#hour时 minute分 second秒
SELECT HOUR( NOW() ),MINUTE( NOW() ),SECOND( NOW() )
————————————————
版权声明:本文为CSDN博主「cgblpx」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u012932876/article/details/121074062

条件查询

where 精确查询
and 且
or 或
in 条件设计同字段的不同的值可以用in代替or

where 字段 like ‘%a%’; 模糊查询

NULL

#1.null的数据用is /is not关键字来过滤
#练习1:查询没有奖金的员工信息
SELECT * FROM emp WHERE comm IS NULL
#练习2:查询有奖金的员工信息
SELECT * FROM emp WHERE comm IS NOT NULL

BETWEEN … AND…

#练习3:查询工资5000~10000的员工信息
SELECT * FROM emp WHERE 
#sal>=5000 and sal<10000
sal BETWEEN 5000 AND 10000 #[5000,10000]
#练习4:查询2019年入职的员工姓名
SELECT ename FROM emp WHERE 
#hiredate between '2019-1-1' and '2019-12-31'
YEAR(hiredate)=2019
————————————————
版权声明:本文为CSDN博主「cgblpx」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u012932876/article/details/121093744

LIMIT 分页

#练习5:展示前两条员工数据
SELECT * FROM emp LIMIT 2 #只取前n条
SELECT * FROM emp LIMIT 0,2 #从0+1的数据开始,总共展示2条
#练习6:查询岗位是员工的第一条记录
SELECT * FROM emp WHERE job='员工' LIMIT 0,1#limit通常放最后 
————————————————
版权声明:本文为CSDN博主「cgblpx」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u012932876/article/details/121093744

ORDER BY 排序默认升序

#4.order by排序,按照字典顺序排,默认是升序ASC
#练习7:按照工资排序
SELECT * FROM emp ORDER BY sal DESC #按数值降序
#练习8:按照名字排序
SELECT * FROM emp ORDER BY ename DESC #按字母降序
#练习9:按照岗位排序
SELECT * FROM emp ORDER BY job ASC #按汉字对应的编号升序
#练习10:查询15年到19年入职的员工信息只取前两条并按照工资升序排
SELECT * FROM emp WHERE 
YEAR(hiredate) BETWEEN 2015 AND 2019 #区间[2015,2019]
ORDER BY sal #排序,默认的升序
LIMIT 2 #分页,只取前两条,通常放最后
————————————————
版权声明:本文为CSDN博主「cgblpx」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u012932876/article/details/121093744

聚合函数

max() 最大值
min() 最小值
sum() 求和
avg() 平均值
count() 求个数

分组

GROUP BY

#分组:使用group by 
#练习1:统计每个部门的平均薪资
SELECT AVG(sal),deptno FROM emp 
GROUP BY deptno #按照部门分组
#练习2:统计每个部门的最高薪资
SELECT MAX(sal),deptno FROM emp 
#口诀1:查询结果中出现了混合列,包括着聚合列和非聚合列,必须分组
GROUP BY deptno
#口诀2:通常按照非聚合列分组
#练习3:统计每年入职的总人数
SELECT YEAR(hiredate),COUNT(1) FROM emp 
GROUP BY YEAR(hiredate)
#练习4:统计每个岗位的平均薪资
SELECT AVG(sal),job FROM emp
GROUP BY job
————————————————
版权声明:本文为CSDN博主「cgblpx」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u012932876/article/details/121093744

HAVING
把分组后的数据还想继续过滤,使用group by的固定搭配having

#having
#练习5:统计每个岗位的平均薪资,而且只要>=10000的
SELECT AVG(sal) a,job FROM emp
#where AVG(sal)>=10000 
#注意:::where里不能用别名,也不能出现聚合函数
GROUP BY job  #按照非聚合列分组
HAVING a>=10000 #分组后的过滤,a是别名
#练习6:统计每年入职的人数,而且只要19年的
SELECT YEAR(hiredate) ,COUNT(1) FROM emp
WHERE YEAR(hiredate)=2019 
GROUP BY YEAR(hiredate) #分组
#having a=2019 #分组后的过滤
# where比having 高效,因为执行时机要早一些

————————————————
版权声明:本文为CSDN博主「cgblpx」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u012932876/article/details/121093744
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值