mysql数据库及表操作(二)

新增、更新、删除表记录

-- 10.往学生表(stu)中插入记录(数据)

-- 语法:INSERT INTO 表名(列名1,列名2,列名3...) VALUES(值1,值2,值3...);

-- 如果是在cmd中执行插入记录的语句,先set names gbk;
insert into stu(id,name,gender,birthday,score) value(null,'刘鑫','女','1985-1-1',91);
insert into stu value(null,'陈翔','男','1998-3-1',80);
insert into stu value(null,'韩东君','男','1980-3-1',100);

提示:

(1)当为所有列插入值时,可以省写列名,但值的个数和顺序必须和声明时列的个数和顺序保持一致!
(2)SQL语句中的值为字符串或日期时,值的两边要加上单引号(有的版本的数据库双引号也可以,但推荐使用单引号)。
(3)(针对cmd窗口)在插入数据之前,先设置编码:set names gbk;

或者用一下命令连接mysql服务器:

mysql --default-character-set=gbk -uroot -proot

-- 11.查询stu表所有学生的信息

-- 语法:SELECT 列名 | * FROM 表名

select * from stu;

-- 12.修改stu表中所有学生的成绩,加10分特长分

-- 修改语法: UPDATE 表名 SET 列=值,列=值,列=值...[WHERE子句];

update stu set score=score+10;
update stu set score+=10;-- 错误!mysql中不支持+=

-- 13.修改stu表中编号为1的学生成绩,将成绩改为83分。

update stu set score=83 where id=1;

提示:where子句用于对记录进行筛选过滤,保留符合条件的记录,将不符合条件的记录剔除。

-- 14.删除stu表中所有的记录

-- 删除记录语法: DELETE FROM 表名 [where条件]

delete from stu;-- 没有where默认删除所有记录

-- 仅删除符合条件的

delete from stu where id>1;

查询表记录

-- 准备数据: 以下练习将使用db10库中的表及表记录,请先进入db10数据库!!!

基础查询

SELECT 语句用于从表中选取数据。结果被存储在一个结果表中(称为结果集)。

语法:SELECT 列名称 | * FROM 表名

提示:(1) *(星号)为通配符,表示查询所有列。

(2)但使用 *(星号)有时会把不必要的列也查出来了,并且效率不如直接指定列名

-- 15.查询emp表中的所有员工,显示姓名,薪资,奖金

select * from emp;-- *表示查询所有列
select name,sal,bonus from emp;-- 查询指定的列

-- 16.查询emp表中的所有部门和职位

select dept,job from emp;

思考:如果查询的结果中,存在大量重复的记录,如何剔除重复记录,只保留一条? */

-- 在select之后、列名之前,使用DISTINCT 剔除重复的记录

select distinct dept,job from emp;

WHERE子句查询

WHERE子句查询语法:SELECT 列名称|* FROM 表名称 WHERE 列 运算符 值

-- 17.查询emp表中薪资大于3000的所有员工,显示员工姓名、薪资

select name,sal from emp where sal>3000;

-- 18.查询emp表中总薪资(薪资+奖金)大于3500的所有员工,显示员工姓名、总薪资

select name,sal+bonus from emp;-- 求所有员工的总薪资
select name,sal+bonus from emp where sal+bonus>3500;-- 求总薪资大于3500的员工(bonus中有null值,会影响结果)

-- ifnull(列, 值)函数: 判断指定的列是否包含null值,如果有null值,用第二个值替换null值

select name,sal+ifnull(bonus,0) from emp;-- 求所有员工的总薪资
select name,sal+ifnull(bonus,0) from emp where sal+ifnull(bonus,0)>3500;-- 求总薪资大于3500的员工

-- 注意查看上面查询结果中的表头,如何将表头中的 sal+bonus 修改为 "总薪资"

-- 使用as可以为表头指定别名

select name as "姓名",sal+ifnull(bonus,0) as "总薪资" from emp where sal+ifnull(bonus,0)>3500;

-- 另外as可以省略

select name "姓名",sal+ifnull(bonus,0)  "总薪资" from emp where sal+ifnull(bonus,0)>3500;

-- 19.查询emp表中薪资在3000和4500之间的员工,显示员工姓名和薪资

select name 姓名,sal 薪资 from emp where sal>=3000 and sal<=4500;
-- 或
select name 姓名,sal 薪资 from emp where not(sal<3000 or sal>4500);

-- 提示: between...and... 在...之间

select name,sal from emp where sal between 3000 and 4500;

-- 20.查询emp表中薪资为 1400、1600、1800的员工,显示员工姓名和薪资

select name,sal from emp where sal=1400 or sal=1600 or sal=1800;

-- 或者

select name,sal from emp
where sal in(1400,1600,1800);
-- 只要sal等于in后面括号中的任何一个值,就算符合条件

-- 21.查询薪资不为1400、1600、1800的员工

方式一:

select name,sal from emp 
where not (sal=1400 or sal=1600 or sal=1800);

方式二:

select name,sal from emp
where sal not in(1400,1600,1800);

方式三:

select name,sal from emp 
where sal!=1400 and sal!=1600 and sal!=1800;

-- 22.查询emp表中薪资大于4000和薪资小于2000的员工,显示员工姓名、薪资。

select name,sal from emp
where sal>4000 or sal<2000;

-- 23.查询emp表中薪资大于3000并且奖金小于600的员工,显示员工姓名、薪资、奖金。

select name,sal,bonus from emp
where sal>3000 and bonus<600;

-- 处理null值

select name,sal,ifnull(bonus,0) from emp
where sal>3000 and ifnull(bonus,0)<600;

-- 24.查询没有部门的员工(即部门列为null值)

select * from emp
where dept is null;

-- 思考:如何查询有部门的员工(即部门列不为null值)

select * from emp
where dept is not null;-- 正确写法
select * from emp
where dept not is null;-- 错误写法!

猜你喜欢

转载自blog.csdn.net/yuyangchenhao/article/details/104907354