初识mysql

数据库分类

关系型数据库:SQL(Structured Query Language)

MySQL、Oracle、Sql Server、DB2、SQLlite

通过表和表之间,行和列之间的关系进行数据的存储

通过外键关联来建立表与表之间的关系

今日有点懒,发个练习吧,就不做总结了。

练习:

emp员工表(empno员工号/ename员工姓名/job工作/mgr上级编号/hiredate受雇日期/sal薪金/comm佣金/deptno所属部门编号) 
dept部门表(deptno部门编号/dname部门名称/loc地点) 
工资 = 薪金 + 佣金

mysql的建库建表:

create database demo
use demo

create table classinfo(
classid int primary key auto_increment,
className varchar(20)
)

create table student(
stuid varchar(20) primary key,
stuname varchar(20),
stusex char(2),
stuage int,
stuaddress varchar(50),
stuclassid int references classinfo(classid)

)

auto_increment是mysql特有的主键自增。

--添加数据
INSERT INTO classinfo VALUES(NULL,'r2008')
INSERT INTO classinfo VALUES(NULL,'r2009')
INSERT INTO classinfo VALUES(NULL,'r2010')
INSERT INTO student VALUES('123','啊对','男',19,'南阳',1)
INSERT INTO student VALUES('124','啊对对','男',20,'武汉',1)
INSERT INTO student VALUES('125','啊对对对','男',21,'武汉',1)
INSERT INTO student VALUES('126','啊对对对对','男',33,'北京',2)
INSERT INTO student VALUES('127','啊对对对对对','男',23,'南阳',2)
INSERT INTO student VALUES('128','啊对对对对对对','男',22,'新野',2)
INSERT INTO student VALUES('129','小红','女',19,'周口',3)
INSERT INTO student VALUES('1210','小白','女',20,'南阳',3)
INSERT INTO student VALUES('1211','小兰','女',19,'北京',3)
--查询班级信息
SELECT * FROM classinfo
SELECT * FROM student
--修改学生地址
UPDATE student set stuaddress='ssss' WHERE stuid='123'
--删除某个学生信息
DELETE FROM student WHERE stuname='啊对'
--查询某个学生年龄大于20的学生信息
SELECT * FROM student WHERE stuage>20
--查询学生年龄在20到30之间的学生信息
SELECT * FROM student WHERE stuage BETWEEN 20 AND 30
--查询性别实女生并且年龄小于20的学生信息
SELECT * FROM student WHERE stusex='女' AND stuage<20
--查询性别为女的学生信息
SELECT * FROM student WHERE stusex='女'
--查询地址是武汉的学生信息
SELECT * FROM student WHERE stuaddress='武汉'
--查询班级编号为3的学生信息
SELECT * FROM student WHERE stuclassid='3'
--查询学生姓啊的学生信息  模糊查询
SELECT * FROM student WHERE stuname LIKE'啊%'
--查询学生姓啊的学生信息并且年龄大于24岁的学生信息
SELECT * FROM student WHERE stuname LIKE'啊%' AND stuage>24
--查询学生姓名中有对的学生信息
SELECT * FROM student WHERE stuname LIKE'%对%'
--内连接查询   inner join on 查询学生信息,显示班级名称
SELECT s.* ,c.className FROM student s INNER JOIN classinfo c ON stuclassid=classid
--查询每个班级的学生人数
SELECT count(*) as 人数 FROM student GROUP BY stuclassid
--查询每个班级的学生人数,学生性别是男
SELECT COUNT(*) as 人数 stuclassid FROM student WHERE stusex='男' GROUP BY stuclassid
--查询每个班级平均年龄大于24的信息  分组再筛选
SELECT AVG(stuage) as 平均年龄,stuclassid FROM student GROUP BY stuclassid HAVING AVG(stuage)>24
--对年龄做一个升序的排序  降序desc
SELECT * FROM student ORDER BY stuage DESC
--分页-每页显示5行数据  pageSize=5,PageCode=3
SELECT * FROM student LIMIT 0,5
--外连接  左外(以左边的表为基准),右外(以右边的表为基准)
select s.*,c. className from student s left outer join classinfo C on s. stuclassid=c.classid
select s.*,c. className from student s RIGHT outer join classinfo C on s. stuclassid=c.classid
--查询前10条数据
SELECT * FROM student LIMIT 0,5
--查询班级编号为1的学生信息(子查询)
SELECT * FROM student WHERE stuclassid in(SELECT classid FROM classinfo WHERE className='r2008')
--查询年龄大于平均年龄的所有学生信息
select *from student where stuage>(select avg(stuage) from student)



 练习二:

1.列出至少有一个员工的所有部门。 
2.列出薪金比“SMITH”多的所有员工。 
3.列出所有员工的姓名及其直接上级的姓名。 
4.列出受雇日期早于其直接上级的所有员工。 
5.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。 
6.列出所有“CLERK”(办事员)的姓名及其部门名称。 
7.列出最低薪金大于1500的各种工作。 
8.列出在部门“SALES”(销售部)工作的员工的姓名,假定不知道销售部的部门编号。 
9.列出薪金高于公司平均薪金的所有员工。 
10.列出与“SCOTT”从事相同工作的所有员工。  
12.列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金。 
13.列出在每个部门工作的员工数量、平均工资和平均服务期限。 
14.列出所有员工的姓名、部门名称和工资。 
15.列出所有部门的详细信息和部门人数。 
16.列出各种工作的最低工资。 
17.列出薪金最低的MANAGER的基本信息。 
18.列出所有员工的年工资,按年薪从低到高排序。

这是数据库:

create database test;
use test;

create table dept(
deptno int primary key auto_increment,-- 部门编号 
dname varchar(50) ,-- 部门名称 
loc varchar(50) -- 地点
)

create table emp(
empno  int primary key ,-- 员工号
ename varchar(50) ,-- 员工姓名
job  varchar(50),-- 工作
mgr varchar(50),-- 上级编号
hiredate datetime, -- 受雇日期 
sal  double,-- 薪金 
comm double,-- 佣金 
deptno int references dept(deptno)  -- 所属部门编号
)
insert into dept values(10,'财务部','北京');
insert into dept values(20,'研发部','上海');
insert into dept values(30,'销售部','广州');
insert into dept values(40,'行政部','深圳');
1.列出至少有一个员工的所有部门。 
select deptno as 部门 from dept where deptno in (select distinct deptno from emp)
2.列出薪金比“SMITH”多的所有员工。
SELECT ename,sal FROM emp WHERE sal>(SELECT sal FROM emp where ename='SMITH')
3.列出所有员工的姓名及其直接上级的姓名。 
SELECT e.ename as 员工姓名,m.ename as 上司姓名 FROM emp e LEFT JOIN emp m ON e.mgr=m.empno
4.列出受雇日期早于其直接上级的所有员工。 
select e.ename 早于其直接上级的员工,e.hiredate 员工受雇日期,m.hiredate 上级受雇日期 from emp e
left join emp m on e.mgr = m.empno
where e.hiredate < m.hiredate
5.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。 
select  dept.dname,emp.* from dept left join emp on dept.deptno = emp.deptno
6.列出所有“MANAGER”(办事员)的姓名及其部门名称。 
select ename as 姓名,dname as 部门名称,job as 工作 from emp left join dept on emp.deptno = dept.deptno where job = 'MANAGER'
7.列出最低薪金大于1500的各种工作。 
SELECT job as 工作,sal FROM emp WHERE sal>1500
8.列出在部门“SALES”(销售部)工作的员工的姓名,假定不知道销售部的部门编号。 
select ename as 姓名,dname as 部门名称 from emp left join dept on emp.deptno = dept.deptno
where dname = 'MANAGER'
9.列出薪金高于公司平均薪金的所有员工。
select ename as 姓名,sal as 薪金 from emp where sal > (select avg(sal) from emp)
10.列出与“SCOTT”从事相同工作的所有员工。 
select ename 员工姓名 from emp where job = (select job from emp where ename = 'SCOTT') and ename != 'SCOTT'
12.列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金。 
select ename as 员工姓名,sal as 薪金 from emp where sal > (select max(sal) from emp where deptno = 30)
13.列出在每个部门工作的员工数量、平均工资和平均服务期限。 
select dept.dname as 部门名称, count(empno) as 员工数量,avg(sal) as 平均工资,avg(DATEDIFF(CURDATE(),hiredate)) as 平均服务期限
from emp left join dept on emp.deptno = dept.deptno  group by emp.deptno
14.列出所有员工的姓名、部门名称和工资。 
select ename as 姓名,dname as 部门名称,sal as 工资 from emp left join dept on emp.deptno = dept.deptno 
15.列出所有部门的详细信息和部门人数。 
select dept.*,count(emp.deptno) 部门人数 from emp right join dept on emp.deptno = dept.deptno group by dept.deptno
16.列出各种工作的最低工资。
select min(sal) 最低工资,job 工作 from emp group by job
17.列出薪金最低的MANAGER的基本信息。
select * from emp where sal = (select min(sal) from emp where job = 'MANAGER')
18.列出所有员工的年工资,按年薪从低到高排序。
select ename 姓名,sal 月薪,(sal * 12) 年薪 from emp order by (sal * 12) 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值