mysql

1.增删改查
1.1查询
查看表结构
desc 表名;

查看表数据
select *from admininfo;

1.2增加
添加一条数据
insert into 表名 values(null,‘admin’,‘admin123’,default);
数据是自增的不需要用户指定所以用null
一次添加多条
insert into表名(name,hours)//括号里面的是列名
select ‘JavaWEB’,150 UNION //union 连接数据
select ‘oracle’,30 UNION
select ‘linux’,30

表填充向表1 填充表2 的数据
insert into 表1
select name,address from 表2;

-表复制(备份):把一个表的表结构和数据复制到另一个表中
create table stuinfo_bak AS
select *from stuinfo;
select *from stuinfo_bak;

1.3修改
update stuinfo set address=‘斐济’;-- 整个表都被修改
update stuinfo set address =‘斐济’ where name=‘haha’//只修改一段数据

1.4删除
delete from stuinfo_bak where id=3;-- 匹配添加删除
delete from stuinfo_bak;-- 删除整张表

别名 as 后面加别名
select ename as’名称’,sal’工资’,deptno as ‘部门编号’ from emp;

排序 irder by 列名 降序/升序 asc 默认升序 desc降序
– 根据工资给员工信息做降序排序
字符,数字,日期都能做排序
order by 后面的列可以使用虚拟列(没有在from后面的结果中)
select * from emp order by sal desc;

where 对数据进行筛选
select xx from 表
[where 条件]
[order by xx [asc|desc]]
[group by xx having 子句]
注意:where 条件中的列必须出现在from后面的结果集(表|查询结果)中

2.函数

2.1 字符函数
select LENGTH(‘中国ahha’); – 字节长度
select CHAR_LENGTH(‘中国haha’);-- 字符长度
select CONCAT(‘hello’,‘world’)-- 链接字符 helloworld
select CONCAT_WS(’#’,‘hello’,‘word’);
//获取小数点后几位
select FORMAT(1234/5678,2);-- 1234.57
//替换字符位置
select INSERT(‘hahahehe’,5,4,‘xixi’);-- hahaxixi 替换(按位置
//从哪插入
select insert(‘hahahehe’,5,0,‘xixi’);-- hahaxuxuhehe 插入
//查询位置 LOCATE()
select LOCATE(‘a’,‘haha’)-- 查询第一个a
select LOCATE(‘a’,‘haha’,3)-- 从第3个位置开始查询下一个a

左右填充 LPAD()
select lpad(‘1’,4,‘0’); – 0001
select lpad(‘100’,4,‘0’); – 0100

//取子串 substr substring 从第几位开始取 ,取几位数
select SUBSTR(‘4300302012425124x’,7,8);
select SUBSTRING(‘1257473856629385x’,7,8);
– 字符串的比较 STRCMP(a,b) 返回 0 -1
select strcmp(‘abc’,‘bcd’); – -1

LCASE(s)/LOWER(s) 将字符串 s 的所有字母变成小写字母
UCASE(s)/UPPER(s) 将字符串转换为大写
LEFT(s,n) 返回字符串 s 的前 n 个字符
RIGHT(s,n) 返回字符串 s 的后 n 个字符
LPAD(s1,len,s2) 在字符串 s1 的开始处填充字符串 s2,使字符串长度达到 len
RPAD(s1,len,s2) 在字符串 s1 的结尾处添加字符串 s2,使字符串的长度达到 len
LTRIM(s) 去掉字符串 s 开始处的空格
RTRIM(s) 去掉字符串 s 结尾处的空格
TRIM(s) 去掉字符串 s 开始和结尾处的空格
MID(s,n,len) 从字符串 s 的 n 位置截取长度为 len 的子字符串,同 SUBSTRING(s,n,len)
SUBSTRING(s, start, length) 从字符串 s 的 start 位置截取长度为 length 的子字符串
SUBSTR(s, start, length) 从字符串 s 的 start 位置截取长度为 length 的子字符串
REPEAT(s,n) 将字符串 s 重复 n 次
REPLACE(s,s1,s2) 将字符串 s2 替代字符串 s 中的字符串 s1
REVERSE(s) 将字符串s的顺序反过来
STRCMP(s1,s2) 比较字符串 s1 和 s2,如果 s1 与 s2 相等返回 0 ,如果 s1>s2 返回 1,如果 s1<s2 返回 -1
SPACE(n) 返回 n 个空格

2.2 日期函数
– 1.查询系统当前时间
select CURDATE(); – 2020-04-23
select now(); – 2020-04-23 14:26:46
select SYSDATE(); – 2020-04-23 14:26:46
select CURRENT_TIMESTAMP(); 2020-04-23 14:27:21

– 查询时间中的某一部分
selece year(CURDATE()); – 年
selece month(CURDATE()); – 月
selece day(CURDATE());-- 日
select DAYNAME(CURDATE());-- Thursday 星期几
select WEEKDAY(CURDATE());-- 3 星期几 星期日是0
select QUARTER(CURDATE()); – 获取季度 2
select extract(year from CURDATE());

– 时间的操作
– 间隔
select DATEDIFF(‘2020-05-01’,CURDATE()); – 得到的是正数
select ADDDATE(CURDATE(),8); – 8 代表的是天数
select ADDDATE(CURRENT_DATE(),INTERVAL 8 year); – 加8年
select ADDDATE(CURRENT_DATE(),INTERVAL -8 year); – 减去8年
select SUBDATE(CURRENT_DATE(),INTERVAL 8 year); – 减8年
select LAST_DAY(CURRENT_DATE());-- 获取本月的最后一天

2.3 数学函数
显示在一个月为30天的情况下所有雇员的日薪金,忽略余数
select ename,ROUND(sal/30) from emp; – 四舍五入
– floor(sal/30) 小于这个数的最大整数
– ceil(sal/30) 大于这个数的最小整数
– `TRUNCATE(sal/30,0) 截断
abc(x)返回x的绝对值
ceil(X) 返回大于或等于x的最小整数
FLOOR(x)返回小于或等于 x 的最大整数  
MOD(x,y) 返回 x 除以 y 以后的余数 
PI() 返回圆周率(3.141593)
POW(x,y)/POWER(x,y) 返回 x 的 y 次方
RAND() 返回 0 到 1 的随机数
ROUND(x) 返回离 x 最近的整数
SIGN(x) 返回 x 的符号,x 是负数、0、正数分别返回 -1、0 和 1 
TRUNCATE(x,y)返回数值 x 保留到小数点后 y 位的值(与 ROUND 最大的区别是不会进行四舍五入)

2.4 统计函数
sum(); 求总
avg(): 求平均
max():求最大
min():求最小
count():求个数

聚合函数
group by
group by 列1,列2
越靠近group by 的优先级越高
group by + having
having :在分组数据上面做筛选
分组 & 聚合函数(统计函数)
sum()/avg():只能放在数字列
max():
min():
count():求个数 count()
注意:聚合函数不会统计null
例:
select subjectId,COUNT(
) from questioninfo
GROUP BY subjectId;

表联接
将多个表的数据列合成一张表
一般是有主外键关系的表
2.1 内联:两个表都有的数据才会显示
语法1:
select ., from tab1 ,tab2
where tab1.主键 = tab2.外键
例:
select ename,job,sal,hiredate,dname,loc
from emp e,dept d
where e.deptno=d.deptno;

语法2:
select … from tab1 inner join tab2
on tab1.主键 = tab2.外键
例:
select ename,job,sal,hiredate,dname,loc
from emp e inner join dept d
where e.deptno=d.deptno;

自连接
select * from emp;
– 请列出雇员的名称及上司的名称
select e.ename as 雇员名, m.ename as 上司名称
from emp e,emp m
where e.mgr = m.empno;

外联:左外联 & 右外联 左外联:看左表 左表的数据都能显示(一般主键表),
– 右表展示与之对应的,如果没有与之对应的数据,用null填充
– LEFT [OUTER] JOIN… on 关系列
– 在表联接中如果有多个表有相同的列名,一定要用别名区分
select d.deptno,dname,loc,ename,sal
from dept d left JOIN emp e
on d.deptno = e.deptno;
总结 表联接:把多张表联接成一张表,再做条件筛选,效率很低

– 3.子查询
– 语法: select … from 表 where xx=(select xx from 表);
– =:表示子查询中只有一个数据,
– 3.1 查询的数据再表1,但是条件数据再表2
– 3.2 查询的数据在同一张表,但是条件的数据不直接,需要计算统计

例子
– 请查找DALLAS 工作的雇员信息
select *from emp where deptno=
(select deptno from dept where loc=‘DALLAS’)

– 练习:查询在ACCOUNTING这个部门上班的员工
select * from emp where deptno=
(select deptno from dept where dname=‘ACCOUNTING’);

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值