limit 是mysql 特有的
Oracle 中使用rownum
常用命令
查询当前使用的数据库 select database(); 查询数据库版本 select version(); 终止一条sql \c 退出msql exit 查看当前库中的表 show tables; 查看其他数据中的表 show tables form <database name>; 查看表的创建语句 show create table <table name>; 查询表设计 desc <table name>
数据个中 字符 使用单引号'' 避免使用""
实际开发避免使用*
数据库中 null 不是值 不能使用= 只能用 is null 或 is not null 判断
select 5 ... from 1 ... where 2 .... group by 3 .... having 4 .... order by 6 .... limit 7
条件查询
运算符 | 说明 |
---|---|
= | 等于 |
<> 或 != | 不等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
between...and | 两个值之间 >= and <= |
is null | 为null (is not null 不为空) |
and | 并且 |
or | 或 |
in | 包含 ,相当于多个 not in |
not | not取非 主要在 in 或is 中 |
like | 模糊查询 %like% |
distinct | 去重(select distinct 只能这样使用) 去重全部字段或联合去重 |
%like 不走索引,避免使用
\转义字符 一起使用_
distinct 必须在select 的第一个字段
例如: select distinct deptno,job .....
10-clerk 和 20-clerk 是不重复的
会把字段组合到一起去重
deptno | job |
---|---|
10 | clerk |
10 | max |
20 | clerk |
20 | max |
and 与 or 优先级
运算及优先级不确定时,使用()
number>100 and id= 1 or id =2, 运算 number > 100 and id =1 或 id = 2 两个条件 number>100 and (id =1 or id=2) 运算 number >100 后 id =1 or id =2
order by asc 升序 order by desc 降序
多字段排序 按条件顺序,分级处理
select name,sal from emp order by sal desc, name asc; 先根据sal 降序排序, 在sal相同时候,在根据 name 升序排序
分组数
分组函数 是对一组数据进行操作的 会自动忽略null
分组函数不能直接使用 where 中
函数写到查询过程中不走索引,函数用在select 中
分组函数 在group by 后执行, 一般都一起使用
count | 计数 |
---|---|
sum | 求和 |
avg | 平均 |
max | 最大 |
min | 最小 |
group by 和 having
group by 按照某个字段或者没写字段进行分组
having 对分组之后的数据进行再次过滤
当没有group by 时 整张表作为一组
sql语句中有 group by 分组后 select 只能有 分组后的字段,不能有其他字段
例子 : 查询公司每个岗位的最高工资
select max(sal),job from emp group by job;
列子:找出每个 部门不同的 工作岗位的 最高薪资
select deption,job,max(sal) from emp group by deption,job;
列子: 查询部门最高 工资 大于3000 的部门
select max(sal),deptno from emp group by deptno having max(sal) > 3000; 方式二 效率高 select max(sal),depton from emp where sal>3000 group by deptno;
连接查询
-
内连接 inner .. .join ...on //inner 可以省略
-
等值连接 table1 join table2 on 1.id=2.id
-
非等值连接 例如: join .. on 1.id between 2 and 4;
-
自连接 (一张表当两张表)
-
-
外连接
-
左外连接 left .. join .. on
-
右外连接 right ..join ..on
-
-
全连接 (基本不用)
子查询
select ( select)
from ( select)
where( select)
union 查询结果集相加
查询结果 列 的数量必须一致
结果集合成一张新表
select ....from ..... union select ....from...
limit
通用分页
常用字段类型
类型 | 描述 |
---|---|
Char() | 固定长度 |
Varchar() | 可变长 |
double(10位,2小数点) | 浮点数 |
Float() | 浮点数 |
int() | 整型 |
bigint(长度) | 长整型 |
Date | 日期 年月日 |
DateTime | 日期 年月日 时分秒 毫秒 |
time | 日期 时分秒 |
BLOB | BinaryLarge Objcet(二进制大对象) 视频等流媒体信息 |
CLOB | CharacterLarge Object(字符大对象) 储存4G的字符串 |
insert into
insert into table(字段1,字段2.....) values(值1,值2.....) ,(值2.1,值2.2.....)
需要 字段与值 一一对应
update
update table set 字段1 = 值 , 字段2 = 值..... where
没有where 做全表更新
delete
delete from table where 条件
truncate 截断
truncate table name
truncate table emp1;
把表头留下,其他数据删除,不可回滚
约束
-
not null非空
-
unique 唯一约束
-
primary key 主键约束
-
auto_increment 主键自增
-
-
foreign key 外键约束
-
check 自定义检测约束 (不推荐使用,mysql还不支持)
外键约束 ——不推荐使用
外键约束 foreign key
外键字段 添加有外键约束的字段
外键值 外键字段中的每一个值
foreign key(字段1) references table(字段2)
表1 作为子表, 字段 外键约束 表2
表1的 外键约束字段的 值,只能和表2 的字段 一样
存储引擎
innoDB 推荐写 表
-
行锁
-
事务
-
服务器崩溃后 自动恢复
-
COMMIT提交 savepoint 和rollback 回滚
-
表空间 tablespace 存表内容
myISAM 推荐读表
-
不支持事务
-
表锁
-
三个文件储存
-
格式文件 存储表结构的定义 mytable.frm
-
数据文件 存储表行的内容 mytable.MYD
-
索引文件 存储表上索引 mytable.MYI
-
-
可以转换为压缩,只读来节省空间
数据库设计三范式
设计表的数据,安装三范式设计不会出现冗余