1.创建数据库:
create database 数据库名;
eg:create database mydb;
2.选择数据库
use 数据库名称;
eg:use mydb;
3.查看该数据库下的所有表;
show tables;
4.查看表结构
desc 表名;
eg: desc dept
5.创建表的语句。
create table 表名
{
列名 数据类型 [约束],
列名2 数据类型2 [约束],
.....
}
eg:
create table dept
(
deptId int primary key auto_increment,
deptName varchar(20),
deptNum int,
deptDesc varchar(200)
);
create table employee
(
empId int primary key auto_increment,
empName varchar(20),
empSalary numeric(10,2),
empAdress varchar(20),
deptId int,
foreign key(deptId) references dept(deptId)
);
6.插入语句:
语法:insert into 表名(列名1,列名2....) values(值1,值2...)
如果主键自增,不需要给主键插入值。
eg:insert into dept(deptName,deptNum,deptDesc) values('test',2,'test info');
MySQL中可以一次性插入多行记录
insert into 表名(列名1,列名2...) values(值1,值2...),(值1,值2...),(值1,值2...)
eg:insert into dept(deptName,deptNum,deptDesc) values('test',2,'test info'),
('test2',3,'test2 info'),('test3',2,'test3 info');
7.修改语句:
语法:Lupdate 表名 set 列名1=值1,列名2=值2..... [where 条件]
如果没有where条件,将修改当前表中所有的记录,经常会用主键作为where的条件
eg:update dept set deptName='test4',deptNum=1 where deptId=2;
8.删除语句
语法:delete from 表名 [where 条件];
如果没有where条件,将删除当前表中所有的记录,经常会用主键作为where的条件
9.查询语句
语法: select 列名1,列名2... from 表名 [where 条件] limit 起始位置,显示条目
a.查询所有列可以使用*代替所有列.
select * from dept;
===> select deptId,deptName,deptNum,deptDesc from dept;
b.查询部分列: select 列名1,列名2... from 表名
select deptId,deptName from dept;
c.条件查询
精确查找:
eg:
select * from dept where deptId=3;
select * from dept where deptName='test3';
范围查找: >,>=,<,<=,<>不等于,=
eg:
select deptName,deptNum from dept where deptNum>=0 and deptNum<=2;
between...and用于替代>=和<=
select deptName,deptNum from dept where deptNum between 0 and 2;
模糊查找: like
通配符:%代表任何长度任意字符。
_代表任意一个字符。
select * from dept where deptName like 't%';--部门名称以t开头的
select * from dept where deptName like 't_';--部门名称为两个字符并且以t开头
select * from dept where deptName like '_t_';--部门名称为三个字符并且中间为t
select * from dept where deptName like '%t%';--部门名称中包含t
--连接查询
--内连接:inner join ,显示两个表中相关联的数据。
select 列名1,列名2... from 表名1 inner join 表名2 on(表名1.外键=表名2.主键)
查看员工姓名,薪水和所属部门名称
select empName,empSalary,deptName from employee inner join dept on(employee.deptId=dept.deptId);
查看薪水高于5000的员工姓名,薪水和所属部门名称
select empName,empSalary,deptName from employee inner join dept on(employee.deptId=dept.deptId) where empSalary>5000;
--左外连接:left join:以左边的表为主,左边表中记录全部展现,右边只展现与其相关联的记录。
select 列名1,列名2... from 表名1 left join 表名2 on(表名1.外键=表名2.主键)
select empName,empSalary,deptName from employee left join dept on(employee.deptId=dept.deptId);
--右外连接:right join:以右边的表为主,右边表中记录全部展现,左边只展现与其相关联的记录。
select 列名1,列名2... from 表名1 left join 表名2 on(表名1.外键=表名2.主键)
select empName,empSalary,deptName from employee right join dept on(employee.deptId=dept.deptId);
--聚合函数(统计函数):count():计数/sum():求和/avg():求平均值/max():求最大值/min():求最小值;
select count(*) from employee;
select sum(empSalary) from employee;
select avg(empSalary) from employee;
select max(empSalary) from employee;
select min(empSalary) from employee;
--排序: order by 列名1,列名2 asc|desc
select * from employee order by empSalary asc;--升序
select * from employee order by empSalary desc;--降序
--分组: group by
查询部门平均工资和部门名称
select deptName,avg(empSalary) from dept inner join employee on(dept.dep
tId=employee.deptId) group by employee.deptId;
--having 用于过滤分组后的内容
查询平均工资大于6000的部门平均工资和部门名称
select deptName,avg(empSalary) from dept inner join employee on(dept.dep
tId=employee.deptId) group by employee.deptId having avg(empSalary)>6000;
子查询:一个查询语句作为另一个查询语句的条件。所有用连接查询能做的事情,子查询都可以实现。
--查询部门名称为test的所有员工信息
通过连接查询实现
mysql> select employee.* from employee inner join dept on(employee.deptId=dept.deptId) where dept.deptName='test';
通过子查询实现:
select deptId from dept where deptName='test';
select * from employee where deptId=1;
select * from employee where deptId=(select deptId from dept where deptName='test');
--查询工资大于6000的部门名称,部门人数
a.查询平均工资大于6000的部门编号
select deptId from employee group by deptId having avg(emp
Salary)>6000;
select * from dept where deptId in(select deptId from employee group by deptId having avg(empSalary)>6000)