1.修改表中的数据

update 表名 set 要修改的字段 where 条件;-- 如果修改多个字段那么字段和字段之间用逗号隔开

2.查询(很重要)

1.查询表中部分字段:

select 字段名,字段名... from 表名;

2.查询所有字段:

select * from 表名;-- 遍历该表的结构才能知道该表具有哪些字段,所以性能慢。开发的时候列出所有字段名。

3.可以为查询的字段起别名:

select 字段名 as 别名,... from 表名;-- as可以省略,中间的空格不能省

select 字段名 别名,... from 表名;

4.去重:

select distinct 字段 from 表名;

select distinct 字段,字段,.... from 表名;-- 当后面的地段全部相同才算重复

5.排序(order by 字段):

select 字段,字段... from 表名 order by 字段1,字段2...; 默认升序,如果需要降序那就在字段后面加上desc。

先根据字段1进行排序,如果字段一相同再根据字段2排序。

6.可以为查询的结果进行算术运算:



7.根据条件查询数据:

select * from 表名 where 条件; -- * 表示通配符。

8.mysql分页:currentPage:当前要显示的页码 pageSize:每页显示的记录数

limit 限制

  • -- 第一页的内容,每页显示五条记录

    select 字段名 from 表名 limit 0,5;
  • -- 第二页的内容,每页显示五条记录

    select 字段名 from 表名 limit 5,5;
  • -- 第三页的内容,每页显示五条记录

    select 字段名 from 表名 limit 10,5;

    总结:select * from 表名 limit(currentPage-1)*pageSize,pageSize;

    顺序:where>order by>limit
练习:





CREATE DATABASE Company;

USE Company;

CREATE TABLE Department (
dept_id INT PRIMARY KEY,
dept_name CHAR (10) NOT NULL
); CREATE TABLE Emp (
e_id INT PRIMARY KEY,
e_name CHAR (10) NOT NULL,
e_sex CHAR (2) DEFAULT '男' CHECK ('男' OR '女'),
e_birthday datetime,
party CHAR (2) CHECK ('是' OR '否'),
e_jointime datetime,
dept INT,
np CHAR (10)
); CREATE TABLE Salary (
emp_id INT,
mon INT CHECK (mon BETWEEN 1 AND 12),
base_salary DOUBLE CHECK (base_salary >= 0),
allowance DOUBLE CHECK (allowance >= 0),
subsidy DOUBLE CHECK (subsidy >= 0),
bonus DOUBLE CHECK (bonus >= 0),
deduct DOUBLE CHECK (deduct >= 0),
revenue DOUBLE CHECK (revenue >= 0)
); ALTER TABLE Emp ADD CONSTRAINT aa FOREIGN KEY (dept) REFERENCES Department (dept_id); ALTER TABLE Salary ADD CONSTRAINT ab FOREIGN KEY (emp_id) REFERENCES Emp (e_id);
insert into department values(1,'财务处'),
(2,'人事处'),
(3,'市场部');
insert into emp values(1,'孙华','男','1952-01-03','是','1970-10-10',1,'天津市'),
(2,'陈明','男','1945-05-08','否','1965-01-01',2,'北京市'),
(3,'程西','女','1980-06-10','否','2002-07-10',1,'北京市'),
(4,'苏天气','女','1965-03-10','是','1987-10-10',2,'天津市'),
(5,'刘少文','男','1942-01-11','否','1960-08-10',2,''),
(6,'刘新','男','1952-10-08','否','1970-07-01',1,'上海市'),
(7,'余晖','女','1980-12-04','否','2001-07-10',3,'武汉市'),
(8,'王晓艳','女','1980-11-10','是','2001-07-10',2,'河北省'),
(9,'李玉','女','1964-02-12','是','1989-07-15',1,'天津市'),
(10,'周涛','男','1963-02-10','否','1983-07-20',3,'河北省'),
(11,'欧阳少兵','男','1965-04-19','否','1984-07-12',2,'北京市'),
(12,'张旗','男','1980-11-10','否','1999-09-18',3,'天津市');
insert into emp values(13,'李涵','女','1982-5-10','否','2002-02-14',3,'天津市'),
(14,'魏君','女','1977-3-23','是','1993-01-10',3,''),
(15,'李艺','男','1979-9-18','否','2001-07-20',3,'上海市'); insert into salary values(1,8,2800,1200,180,200,0,220),
(2,8,1600,1000,200,300,0,180),
(3,8,1880,880,200,260,50,120),
(4,8,2200,980,180,230,80,110),
(5,8,2300,880,210,0,0,125),
(6,8,2100,600,220,180,50,110),
(7,8,2200,800,180,200,120,120),
(8,8,2000,780,120,100,0,100),
(9,8,2500,870,130,150,0,120),
(10,8,2350,700,250,180,50,120),
(11,8,1900,800,260,130,0,100),
(12,8,1800,500,200,100,50,100),
(13,8,1580,500,200,100,0,100),
(14,8,1300,450,200,100,0,100),
(15,8,1380,450,200,100,0,10); -- a) 查询所有职工的基本信息
select * from emp;
-- d) 查询出所有男职工的基本信息
select * from emp where e_sex = '男';
-- f) 查询出所有入职时间在2000 年以后的女职工的职工号、姓名和入职时间
select e_id,e_name,e_jointime from emp where e_jointime > '2000-01-01' and e_sex = '女';
-- g) 查询出所有职工的职工号、姓名、入职时间
select e_id,e_name,e_jointime from emp;
-- h) 查询出所有姓李的职工的基本信息
select * from emp where e_name like '李%';
-- i) 查询出财务处的所有的党员
select e_name from emp where party = '是' and dept = 1;
-- j) 查询所有的女党员
select e_name from emp where party = '是' and e_sex = '女';
-- k) 查询出所有出生年月在1960-1-1 以前的员工
select e_name from emp where e_birthday < '1960-1-1';
-- l) 查询出所有职工的姓名和出生日期
select e_name,e_birthday from emp;
-- m) 查询出所有籍贯是北京市或天津市的职工信息(使用or 和in 分别查询)
select * from emp where np in('北京市','天津市');
select * from emp where np = '北京市' or np = '天津市';
-- n) 查询出所有籍贯不是天津市的职工信息(使用not查询)
select * from emp where np not in('天津市');
-- o) 查询出所有籍贯不是天津市也不是北京市的员工信息(使用 and 和not in 分别
-- 查询)
select * from emp where np not in ('天津市','北京市');
select * from emp where np != '天津市' and np != '北京市';
-- p) 查询出职工号在5-10 之间的员工信息(使用 and 和between 分别查询)
select * from emp where e_id between 5 and 10;
select * from emp where e_id >=5 and e_id <= 10;
-- s) 查询出所有实际工资在3000-3500 之间的职工号和税收
select emp_id,revenue from salary where (base_salary + allowance + subsidy + bonus - deduct - revenue) between 3000 and 3500;
-- t) 查询出所有籍贯为空的职工的基本信息
select * from emp where np = '';
-- y) 现在每个职工都要拿出自己实际工资的百分之8 作为住房公积金使用,查询出
-- 所有职工的职工号和应拿出的公积金
select (base_salary + allowance + subsidy + bonus - deduct - revenue) * 0.08 公积金 from salary;
-- 6. 针对上表,做如下操作:
-- a) 新添加16 号员工的信息,其他字段值自定
insert into emp(e_id,e_name) values(16,'刘德华');
-- b) 删除入职时间在1950 年以前的员工信息
delete from emp where e_jointime < 1950-1-1;
-- c) 工资的调整:
-- i. 1-5 号职工,基本工资增加200
update salary set base_salary = base_salary + 200 where emp_id between 1 and 5;
-- ii. 6-10 号职工,基本工资增加百分之十,津贴增加 50
update salary set base_salary = base_salary * 1.1 , allowance = allowance + 50 where emp_id between 6 and 10;
-- iii. 11 号以上职工,基本工资增加 150,津贴增加 30,补助增加20
update salary set base_salary = base_salary + 150 , allowance = allowance + 30 , subsidy = subsidy + 20 where emp_id > 11;
-- iv. 所有职工奖金增加80
update salary set bonus = bonus + 80;
-- v. 有“扣除”项的职工,没有奖金
update salary set bonus = 0 where deduct > 0;
嵌套查询:把一个查询的结果作为另一个查询的条件值

例如:查询财务处员工的信息

select * from emp where dept = (select dept_id from department where dept_name = '财务处');

如果后面查询的条件返回多条那么 = 号 改为 in

什么情况下用嵌套?

查询的结果与查询的条件不在一张时用嵌套。

联表查询:联接多张表才可以查询出想要的字段

例如:查询员工的信息以及员工对应的部门名。

select emp.* ,dept_name from emp,department where emp.dept = department.dept_id; (内联的一种形式)

emp.dept = department.dept_id为联表条件,如果没有联表条件则会出现笛卡尔积

如果联表n张则至少需要n-1个联表条件

1.内联(inner join):查询所有满足查询条件的记录

比如部门表中有一个研发部,而没有人在研发部,那么内联结果不会出现研发部

select emp.* ,dept_name from emp [inner] join department on emp.dept = department.dept_id;

例如:查询员工的信息、员工所在部门名称、员工的实际工资。

select emp.* ,dept_name,(base_salary + allowance + subsidy + bonus - deduct - revenue) 实际工资 from emp,department,salary

where emp.e_id = salary.emp_id and emp.dept = department.dept_id;

2.左联(left join):查询出所有满足联表条件的记录以及左表未满足条件的记录

比如部门表中有一个研发部,而没有人在研发部,那么左联结果会出现研发部(部门表为左表)

select * from department left join emp on emp.dept = department.dept_id;

3.右联(right join):查询出所有满足联表条件的记录以及右表未满足条件的记录

比如部门表中有一个研发部,而没有人在研发部,那么左联结果会出现研发部(部门表为右表)

select * from emp right join department on emp.dept = department.dept_id;

练习
create database emp;
use emp;
-- 创建部门表/
CREATE TABLE dept(
deptno INT PRIMARY KEY,
dname VARCHAR(50),
loc VARCHAR(50)
); -- 创建雇员表/
CREATE TABLE emp(
empno INT PRIMARY KEY,
ename VARCHAR(50),
job VARCHAR(50),
mgr INT,
hiredate DATE,
sal DECIMAL(7,2),
COMM DECIMAL(7,2),
deptno INT,
CONSTRAINT fk_emp FOREIGN KEY(mgr) REFERENCES emp(empno)
); -- 创建工资等级表
CREATE TABLE salgrade(
grade INT PRIMARY KEY,
losal INT,
hisal INT
); INSERT INTO dept VALUES (10, '教研部', '北京');
INSERT INTO dept VALUES (20, '学工部', '上海');
INSERT INTO dept VALUES (30, '销售部', '广州');
INSERT INTO dept VALUES (40, '财务部', '武汉'); INSERT INTO emp VALUES (1009, '曾阿牛', '董事长', NULL, '2001-11-17', 50000, NULL, 10);
INSERT INTO emp VALUES (1004, '刘备', '经理', 1009, '2001-04-02', 29750, NULL, 20);
INSERT INTO emp VALUES (1006, '关羽', '经理', 1009, '2001-05-01', 28500, NULL, 30);
INSERT INTO emp VALUES (1007, '张飞', '经理', 1009, '2001-09-01', 24500, NULL, 10);
INSERT INTO emp VALUES (1008, '诸葛亮', '分析师', 1004, '2007-04-19', 30000, NULL, 20);
INSERT INTO emp VALUES (1013, '庞统', '分析师', 1004, '2001-12-03', 30000, NULL, 20);
INSERT INTO emp VALUES (1002, '黛绮丝', '销售员', 1006, '2001-02-20', 16000, 3000, 30);
INSERT INTO emp VALUES (1003, '殷天正', '销售员', 1006, '2001-02-22', 12500, 5000, 30);
INSERT INTO emp VALUES (1005, '谢逊', '销售员', 1006, '2001-09-28', 12500, 14000, 30);
INSERT INTO emp VALUES (1010, '韦一笑', '销售员', 1006, '2001-09-08', 15000, 0, 30);
INSERT INTO emp VALUES (1012, '程普', '文员', 1006, '2001-12-03', 9500, NULL, 30);
INSERT INTO emp VALUES (1014, '黄盖', '文员', 1007, '2002-01-23', 13000, NULL, 10);
INSERT INTO emp VALUES (1011, '周泰', '文员', 1008, '2007-05-23', 11000, NULL, 20);
INSERT INTO emp VALUES (1001, '甘宁', '文员', 1013, '2000-12-17', 8000, NULL, 20); INSERT INTO salgrade VALUES (1, 7000, 12000);
INSERT INTO salgrade VALUES (2, 12010, 14000);
INSERT INTO salgrade VALUES (3, 14010, 20000);
INSERT INTO salgrade VALUES (4, 20010, 30000);
INSERT INTO salgrade VALUES (5, 30010, 99990); -- 列出在销售部工作的员工的姓名
select ename from emp where deptno = (select deptno from dept where dname = '销售部');
-- 列出与庞统从事相同工作的所有员工及部门名称。
select ename,dname from emp join dept on dept.deptno = emp.deptno where emp.job = (select job from emp where ename = '庞统') and ename != '庞统';
-- 列出薪金比关羽高的所有员工。
select ename from emp where sal > (select sal from emp where ename = '关羽');
-- 列出至少有一个员工的所有部门
select distinct dname from dept d,emp e where d.deptno = e.deptno;
-- 列出职位为文员的姓名及所在部门名
select ename,dname from emp join dept on emp.deptno = dept.deptno where job = '文员';
-- 列出部门名称和这些部门的员工信息,同时列出哪些没有员工的部门
select dname,emp.* from dept left join emp on dept.deptno = emp.deptno;
4.自联

查询的内容都在一张表时.(把一张表当做两张表看)

例子:查询员工姓名以及员工的领导姓名

select yg.ename 员工姓名,ld.ename 领导姓名 from emp yg,emp ld where yg.mgr = ld.empno;

查询刘备所属的工资等级以及工资

select grade,sal from emp,salgrade where sal between losal and hisal and ename = '刘备';

练习
-- 续上方emp数据库
-- 1.查询出部门编号为30的所有员工 
select ename from emp where deptno = 30;
-- 2.所有销售员的姓名、编号和部门编号。
select ename,empno,deptno from emp where job = '销售员';
-- 3.找出奖金高于工资的员工。 
select ename from emp where comm > sal;
-- 4.找出奖金高于工资60%的员工。 
select ename from emp where comm > sal * 0.6;
-- 5.找出部门编号为10中所有经理,和部门编号为20中所有销售员的详细资料。 
select * from emp where (job = '经理' and deptno = 10)or(deptno = 20 and job = '销售员');
-- 6.找出部门编号为10中所有经理,部门编号为20中所有销售员, 
-- 还有即不是经理又不是销售员但其工资大或等于20000的所有员工详细资料。
select * from emp where (deptno =10 and job = '经理')or(deptno = 20 and job = '销售员')or(job not in('经理','销售员') and sal >= 20000);
-- 7.有奖金的工种。 
select distinct job from emp where comm > 0;
-- 8.无奖金或奖金低于1000的员工。 
select ename from emp where comm between 0 and 1000 or comm is null;
-- 9.查询名字由三个字组成的员工。 
select ename from emp where ename like '___';
-- 10.查询2000年入职的员工。 
select ename from emp where hiredate between '2000-1-1' and '2000-12-31';
-- 11.查询所有员工详细信息,用编号升序排序 
select * from emp order by empno;
-- 12.查询所有员工详细信息,用工资降序排序,如果工资相同使用入职日期升序排序 
select * from emp order by sal desc ,hiredate;
-- 13.返回员工姓名及其所在的部门名称。
select ename,dname from emp,dept where emp.deptno = dept.deptno;
-- 14.返回从事文员工作的员工姓名和所在部门名称
select ename,dname from emp,dept where emp.deptno = dept.deptno and job = '文员';
-- 15.返回与30部门员工工资相同的员工姓名与工资。
select ename,sal from emp where sal in (select sal from emp where deptno = 30) and deptno != 30;
-- 16.查出比经理薪水还高的员工信息
select * from emp where sal > (select sal from emp where job = '经理' order by sal limit 0,1);
-- 17.返回员工和所属上司的姓名 
select yg.ename,ss.ename from emp yg,emp ss where ss.empno = yg.mgr;
-- 18.返回雇员的雇佣日期早于其上司雇佣日期的员工及其上司姓名 
select yg.ename 雇员名称,ss.ename 上司名称 from emp yg,emp ss where ss.empno = yg.mgr and yg.hiredate < ss.hiredate;
-- 19.列出受雇日期早于直接上级的所有员工的编号、姓名、部门名称。 
select yg.empno,yg.ename,dname from emp yg,emp ss,dept where ss.empno = yg.mgr and yg.deptno = dept.deptno and yg.hiredate < ss.hiredate;
-- 20.查询刘备所属的工资等级以及工资。
select grade,sal from emp,salgrade where sal between losal and hisal and ename = '刘备';
-- 21.返回工资处于第四级别的员工的姓名。
select ename from emp where sal between (select losal from salgrade where grade = 4) and (select hisal from salgrade where grade = 4);
select ename from emp,salgrade where sal between losal and hisal and grade = 4;
-- 22.返回工资为二等级的职员名字、部门所在地、和二等级的最低工资和最高工资
select ename,dname,losal,hisal from emp,salgrade,dept where sal between losal and hisal and grade = 2 and emp.deptno = dept.deptno; create table city(cityID int auto_increment primary key,cityName varchar(20));
create table flight (flightID int auto_increment primary key,
StartCityID int references city(cityID),
endCityID int references city(cityID),
StartTime datetime); insert into city values(null,'北京'),(null,'上海'),(null,'广州'); insert into flight values
(null,1,2,'2019-7-11 9:37:23'),(null,1,3,'2019-7-11 11:37:23'),(null,1,2,'2019-7-11 12:37:23'),(null,2,3,'2019-7-11 10:37:23');
-- 1、查询起飞城市是北京的所有航班,按到达城市的名字排序
select * from flight f,city q,city w where f.startcityid = q.cityid and f.endcityid = w.cityid and q.cityname = '北京' order by w.cityname;
-- 2. 查询北京到上海的所有航班纪录(起飞城市,到达城市,起飞时间,航班号)
select q.cityname 起飞城市,w.cityname 到达城市,starttime 起飞时间,flightid 航班号 from flight f,city q,city w where f.startcityid = q.cityid
and f.endcityid = w.cityid and q.cityname = '北京' and w.cityname = '上海';
-- 3.查询具体某一天(2019-7-11)的北京到上海的的航班
select * from flight f,city q,city w where f.startcityid = q.cityid
and f.endcityid = w.cityid and q.cityname = '北京' and w.cityname = '上海' order by w.cityname
and StartTime like '2019-7-11%';

MYSQL基础知识的复习2的更多相关文章

  1. MYSQL基础知识的复习3

    聚合函数 max():求最大值 例:求最高工资 select max(sal) from emp; min():求最小值 例:求最小工资 select min(sal) from emp; avg() ...

  2. MYSQL基础知识的复习1

    数据库(是存放数据的仓库) 1.根据存储量以及安全性上来划分: 大型数据库:DB2 Oracle(毕业) Hbase 银行 公安局(不加班 没网) 移动 中型数据库:mysql sqlserver(. ...

  3. mysql基础知识大全

    前言:本文主要为mysql基础知识的大总结,mysql的基础知识很多,这里作简单概括性的介绍,具体的细节还是需要自行搜索.当然本文还有很多遗漏的地方,后续会慢慢补充完善. 数据库和数据库软件 数据库是 ...

  4. mysql基础知识语法汇总整理(二)

    mysql基础知识语法汇总整理(一) insert /*insert*/ insert into 表名(字段列表) values(值列表); --蠕虫复制 (优点:快速复制数据,测试服务器压力) in ...

  5. mysql基础知识语法汇总整理(一)

    mysql基础知识语法汇总整理(二)   连接数据库操作 /*连接mysql*/ mysql -h 地址 -P 端口 -u 用户名 -p 密码 例如: mysql -u root -p **** /* ...

  6. MySQL 基础知识梳理

    MySQL 的安装方式有多种,但是对于不同场景,会有最适合该场景的 MySQL 安装方式,下面就介绍一下 MySQL 常见的安装方法,包括 rpm 安装,yum 安装,通用二进制安装以及源码编译安装, ...

  7. MySQL基础知识:启动管理和账号管理

    整理.记录常用的MySQL基础知识:时间久了,很多就忘记了. 操作系统环境为MacOS Catalina, MySQL版本为: 8.0.13 MySQL Community Server - GPL. ...

  8. MySQL基础知识:创建MySQL数据库和表

    虚构一个微型在线书店的数据库和数据,作为后续MySQL脚本的执行源,方便后续MySQL和SQL的练习. 在虚构这个库的过程中,主要涉及的是如何使用命令行管理 MySQL数据库对象:数据库.表.索引.外 ...

  9. MySQL基础知识:Character Set和Collation

    A character set is a set of symbols and encodings. A collation is a set of rules for comparing chara ...

随机推荐

  1. 一、Electron + Webpack + Vue 搭建开发环境及打包安装

    目录 Webpack + Vue 搭建开发环境及打包安装 ------- 打包渲染进程 Electron + Webpack  搭建开发环境及打包安装 ------- 打包主进程 Electron + ...

  2. 灯光设置(light)

    clc;clear all;close all; %% 台灯的设置figure('color','k')% 底座fill3([0 1 1 0],[0 0 1 1],[0 0 0 0],'b',... ...

  3. 【程序包管理】篇章3:CentOS平台下软件包安装方法总结

    1.软件包安装前的学习:程序包管理的基础知识 2.程序包安装的方法介绍: rpm文件的二进制包安装:Linux程序包管理之rpm安装总结 yum安装:Linux程序包管理之yum源安装 链接:本地yu ...

  4. Nuget 安装本地包文件

    Install-Package SomePackage -Source C:\PathToThePackageDir\

  5. 【JAVA并发第二篇】Java线程的创建与运行,线程状态与常用方法

    1.线程的创建与运行 (1).继承或直接使用Thread类 继承Thread类创建线程: /** * 主类 */ public class ThreadTest { public static voi ...

  6. AutoMapper的源码分析

    最近有一个小项目需要提供接口给第三方使用,接口会得到一个大的XML的字符串大约有8个对象100多个字段,在映射到Entity只能通过反射来赋值避免重复的赋值,但是明显感觉到性能下降严重,因为以前接触过 ...

  7. Error:java: JDK isn't specified for module 'xxx'异常的解决方法

    问题描述 博主启动的项目的时候出现了一个这样的异常 解决方法 打开左上角这个Project Structure

  8. python-OpenCV 使用GrabCut来实现图片的前景与后景的分割

    先上一个效果图: 使用Python3.7+OpenCV 3.x. 需要引入 numpy库. 在图上用鼠标左键和右键标记前景和后景即可.如果需要重新标记图像,关闭程序重新运行. 以下是具体实现代码. # ...

  9. windows 10放大125%后字体模糊(已解决)、win10 文字放大之后变模糊 解决办法

    windows 10放大125%后字体模糊解决办法 百度搜索 "Windows10_DPI_FIX" 或者用这个地址下载下载地址   https://gallery.technet ...

  10. 虚拟机安装Ubuntu 16.04系统实操教程 详尽步骤 vmware ESXi亲测通过

    1 Ubuntu 16.04系统安装要求 Ubuntu 16.04 LTS下载最新版本的Ubuntu,适用于台式机和笔记本电脑. LTS代表长期支持,这意味着有五年免费安全和维护更新的保证. Ubun ...