数据库的SQL
1.创建数据库
create database 数据库名称;
2.显示所有数据库
show databases;
3.使用某数据库
use 数据库的名称;
4.删除数据库
drop database 数据库名称;
表结构的SQL
1.创建新表
create table 表名(
字段1 字段类型(长度) 约束,
字段2 字段类型(长度) 约束
);
2.字段的类型
varchar char int biging double date time datetime timestamp
3.删除表结构
drop table 表名称;
4.查看表结构
show tables; desc 表名称;
5.修改表结构
alter table 表名称 add 字段 类型(长度) 约束;
alter table 表名称 modify 字段 类型(长度) 约束;
alter table 表名称 drop 字段;
alter table 表名称 change 旧字段 新字段 类型(长度) 约束;
rename table 旧表名 to 新表名;
数据的SQL
1.添加 insert into 表名 (字段1) values (值1);
2.修改 update 表名 set 字段=值,字段=值 where 条件
3.删除 delete from 表名 where 条件
数据的查询
1.select * | 字段 from 表 where 条件 (> in like '小%') order by 排序
2.聚集函数
count()
sum()
avg()
max()
min() 3.分组查询
分组的含义
group by 分组 可以使用having 关键字 4.总结:select ... from ... where ... group by ... having ... order by
主键约束(主键只能是int或bigint)
1.使用primary key
2.特点
* 唯一
* 非空
* 被引用
3.自动增长
* 把id字段声明成主键,使用自动增长,那么id的类型只能是int 或者bigint !!!
* auto_increment
外键约束
1.保证数据的完整性。
2.使用foreign key 字段 references 表 (主键);
MySQL数据库的设计
一对多
* 例子:一个班级可以有多个学生,一个学生只能属于一个班级。一个部门下有多个员工。
* 建表原则:在多方表中,新创建一个字段,作为该表的外键,指向一方表的主键。
多对多
* 例子:一个学生可以选择多门课程,一门课程可以被多个学生选择。
* 建表原则:创建一个中间表,至少有两个字段,作为当前表的外键,指向原来多方表的主键。
一对一
* 开发中一对一基本没用。
* 例子:一个公司对应一个地址。一对一的关系完全可以把地址设计一张表。
多表的查询
1.笛卡尔积:
表1 表2
a1 a11 b1 b11
a2 a22 b2 b22
b3 b33
* 编写SQL语句
* select * from 表1,表2 ,产生的结果叫笛卡尔积
* 结果
a1 a11 b1 b11
a1 a11 b2 b22
a1 a11 b3 b33
a2 a22 b1 b11
a2 a22 b2 b22
a2 a22 b3 b33
* 笛卡尔积:就是两张表结果的乘积(不准确的)
* select * from emp,dept; 笛卡尔积结果是不准确。
多表查询
1.内连接
* 普通内连接
select * from 表1 inner join 表2 on 条件(表1和表2有关联)
select * from emp inner join dept on emp.dno = dept.did;
* 隐式内连接(经常使用)
select * from 表1,表2 where 条件
select * from emp,dept where emp.dno = dept.did;
select * from emp e,dept d where e.dno = d.did;
* 查询是的select * 代表:两张表所有的字段。
select e.ename,d.dname from emp e,dept d where e.dno = d.did;
2.外链接
左外链接
* select * from 表1 left outer join 表2 on 条件
* select * from emp left outer join dept on emp.dno = dept.did;
右外链接
* select * from 表1 right outer join 表2 on 条件
* select * from emp right outer join dept on emp.dno = dept.did;
内连接与外连接查询结果的区别
1.添加数据
insert into dept values (null,'牛宝宝部');
insert into dept values (null,'扯蛋部');
insert into emp values (null,'冠西',100,null);
insert into emp values (null,'柏芝',200,null);
2.测试
select * from emp e,dept d where e.dno = d.did; -- 结果数据都是有关联
select * from emp left outer join dept on emp.dno = dept.did; -- 查询是左表中所有的数据和有关联数据
select * from emp right outer join dept on emp.dno = dept.did; -- 查询结果是把右表中所有的数据和有关联数据
练习
* 查看聪聪所属的部门名称和员工名称?
* 查询:部门名称和员工名称
* 表:两张表(先把条件写出来)
* 条件:名称是聪聪
* select d.dname,e.ename from emp e,dept d where e.dno = d.did and e.ename = '聪聪';
* 统计每个部门的人数(按照部门名称统计)
* 查询:部门名称和部门人数
* 表:两张表
* 条件:内连接条件 group by
* select d.dname,count(*) from emp e,dept d where e.dno = d.did group by d.did;
* 统计部门的平均工资(按部门名称统计)
* select d.dname,avg(e.sal) from emp e,dept d where e.dno = d.did group by d.did