是使用最多的 数据库语言:
DQL (query) 数据查询语句 用来查询数据 指令有 SELECT (70% 的数据库操作)
1. 结果集 (存放在内存中) 是查询的结果。 是虚拟的表,查询一次 产生一次
使用 查询语句 护着 筛选执行 后返回的 虚拟数据表
DQL 的使用 不会改变 原有的数据结果 和数据表, 仅仅 只是返回查询结果
2. 查询语句基础
SELECT * FROM 表名; ---- * 指的是 返回所有列
3. 返回指定查询
SELECT 列1, 列2,列3 FROM 表名; ---- > 返回指定的列, 列名 比逗号 分隔开来
4. 条件查询(返回符合条件的结果集)
- = , <, <=, !=, 或者 <>, >, >=
- between .... and, 在 某个范围内, in(set)在某个范围内, not in 不在某个 范围内
- is nulll(为空) is bot null(不为空)
- and(与), or (或), not(非)
SELECT sccore,sname , age FROM student;
ALTER TABLE student ADD COLUMN age INT COMMENT '年龄';
--WHERE 是指定条件查询,
--WHERE 左边是对标的操作
--WHERE 右边是指定条件 并返回结果
SELECT * FROM student WHERE 1 = 1; 全表
SELECT * FROM student WHERE 0 = 0;
SELECT * FROM student WHERE sex = '女' AND age = 18;
SELECT * FROM student WHERE sid = 103 or sname = '小达达';
写法一
SELECT * FROM student WHERE sid = 101 or sid = 102 or sid = 103;
写法二
SELECT * FROM student WHERE sid in (101,102,103,104,105);
错误写法
select * FROM student WHERE age = Null;
正确写法
select * FROM student WHERE age IS NULL; --null 记录
不为空的写法
select * FROM student WHERE age IS NOT NULL;
方法一
SELECT * FROM student WHERE age > 17 AND age <= 18;
方法二 (包含 界限前后)
SELECT * FROM student WHERE age BETWEEN 17 AND 18;
写法一
SELECT * FROM student WHERE sex != '男';
写法二
SELECT * FROM student WHERE sex <> '男'; <> 也是 非的一种写法
报错写法
SELECT * FROM student WHERE sex IS NOT '男';-- 报错
错误写发
SELECT * FROM student WHERE sccore != null;
SELECT * FROM student WHERE sccore IS NOT NULL;
查询语句中: (Null) 不可以 用 = != 来查询, 要用 IS NULL ; IS NOT NULL; 来判断
第一个箭头 是 空字符 '', 用 = ,!= , < >
第二个箭头才 是 Null, 要用 IS NULL ; IS NOT NULL;
ALTER TABLE student ADD COLUMN age int COMMENT '年龄';
ALTER TABLE student ADD COLUMN sex CHAR(2) COMMENT '性别';
ALTER TABLE student DROP COLUMN age, DROP COLUMN sex;
ALTER TABLE student
ADD COLUMN age int COMMENT '年龄',
ADD COLUMN sex CHAR(2) COMMENT '性别';
SELECT * FROM student WHERE sid = 103 or sname = '小达达';
SELECT * FROM student WHERE sid = 101 or sid = 102 or sid = 103;
SELECT * FROM student WHERE sid in (101,102,103,104,105);
select * FROM student WHERE age = Null;
select * FROM student WHERE age IS NULL;
select * FROM student WHERE age IS NOT NULL;
SELECT * FROM student WHERE age > 17 AND age <= 18;
SELECT * FROM student WHERE age BETWEEN 17 AND 18;
SELECT * FROM student WHERE sex IS NOT '男';-- 报错
SELECT * FROM student WHERE sex != '男';
SELECT * FROM student WHERE sex <> '男';
SELECT * FROM student WHERE sccore != null;
SELECT * FROM student WHERE sccore IS NOT NULL;
建表:
CREATE TABLE emp(
eid INT(11) NOT NULL COMMENT '员工编号',
ename VARCHAR(30) COMMENT '员工姓名',
edeptno INT(3) COMMENT '所属部门编号'
)
ALTER TABLE emp
ADD COLUMN COMM INT(8) DEFAULT 0 COMMENT '奖金',
ADD COLUMN SAL INT(8) DEFAULT 0 COMMENT '工资';
ALTER TABLE emp
MODIFY COLUMN COMM DECIMAL(8,2) DEFAULT 0 COMMENT '奖金',
MODIFY COLUMN SAL DECIMAL(8,2) DEFAULT 0 COMMENT '工资';
SELECT * FROM emp WHERE edeptno = 20;
SELECT * FROM emp WHERE COMM > SAL;
SELECT * FROM emp WHERE COMM > SAL*0.3;
SELECT * FROM emp WHERE
(work_type ='MANAGER' AND edeptno = 10)
OR
(work_type ='CLERK' AND edeptno = 20);
写法一
SELECT * FROM emp WHERE
(work_type != 'MANAGER' AND work_type != 'CLERK')
AND SAL >= 2000
写法二
SELECT * FROM emp WHERE
work_type NOT IN('MANAGER','CLERK')
AND SAL >= 2000
SELECT DISTINCT work_type FROM emp WHERE COMM > 0
SELECT * FROM emp WHERE
COMM IS NULL
or
COMM < 100
--查不到 为 Null 的数据
SELECT * FROM emp WHERE
COMM < 100
SELECT * FROM emp WHERE work_age >= 10;
SELECT * FROM emp WHERE COMM > SAL;
SELECT * FROM emp WHERE COMM > SAL*0.3;
ALTER TABLE emp ADD COLUMN work_type VARCHAR(30) COMMENT '工种';
SELECT * FROM emp WHERE
(work_type ='MANAGER' AND edeptno = 10)
OR
(work_type ='CLERK' AND edeptno = 20);
SELECT * FROM emp WHERE
(work_type != 'MANAGER' AND work_type != 'CLERK')
AND SAL >= 2000
SELECT * FROM emp
WHERE work_type NOT IN('MANAGER','CLERK')
AND SAL >= 2000
SELECT DISTINCT work_type FROM emp
WHERE COMM > 0
SELECT * FROM emp WHERE
COMM IS NULL
or
COMM < 100
SELECT * FROM emp WHERE
COMM < 100
ALTER TABLE emp ADD COLUMN work_age int(2);
ALTER TABLE emp MODIFY COLUMN work_age int(2) COMMENT '工龄';
SELECT * FROM emp WHERE
work_age >= 10;
1. like 关键字
模糊匹配信息, 后面跟上匹配串
2. 通配符
_ 下划线, 任意 1 个字符
% 任意 0 - n 个字符串
3. 模糊查找练习 SELECT * FROM emp WHERE ename LIKE '%s%'; 包含某一个 字符 用的最多
-- 根据 ename 字段 匹配数据
--
-- _ 下划线 匹配任意 一个字符
-- % 匹配 1-n 个字符串
查询姓名由 5个字母构成员工记录
SELECT * FROM emp WHERE ename LIKE '_____'; //五个 下划线
查询姓名由 5个字母构成, 并且 第五个字母为 't' 的员工记录
SELECT * FROM emp WHERE ename LIKE '____t'; //第五个 下火线 改为t
查询姓名以 'm' 开头的员工记录
SELECT * FROM emp WHERE ename LIKE 'm%';
查询姓名中 第二个字母为 'u' 的员工记录
SELECT * FROM emp WHERE ename LIKE '_u%'; 第二个字母为 'u'
SELECT * FROM emp WHERE ename LIKE '%u'; 以 'u'结尾
查询姓名中包含 's' 的字母的员工记录
SELECT * FROM emp WHERE ename LIKE '%s%'; 包含某一个 字符 用的最多
1. 字段去重 采用 distinct; distinct 只能放在字段前面,
SELECT DISTINCT edeptno FROM emp WHERE COMM > 20;
distinct 如果 作用两个字段, 那么这两个字段看作一个整理 去重
SELECT DISTINCT edeptno, ename FROM emp WHERE COMM > 20;
2. 字段计算
SELECT * FROM emp WHERE COMM > SAL*0.3; 字段 和字段 比较
SELECT COMM +SAL emp WHERE COMM > SAL*0.3; 查询字段 的和
3. ifnull 函数使用 ........表达式 : IFNULL(expr1,expr2)
SELECT IFNULL(COMM + SAL, 0),ename FROM emp;
// 如果 COMM 字段 和 SAL 字段有任意一个是 NUll ,那么 表 达式为 0
4. 字段别名 查询完毕后 给字段 取新的名字 用于
SELECT IFNULL(COMM + SAL, 0) as total,ename FROM emp;
5. 计算字段
6. 普通字段
1. 排序关键字 order by
SELECT * FROM emp ORDER BY SAL;
2. 升序(ASC) 默认排序, 降序(DESC)
SELECT * FROM emp ORDER BY SAL DESC;
SELECT * FROM emp ORDER BY SAL ASC;
3. 组合排序. 当排序的 数值一致的时候,需要用到组合排序 根据多个字段排序
SELECT * FROM emp ORDER BY SAL DESC,COMM;
SELECT * FROM emp ORDER BY SAL,COMM DESC; 按升序排SAL, 当 SAL相同 按降序排 COMM
1. 查询姓名 由 5个字母构成 并且薪资小于 3000 的员工记录
SELECT * FROM emp WHERE ename like '_____' AND SAL < 3000;
2. 查询 姓名以 'm' 开头的员工姓名 与 工资,按 工资倒叙显示
SELECT ename ,SAL FROM emp WHERE ename LIKE 'm%' ORDER BY SAL DESC;
3. 查询姓名 中 包含 'm' 字母的 员工姓名 和 工资 + 薪资 以别名显示, 为空则显示 0
SELECT ename , IFNULL(SAL+ COMM ,0) as total FROM emp WHERE ename LIKE '%m%';
4 . 查询有奖金的员工的不同工种(只显示一种)
SELECT DISTINCT work_type FROM emp WHERE COMM IS NOT NULL;
5. 查询所有员工工资和奖金的 和, 为空则显示 0
6 查询员工表 要求以薪资 升序, 奖金降序显示
SELECT * FROM emp ORDER BY SAL, COMM DESC;
-- 根据 ename 字段 匹配数据
--
-- _ 下划线 匹配任意 一个字符
-- % 匹配 1-n 个字符串
SELECT * FROM emp WHERE ename LIKE '____t';
SELECT * FROM emp WHERE ename LIKE 'm%';
SELECT * FROM emp WHERE ename LIKE '%u';
SELECT * FROM emp WHERE ename LIKE '_u%';
SELECT * FROM emp WHERE ename LIKE '%u%';
SELECT DISTINCT edeptno, ename FROM emp WHERE COMM > 20;
SELECT IFNULL(COMM + SAL, 0),ename FROM emp;
SELECT * FROM emp ORDER BY SAL,COMM DESC;
SELECT * FROM emp WHERE ename like '_____' AND SAL < 3000;
SELECT ename , IFNULL(SAL+ COMM ,0) as total FROM emp WHERE ename LIKE '%m%';
SELECT DISTINCT work_type FROM emp WHERE COMM IS NOT NULL;
SELECT * FROM emp ORDER BY SAL, COMM DESC;