MySQL-base.select

数据管理

插入数据 DML:

insert into 表名[(字段名称1,字段名称2,字段名称3)] value(value1,value 2value 3);
insert into 表名[(字段名称1,字段名称2,字段名称3)] values(value1,value 2value
3);
# 如果前面有字段按照前面的字段顺序添加,没有按照默认的顺序添加
# 插入多条数据
insert into 表名 values (), (), ();
insert into 表名 value (), (), ();

查询数据 DQL:

# 无条件查询
select * / 字段1,字段2,字段3... from 表名;
# 等值查询
select * from 表名 where 字段名 = value;
# 设置列别名
select 字段名 [as] '别名', 字段2 '别名2' from 表名 WHERE 条件;
# 剔除重复行
select distinct * / id,name / id from 表名;
# 只是在显示的时候不显示重复的数据,数据未删除

修改数据 DML:

update 表名 set 字段 = value where 某一个字段 = value;
# 修改满足条件的字段值

删除数据 DML:

delete from 表名 where 某一个字段 = value;
# 删除满足条件的行

条件查询

  • 条件过滤
# WHERE 子句表示查询的条件
# [value1, value2]
SELECT * FROM 表名 WHERE 字段 BETWEEN value1 AND value2;
# 字段在[value1, value2 ...]任意一个就可以
SELECT * FROM 表名 WHERE 字段 IN(value1, value2, value3);
# 字段不在[value1,value2,value3]中
SELECT * FROM 表名 WHERE 字段 NOT IN(value1, value2, value3);
-- & 条件1 和条件2 都为 true 的结果显示出来
SELECT * FROM 表名 WHERE 条件1 AND 条件2;
-- | 满足条件1 和满足条件2的结果都可以显示出来
SELECT * FROM 表名 WHERE 条件1 OR 条件2;
# 示例
SELECT * FROM dept;
SELECT * FROM dept WHERE dept_no = 3;
SELECT * FROM dept WHERE dept_no BETWEEN 1 AND 3;
SELECT * FROM dept WHERE dept_no IN(1, 2, 3);
SELECT * FROM dept WHERE dept_no NOT IN(2, 3, 5);
SELECT * FROM 表名 WHERE 字段 = value;
  • 算数运算
# 可以对查询出来的结果进行算数运算
SELECT 字段1 + 字段2 FROM 表名;
# 修改的时候也可以进行算数运算
UPDATE 表名 SET 字段 = 字段 + value WHERE 条件;
  • Null值查询
# NULL 值只能无法通过等值操作查询
# NULL值指的是未填值,注意跟空字符串做区分
SELECT * FROM 表名 WHERE 字段 IS NULL;
SELECT * FROM 表名 WHERE 字段 IS NOT NULL;
  • 模糊查询
# LIKE 模糊查询 _ 表示一个任意字符 %表示零个或多个任意字符
# xa xb
SELECT * FROM 表名 WHERE 字段 LIKE 'x_';
# xa x xbs
SELECT * FROM 表名 WHERE 字段 LIKE 'x%';
# xa ax axb axbc
SELECT * FROM 表名 WHERE 字段 LIKE '%x%';
# ax axb axbc
SELECT * FROM 表名 WHERE 字段 LIKE '_x%';
  • 逻辑运算
SELECT * FROM 表名 WHERE 字段 > value;
# WHERE 条件语句里面可以写 > < = != 等
  • 排序
# ORDER BY 对结果集排序 DESC 降序 ASC 升序(默认)
SELECT * FROM 表名 ORDER BY 字段1 DESC, 字段2 ASC;
# 先按照dept_no 降序排序,如果dept_no字段相同,按照d_name降序排序
SELECT * FROM dept ORDER BY dept_no DESC, d_name DESC;
SELECT * FROM 表名 ORDER BY 字段 ASC;
  • 分页查询
# LIMIT 对结果集分页 参数1:起始行;参数2:显示条数
# 页码 n 页大小 s LIMIT (n-1) * s, s
SELECT * FROM 表名 LIMIT 0,2; # 从第0行开始显示两条数据

简单使用

create table `dept` (
dept_no int comment "编号",
d_name varchar(14) comment "名称",
loc varchar(13) comment "地址"
)
create table `emp` (
emp_no int comment "编号",
e_name varchar(10) comment "姓名",
job varchar(10) comment "职位",
mgr int comment "领导",
hirdate datetime comment "入职时间",
sal double comment "工资",
comm double comment "奖金",
dept_no int comment "部门编号"
)
--
INSERT INTO dept (d_name) VALUES ("等等")
INSERT INTO
dept(dept_no, loc, d_name)
VALUES
(3, "咸阳", "后勤部门"),
(4, "平凉", "安保部门"),
(5, "三亚", "运维部门")
-- 全部字段都要插入数据,后面的value和字段数量对应,表结构中字段的顺序对应
INSERT INTO dept VALUES (6, "娱乐部", "北京"),(7, "销售部", "白银")
-- 查询语句
SELECT * FROM dept;
-- 等值查询 WHERE 别名使用AS关键字,可以省略
SELECT dept_no no, d_name AS name, loc AS location FROM dept WHERE dept_no =
1
-- 每一列都一样的会被剔除
SELECT DISTINCT dept_no FROM dept
UPDATE dept SET d_name = "销售" WHERE dept_no = 7
DELETE FROM dept WHERE dept_no = 7
-- 工资在800-1200之间 BETWEEN value1 AND value2 [value1, value2]

练习
创建company数据库,在数据库中根据以下图示创建表,表结构如下,并插入以下数据,完成下面的
sql。
表结构如下:
dept表:
SELECT * FROM s_emp WHERE salary BETWEEN 800 AND 1200
-- IN(value1, value2) 字段=value1 或者 字段=value2
SELECT * FROM s_emp WHERE salary IN (800, 1200)
SELECT * FROM s_emp WHERE salary NOT IN (800, 1200)
-- &
SELECT * FROM s_emp WHERE salary = 800 AND title = 'Stock Clerk'
-- |
SELECT * FROM s_emp WHERE salary = 800 OR title = 'Stock Clerk'
-- > < >= <= != >
SELECT * FROM s_emp WHERE salary >= 800
-- IS NULL IS NOT NULL
SELECT * FROM s_emp WHERE commission_pct IS NOT null
SELECT salary + 500 from s_emp;
-- 工资在1000以下的涨500
UPDATE s_emp SET salary = salary + 500 where salary < 1000
-- 以B开头 LIKE
-- _ 一个位置 肯定是有一个字符
-- % 零个或多个
-- 第二个字母是 e aeo ae be
SELECT * from s_emp where first_name LIKE "_e%"
-- 按照工资从高到低排序 默认升序 DESC - 降序 ORDER BY 字段1 DESC, 字段2 DESC, ...
SELECT * from s_emp ORDER BY salary DESC, commission_pct DESC
desc s_emp
-- 每页显示2条数据,显示第二页 n s (n-1)*s, s 0,1 2,3, 4,5
SELECT * from s_emp LIMIT 4, 2

练习

创建company数据库,在数据库中根据以下图示创建表,表结构如下,并插入以下数据,完成下面的sql。
表结构如下:
dept表:
在这里插入图片描述
emp表:
在这里插入图片描述

salgrade表:
在这里插入图片描述

dept表数据:
在这里插入图片描述

emp表数据:
在这里插入图片描述

salgrade表数据:
在这里插入图片描述

完成以下SQL编写:

修改emp表中sal字段为salary

ALTER TABLE emp CHANGE SAl salary double

查找年薪在20000到30000之间的所有员工信息并按照工资降序显示

SELECT * FROM emp WHERE salary*12+comm BETWEEN 20000 AND 30000 ORDER BY salary DESC

查找员工姓名中包含’A’的所有员工信息

SELECT * FROM dept WHERE DNAME LIKE "%A%"

查找所有员工姓名中包含’A’及’E’的员工信息

SELECT * FROM dept WHERE DNAME LIKE '%A%' AND DNAME LIKE '%E%';

查找所有的职位为SALESMAN的员工信息

SELECT * FROM emp WHERE JOB = 'SALESMAN'

将工资低于2000的员工工资涨薪200

UPDATE emp SET salary = salary + 200 WHERE salary < 2000

查询没有上级领导的所有员工信息

SELECT * FROM emp WHERE MGR IS NULL

查询没有奖金的所有员工信息

SELECT * FROM emp WHERE COMM IS NULL

将部门表中的40部门的地址修改成’xian’

UPDATE dept SET LOC = 'xian' WHERE DEPTNO = 40

假设李华的工资是2000,请查询出他的工资等级

```SELECT GRADE FROM salgrade WHERE LOSAL <= 2000 AND HISAL >= 2000``

将MILLER的入职日期修改为1982年2月23日

UPDATE emp SET HIREDATE = '1982-02-23' WHERE ENAME = 'MILLER'

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值