新增、更新、删除表记录
-- 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;-- 错误写法!