MySQL记录笔记

设置密码

update user set authentication_string=password("dingliang") where user='root';

SQL语句分类

SQL语句有很多,最好进行分门别类,这样更容易记忆。
分为:

DQL:
	数据查询语言(凡是带有select关键字的都是查询语句)
	select...
DML:
	数据操作语言(凡是对表当中的数据进行增删改的都是DML)
	insert delete update
	insert 增
	delete 删
	update 改
	这个主要是操作表中的数据data。
DDL:
	数据定义语言
	凡是带有create、drop、alter的都是DDL。
	DDL主要操作的是表的结构。不是表中的数据。
	create:新建,等同于增
	drop:删除
	alter:修改
	这个增删改和DML不同,这个主要是对表结构进行操作。
TCL:
	不是王牌电视。
	是事务控制语言
	包括:
		事务提交:commit;
		事务回滚:rollback;
DCL:
	是数据控制语言。
	例如:授权grant、撤销权限revoke....

1.分组函数

  • 分组函数不能够直接使用在where子句中,因为分组函数在使用的时候必须先分组之后才能使用。
    where执行的时候,还没有分组。所以where后面不能出现分组函数。
  • 在一条select语句当中,如果有group by语句的话,select后面只能跟:参加分组的字段,以及分组函数。
  • 使用having可以对分完组之后的数据进一步过滤。
    having不能单独使用,having不能代替where,having必须
    和group by联合使用。

2.执行顺序

书写顺序?
	select
	...
	from
	...
	where
	...
	group by
	...
	having
	...
	order by
执行顺序?
	1. from
	2. where
	3. group by
	4. having
	5. select
	6. order by

3.子查询

select语句中嵌套select语句

	select
		..(select).
	from
		..(select).
	where
		..(select).
# example
select ename,sal from emp where sal > (select min(sal) from emp);
# example
select s.GRADE, t.job, t.avgsal
from (select job, avg(sal) as avgsal from emp group by job) t
         join salgrade s on t.avgsal between s.losal and s.hisal
group by s.GRADE, t.avgsal, t.job ;

4.union合并查询结果集

	select ename,job from emp where job = 'MANAGER' or job = 'SALESMAN';
	select ename,job from emp where job in('MANAGER','SALESMAN');
	# 替换方式
	select ename,job from emp where job = 'MANAGER';
	union
	select ename,job from emp where job = 'SALESMAN';

union的效率要高一些。对于表连接来说,每连接一次新表,
则匹配的次数满足笛卡尔积,成倍的翻。。。
但是union可以减少匹配的次数。在减少匹配次数的情况下,
还可以完成两个结果集的拼接。

  • union在进行结果集合并的时候,要求两个结果集的列数相同
  • 结果集合并时列和列的数据类型也要一致

5.limit(非常重要)

完整用法:limit startIndex, length
startIndex是起始下标,length是长度。
起始下标从0开始。

	select ename, sal from emp order by sal desc limit 20;
	select 
		...
	from
		...
	where
		...
	group by
		...
	having
		...
	order by
		...
	limit
		...

limit在order by之后执行!!!!!!

6.creat

create table 表名(字段名1 数据类型, 字段名2 数据类型, 字段名3 数据类型);

7.insert

insert into 表名(字段名1,字段名2,字段名3...) values(值1,值2,值3);

8.update

update 表名 set 字段名1=值1,字段名2=值2,字段名3=值3... where 条件;

实操

create table avd(
	id int primary key not null auto_increment,
	fh varchar(40) not null,
	name varchar(40),
	subtitle char(1) not null,
	size decimal,
	store char(1),
	create_time date,
)