1. 数据库操作:
创建数据库
create database 数据库名;
查询数据库
show databases;
删除数据库
drop database 数据库名;
选择或切换数据库
use 数据库名;
2.数据表操作:
创建数据表
create table 表名(
列名1(字段名1) 类型 约束,
列名2(字段名2) 类型 约束,
列名3(字段名3) 类型 约束
);
常见数据类型:
int 整型
double 浮点型
varchar 字符串类型
date 日期类型,格式为yyy-mm-dd 年月日
主键约束:
primary key 主键约束 唯一 非空
auto_increment 让主键列数据,实现自动增长
其他约束
not null 非空约束
default 默认值约束
unique 唯一约束
给列表添加外键约束
格式:
CONSTRAINT 外键名 FOREIGN KEY(外键字段) REFERENCES 要关联的表名(主键);
第二中添加方式(创建表后追加):
ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY(外键字段) REFERENCES 要关联的表名(主键);
查看所有数据表
show tables;
查看表结构
desc 表名;
删除表
drop table 表名;
添加列
alter table 表名 add 列名 数据类型 约束;
修改列数据类型
alter table 表名 modify 列名 数据类型 约束;
修改列名
alter table 表名 change 旧列名 新列名 数据类型;
删除列
alter table 表名 drop 列名;
修改表名
rename table 表名 to 新名;
修改表字符集
alter table 表名 character set 字符集;
向表里添加数据 insert
insert into 表名(列名1,列名2,列名3) values (值1,值2,值3)
添加数据,不考虑约束
insert into 表名(列名) values (值);
添加数据,全值给出
insert into 表名 values (全列值);
添加数据,批量添加
insert into 表名
对数据进行修改
update 表名 set 列1=值1 where 条件
where条件:找数据中的唯一性
条件判断语:
&& and
II or
! ont
BETWEEN ... AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。
删除数据
delete from 表名 where 条件
truncate table 表名
注意(truncate是连主键也删除的)
☆
数据库查询基本语句
select 列名1,列名2 from 表名
select 列名 as 表名 from 表名
注:1.as是暂时修改列名
2.可以使用select查询关键字进行运算,包括对列的数据
查询所有
select * from 表名;
distinct去除重复记录
select distinct 列名 from 表名;
数据库条件查询语句
where语句表条件过滤。满足条件操作,不满足不操作,多用于数据的查询与修改。
格式 :
select 字段 from 表名 where 条件;
select * from 表名 where 条件;
in的使用:
IN (value1,value2,...)
出现在where后面,可以添加多个条件
查询,对查询结果进行升序排列
升序 desc
降序 asc
order by 列名
select * from 表名 order by 列名 升序或者降序
注意:默认升序,升序时不写desc也可以
聚合函数:
count:统计指定列不为null的记录行数;
sum:计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
max:函数,某列数据,获取最大值;
min:函数,某列数据,获取最小值;
avg:计算指定列的平均值,如果指定类型不是数值类型,那么计算结果为0;
例如:select count(*) from 列名;
分组查询
qroup by 被分组的列名
注意:1.必须跟随聚合函数;
2.select 查询的时候,被分组的列,要出现在select 选择列的后面
3.结果集是分组查询后,再次进行筛选,不能使用where
分组查询关键字:
having 是在分组后对数据进行过滤
where 是在分组前对数据进行过滤
//对于有外键的表进行清空报错,code:1701错误
//关闭外键约束
SET FOREIGN_KEY_CHECKS=0;
//开启外键约束
SET FOREIGN_KEY_CHECKS=1;
模糊查询
条件添加在like字段后面
_ 包含一个字符
____i 五个字符组成第五个字符是i
i% 以i开头,%号代表任意个字符
%i 以i结尾的字符
%i% 包含i的字符
limit i,n
i表示开始的索引
n表示几条数据
例:
select * from Customer LIMIT 10;
# 检索前10行数据,显示1-10条数据
select * from Customer LIMIT 1,10;
# 检索从第2行开始,累加10条id记录,共显示id为2....11
注意:limit用于分页,是MySQL独有的,sql sever与Oracle没有这种用法
合并两张表查询
union 去除重复
select * from 表1 union select * from 表2;
union all 不去除重复
笛卡尔积 t1(4) * t2(4) = 4*4条
去除笛卡尔积
select * from 表1 别名, 表2 别名 where 条件
说明:
1.条件最好用"别名.字段"的方式
2.字段最好不用*(全部字段),可以挑选需要的字段
内连接 INNER JION
上面的语句就是内连接,但是不是标准的sql语句标准的内连接为:
select * from uesr u inner join info i on u.id=i.uid;
外连接(左连接和右连接)
特点:查询出的结果存在不满足条件的可能
左连接LEFT JOIN
select * from uesr u left join info i where u.id=i.uid;
说明:是先查询出左表(即以左表为主),然后查询右表,右表中满足条件的显示出来,不满足条件的显示NULL。
右连接RIGHT
select * from uesr u right join info i where u.id=i.uid;
左右表不满足条件时,左表显示Null,右表显示数据
自然连接
两张连接的表中名称和类型完全一致的列作为条件,例如emp和dept表都存在deptno列,并且类型一致,所以会被自然连接找到!
select * from t_employee natural join t_department;//自然连接
SELECT * FROM t_employee inner JOIN t_department using(depno);//等同于自然连接
当然左右连接也可以使用自由连接
select * from t_employee natural left join t_department;//左自然连接
select * from t_employee natural right join t_department;//右自然连接
子查询
子查询概念:
一个select语句中包含另一个完整的select语句。
子查询就是嵌套查询,即SELECT中包含SELECT,如果一条语句中存在两个,或两个以上SELECT,那么就是子查询语句了。
l 子查询出现的位置:
- where后,作为查询条件的一部分;
- from后,作表;
l 当子查询出现在where后作为条件时,还可以使用如下关键字:
- any
- all
l 子查询结果集的形式:
- 单行单列(用于条件)
- 单行多列(用于条件)
- 多行单列(用于条件)
- 多行多列(用于表)
#例:查询高于JONES的员工
SELECT * FROM emp WHERE sal > (SELECT sal FROM emp WHERE ename='JONES')
#子查询作为条件,子查询形式为单行单列
SELECT * FROM emp WHERE sal > ALL [大于所有](SELECT sal FROM emp WHERE depno=30)
说明:子查询形式为多行单列(当子查询结果集形式为多行单列时可以使用ALL或ANY关键字)
SELECT * FROM emp WHERE (job,sal) IN (SELECT job,sal FROM emp WHERE ename='MARTIN')
#子查询作为条件,子查询形式为单行多列
SELECT e.ename,e.sal,d.name,d.location
FROM emp e,(SELECT depno,name,location FROM depart) d
WHERE e.depno = d.depno AND e.empno = '7788';
#子查询作为表,子查询形式为多行多列
#因为笛卡尔积较少所以比较快
事务
begin; # 开始事务
commit; # 提交事务
rollback; # 回滚事务
SET AUTOCOMMIT=0 禁止自动提交
SET AUTOCOMMIT=1 开启自动提交