赞
踩
Mysql数据库常用语句——创建数据库/表_yopky的博客-CSDN博客
Mysql数据库常用语句——插入/更改/删除数据_yopky的博客-CSDN博客
新增一张表
- -- 新增一张工资表wage
- CREATE TABLE wage(
- wid INT PRIMARY KEY AUTO_INCREMENT,
- wage_level VARCHAR(30),
- wage_money VARCHAR(30));
-
- INSERT INTO wage (wage_level,wage_money) VALUES ('1级','9000-8000'),('2级','7000-6000'),('3级','5000-4000'),('4级','3000-2000');
- SELECT * FROM wage
-
- -- employee 新增一列wage_id
- ALTER TABLE employee ADD wage_id INT;
-
- -- 插入wage_id数据
- UPDATE employee SET wage_id = 1 where eid in (2,6,8,13);
- UPDATE employee SET wage_id = 2 where eid in (1,5,10,14);
- UPDATE employee SET wage_id = 3 where eid in (3,6,8,12);
- UPDATE employee SET wage_id = 4 where eid in (4,5,11,15);

内连接查询
内连接
通过指定条件匹配2张表的数据,匹配上就显示,匹配不上就不显示
隐式内连接
隐式内连接:FROM后面直接写多个表名,使用where指定连接条件的连接方式
查询所有的员工信息及所在部门
- -- 查询所有的员工信息及所在部门
- SELECT * FROM employee,department where dept_id = id;
-
- -- 查询员工名字及所在部门
- SELECT e.ename,d.dep_name FROM employee e,department d WHERE e.dept_id= d.id
-
-
- -- 查询黄二属于哪个部门
- SELECT e.eid,e.ename,d.dep_name FROM employee e,department d WHERE e.dept_id=d.id AND e.ename='黄二'
显式内连接
显式内连接:使用INNER JOIN..ON 这种方式
两表显式内连接查询
- -- 查询所有员工信息及对应的部门信息
-
- SELECT * FROM employee e INNER JOIN department d ON e.dept_id=d.id ORDER BY e.eid
查询年龄小于于40的员工信息,包括部门跟工资级别
三表显式内连接查询
- -- 查询年龄小于于40的员工信息,包括部门跟工资级别
- -- 三表显式内连接查询
- SELECT e.ename,d.dep_name,w.wage_level FROM (employee e INNER JOIN department d ON e.dept_id=d.id) INNER JOIN wage w ON e.wage_id=w.wid WHERE e.age<40
- SELECT * from employee WHERE age<40;
左外连接查询
左外连接:使用LEFT OUTER JOIN
1.已左表为基准,匹配右边表中的数据,如果匹配得上,就展示匹配到的数据
2.如果匹配不到,左表的数据正常展示,右边的展示为NULL
- -- department添加一条数据
- INSERT into department (dep_name,dep_location) VALUES ('运营部','上海')
-
- -- 2表左外连接
- SELECT * FROM employee e LEFT JOIN department d ON e.dept_id=d.id;
SELECT * FROM department d LEFT JOIN employee e ON e.dept_id=d.id;
示例代码:
- -- 3表左外连接
- SELECT * FROM (employee e LEFT JOIN department d ON e.dept_id=d.id) LEFT JOIN wage w ON e.wage_id=w.wid ORDER BY e.eid
-
- -- 查询每个部门有多少人
- SELECT d.dep_name AS '部门',COUNT(e.ename) As '人数' FROM employee e LEFT JOIN department d ON e.dept_id=d.id GROUP BY e.dept_id
-
- -- 查询每个部门有多少人不包括没部门的
- SELECT d.dep_name AS '部门',COUNT(e.ename) As '人数' FROM employee e LEFT JOIN department d ON e.dept_id=d.id WHERE e.dept_id IS NOt NULL GROUP BY e.dept_id
右外连接查询
右外连接:使用RIGHT OUTER JOIN
1.已右表为基准,匹配左边表中的数据,如果匹配得上,就展示匹配到的数据
2.如果匹配不到,右表的数据正常展示,左边的展示为NULL
- -- 右外连接
- SELECT * FROM department d RIGHT JOIN employee e ON d.id=e.dept_id;
子查询
一条select查询语句的结果,作为另一条select语句的一部分
- -- 子查询
- -- 通过子查询,查询员工年龄最大的员工信息
- SELECT * FROM employee WHERE age = (SELECT MAX(age) FROM employee)
-
- -- 查询产品部的所有人的信息
- -- 方法一:子连接
- SELECT * FROM employee e WHERE e.dept_id = (SELECT d.id FROM department d WHERE d.dep_name='产品部')
- -- 方法二:左连接
- SELECT * FROM employee e LEFT JOIN department d ON e.dept_id=d.id WHERE d.dep_name='产品部'
-
- -- 查询小于平均年龄的员工信息
- SELECT * FROM employee WHERE age<(SELECT AVG(age) FROM employee)
-
- -- 查询小于平均年龄的员工信息,包括部门及工资级别信息
- SELECT e.ename,d.dep_name,w.wage_level FROM (employee e LEFT JOIN department d ON e.dept_id=d.id) LEFT JOIN wage w ON e.wage_id=w.wid WHERE age < (SELECT AVG(age) FROM employee)
-
- -- 查询年龄小于40的员工来自哪个个部门
- -- 方法一:子查询使用IN获得单列多行数据
- SELECT * FROM department d WHERE d.id IN (SELECT DISTINCT e.dept_id FROM employee e WHERE e.age <40);
-
- -- 方法二:
- SELECT DISTINCT d.id,d.dep_name FROM employee e LEFT JOIN department d ON e.dept_id = d.id WHERE e.age < 40
-
- -- 查询‘行政部’与‘开发部’下面的全部员工信息
- -- 方法一:
- SELECT * FROM employee WHERE dept_id IN (SELECT id FROM department WHERE dep_name IN ('行政部','开发部'))
-
- -- 方法二:
- SELECT * FROM employee e LEFT JOIN department d ON e.dept_id=d.id WHERE d.dep_name IN ('行政部','开发部')

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。