一.插入删除
1.alter table student add age int;//增加一列年龄
alter table student modify sname varchar(30);//给学生的姓名增加长度
2.truncate table student;//跟delete一样的效果,但是用这个删除之后没有办法恢复 ,而delete删除之后是有机会恢复的
3.insert 的独有的语法
insert into 表(多个列。。。) values(多个值),(多个值),(多个值),
用insert插入另一张表的数据(列的个数和类型要一致)
insert into 表1(列1,列2.。。)select列1,列2.。。from 表2;
4.update emp set sal=sal+100;
5.delete from 表; 全部删除
delete from 表 where 条件; 删除符合条件的记录
外键约束 还有一种行为,主表删除记录,从表与之相关的记录也会跟着删除
语法是:
在外键语句后边加 on delete cascade
例子:
foreign key(cid) references class(cid) on delete cascade
二.查询(select) 格式:select 列名... from 表名 where 条件;
1.逻辑运算:and or not
select * from emp where sal>1000 and sal<2000;
select * from emp where deptno=20 or deptno=30;
2.null值
select * from emp where comm is null;
select * from emp where comm is not null;
3.like(模糊查询)
select * from emp where ename like 'S%';
select * from emp where ename like '%S';
select * from emp where ename like '%S%';
select * from emp where ename like '____';
通配符 % 表示匹配0~多个任意的字符
通配符 _ 表示匹配一个任意字符
4.between .... and ....
1) 必须按有小到大顺序
2) between 包含等于条件
select * from emp where sal between 1000 and 3000;
5.in
select * from emp where job in('SALESMAN','MANAGER');与or的效果一样
6.limit(mysql特有的)
select * from emp limit 3;
select * from emp limit 3,3;
7.order by
select * from emp order by sal asc;
select * from emp order by sal desc;
其中如果不写asc或desc,默认升序
desc降序排列
如果多列排序,如果第一列取值相同,再按照第二列进行排序,例如:
先按工资排序,工资相同的,再按姓名排序:
select * from emp order by sal asc, ename asc; /*如果升序,两个asc都可以省略*/
三.常用函数
(1) 时间加减
date_add(原始时间, 时间间隔)
时间间隔的语法: interval 数字 时间单位
数字可以是正数或负数
select date_add(now(), interval 1 day );
(2) 提取时间的某个部分
extract(时间部分 from 原始时间)
select extract(year from now());
select extract(year_month from now());
返回的结果是一个数字类型
例:要获取1981年入职的员工
select * from emp where extract(year from hiredate)=1981;
(3)类型转换
select cast('11' as signed)+1;
select cast('12.55555' as decimal(5,2));
(4)拼接字符串
concat(值1, 值2, ... 值n)
select concat('a', 'b', 'c');
select concat('a', 18, 'c'); /*可以把其它类型当做字符串拼接*/
(5) 求长度的函数
char_length 按字符为单位统计长度
length 按字节为单位统计长度
utf8mb4编码下,汉字一个字符占三个字节,英文一个字符占一个字节
(6) 标准sql:
case
when 条件1 then 值1
when 条件2 then 值2
...
else 值n
end
整个case...end 最后返回一个值
举例:
select sal,
case
when sal>2000 then '高工资'
when sal between 1000 and 2000 then '中等'
else '低工资'
end from emp;
(7) 组函数
最大值 max(列)
最小值 min(列)
和 sum(列)
个数 count(列) 会排除null值
count(*) 针对这次查询,看看一共有多少行
平均值 avg(列)
(8) 去除重复
distinct
select distinct job from emp; /*去除重复后的职位有哪些*/
select count(distinct job) from emp; /*有几种职位*/
(9) 查询帮助
? contents 总目录
四.分组语法
1.group by 后的列取值相同的会被分为一组
2.语法结构如下
select ... from 表 group by 列1,列2... having 分组条件
3.举例
select deptno,count(*),max(sal) from emp group by deptno;
把部门编号取值相同的分为一组, 配合组函数一起使用
4.分组后 select,order by 的限制
a.select,order by 中的列必须和group by中的列一样
b.其它没有包含在 group by语句中的列,必须和组函数一起用
5.执行的顺序
where 进行一遍条件过滤 , 再执行 group by 分组, 再执行 having中的条件, 再执行select, 再执行order by, 执行limit
6.语法顺序
select ... from ... where ... group by ... having ... order by ... limit;
7.列别名的语法
select 列名 别名 ...
select 列名 as 别名 ...
8.表别名的语法
select ... from 表 别名
select e.* from emp e;
mysql—查询,常用函数,分组语法
最新推荐文章于 2023-06-05 11:30:57 发布