Skip to content

MySQL练习1

862字约3分钟

数据库mysql

2024-10-24

MySQL练习一

#创建mis数据库
create database mis;
#创建部门表部门编号主键,自增长,部门名称,唯一约束
create table Dept(DeptID int primary key auto_increment,DeptName varchar(20) unique);
#创建员工表,员工编号主键,自增长,1:男,0:女,部门编号外键
create table Employee(EmpID int primary key auto_increment,EmpName varchar(20),Birthday date,Gender varchar(6),Salary double,DeptID int,
foreign key(DeptID) references Dept(DeptID));
#插入dept数据
insert into dept (DeptID,DeptName) values (1,'开发部门');
mysql> insert into dept (DeptID,DeptName) values (2,'测试部门');
#插入Employee数据
insert into Employee (EmpID,EmpName,Birthday,Gender,Salary,DeptID) values (1,'林冲','1981-10-10','',2800,1);
insert into Employee (EmpID,EmpName,Birthday,Gender,Salary,DeptID) values (2,'宋江','1992-6-21','',3100,2);
 insert into Employee (EmpID,EmpName,Birthday,Gender,Salary,DeptID) values (3,'扈三娘','1984-3-8','',3000,1);
insert into Employee (EmpID,EmpName,Birthday,Gender,Salary,DeptID) values (4,'孙二娘','1985-6-7','',2950,2);
#查询工资大于2900的员工信息
select * from Employee where Salary>2900;
#查询年龄大于23岁的男员工信息
select *,TIMESTAMPDIFF(YEAR,Birthday, CURDATE()) 年龄 from Employee where Gender=''
 and TIMESTAMPDIFF(YEAR,Birthday, CURDATE())>23;
#将孙二娘的出生日期改为1985-6-8
update Employee set Birthday='1985-6-8' where EmpName='孙二娘';
#删除员工扈三娘
delete from Employee where EmpName='扈三娘';
#统计男员工和女员工人数
select count(if(Gender='',1,null)) 男员工,count(if(Gender='',1,null)) 女员工 from Employee;
#统计最高工资与最 低工资差
select max(Salary)-min(Salary) 工作差 from Employee;
#查找工资最低的两个员工
 select * from Employee order by Salary asc limit 0,2;
#按照工资降序排序员工信息
select * from Employee order by Salary desc;
#删除测试部门及其员工
delete Employee from Dept,Employee where Dept.DeptID=Employee.DeptID and Dept.DeptName='测试部门';
alter table Employee drop foreign key employee_ibfk_1;
delete from Dept where DeptName='测试部门';
#查询员工信息,显示姓名,部门,薪水
select e.EmpName,d.DeptName,e.Salary from Dept d,Employee e where d.DeptID=e.DeptID;

MySQL其他

show create table 表名 查看创建表结构

auto_increment 设置自增长

limit x,y 设置查询结果为前y-x个

将多个列的值合并

select concat(列名1,列名2,.........) as 别名 from 表名;

删除表中数据的两种方式

1.delete from 表名; 逐行删除,开销较大。

2.truncate table 表名; 截断表,效率高。

注:

1.对于有外键约束的表应先删除子表再删除主表。

2.在开发中查询数据库尽量不使用 *(星号)。

CRUD操作

创建表

create table 表名(列名1 数据类型1,..........);

查询表内容

select 查询内容 from 要查询的表名 where 查询的条件;

注:查询数据需要多个表时应尽量使用多表连接查询,不使用笛卡儿积。

更新表内容

update 表名 set 列名1=value1,........where 更新条件;

删除表内容

delete from 表名 where 删除条件;

插入表内容

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

约束

主键(primary key)alter table 表名 add primary key(列名);

外键(foreign key)alter table 子表名 add [constraint fk_sno] foreign key(子表的外键名称) references 父表名(父表的主键名称);

默认(default) alter table 表名 change column 列名 新列名 新数据类型 default 默认值;

非空(not null)

唯一(unique) alter table 表名 add comstraint unique(列名);

获取当前日期函数

current-date()

now()

curdate()

连接查询

1.笛卡儿积

select * from 表1,表2,........;

2.select * from 表1 join 表2 on 表1.列1=表2.列2;