mysql
select 执行顺序: 1、from 表 2、where条件 3、group by 4、having 5、select 6、order by 7。limit
mysql分组函数 1、 count sum max min avg
2、count(*) 会包含null count(salary)不会计算null
3、null参与运算都是null ifnull(salary,0)
4、会忽略null
5、分组函数不能用于where条件
group by: 按照其个字段或者某些字段进行分组
having:是对分组之后的数据进行再次过滤
select deptno,max(sal) from emp where sal>2900 GROUP BY deptno ##这句优于下一句用having
select deptno,max(sal) from emp GROUP BY deptno having max(sal)>2900
select deptno,avg(sal) from emp GROUP BY deptno having avg(sal)>2000
多表连接
等值连接: select t1.* ,t2.* from emp t1 join dept t2 on t1.deptno=t2.deptno where t1.sal>2000
非等值连接:select e.ename,e.sal,s.GRADE from emp e join salgrade s on e.sal between s.LOSAL and s.HISAL
外连接有主次表关系
select c.ENAME,c.DEPTNO,c.SAL,c.GRADE,d.DNAME,d.DEPTNO from (select a.ENAME,a.DEPTNO,a.SAL,b.GRADE from emp a join salgrade b on a.SAL BETWEEN b.LOSAL and b.HISAL) c join dept d on c.DEPTNO=d.DEPTNO;
select a.ename,a.deptno,a.sal,c.grade,b.dname,b.deptno,d.EMPNO from emp a join dept b on a.deptno=b.deptno join salgrade c on a.SAL BETWEEN c.LOSAL and c.HISAL left join emp d on a.mgr=d.EMPNO
select b.salavg,b.DEPTNO,c.grade from salgrade c join (select avg(a.sal) as salavg,a.DEPTNO from emp a group by a.DEPTNO) b on b.salavg BETWEEN c.losal and c.HISAL
select a.ename,a.DEPTNO,(select b.dname from dept b where a.DEPTNO=b.DEPTNO) from emp a
##insert 可以同时插入多条数据
insert into dept values(11,"aa","aa"),(21,"a2a","a2a")
##表的复制
drop table if exists user
create table dept1 as select * from dept
insert into dept1 select * from dept ##表dept1必须存在
##char是特定的字符长度 若指定了长度 其内容不够会自动补长固定的内存空间 varchar是可变的字符长度 若指定了最大长度 动态分配内存空间
约束:可以保证数据的完整 合法 一致性 非空约束 (not null) 主键约束(primary key) 外键约束(forgien key) 唯一约束(unique)
create table tuser(id int,name varchar(32) not null,create_time datetime default CURRENT_TIMESTAMP,update_time datetime default null on UPDATE CURRENT_TIMESTAMP,PRIMARY key(id))
##外键 外键值可以为null 外键引用(父表)的字段必须具有唯一性约束
create table t_student(sno int primary key,sname varchar(32),cno int,foreign key(cno) references t_class(cno));
##mysql 存储引擎 (表的存储方式)1、MYISAM 是最常见的但不支持事务管理 使用三个文件表格一个完整的表 :1 表结构 .frm 2 表数据 .myd 3 表索引 .myi 支持压缩
2、Innodb 支持事务 行级锁 不可压缩3、memory 不支持事务 数据容易丢失
##索引 1、数据量比较大 2、增删改操作比较少 3、where条件后 create index user_name_index on user(name) drop index user_name_index on user(name) show index from user;
##数据库备份:mysqldump -uroot -pxxx userdb>d:/userdb.sql 数据库还原:mysql -uroot -pxxx ;create database userdb; source d:/userdb.sql

浙公网安备 33010602011771号