AUTO_INCREMENT: 自动增长,假如一个列声明了自增列,无需手动赋值,直接赋值为NULL,会获取最大值,然后加1插入
注意: 只适用于整数型的主键列上,允许手动赋值
简单查询
(1)查询特定的列
示例: 查询所有员工的姓名、工资
SELECT ename,salary FROM emp;
练习: 查询所有员工的编号,姓名,性别,生日
SELECT eid,ename,sex,birthday FROM emp;
(2)查询所有的列
SELECT * FROM emp;
SELECT eid,ename,sex,birthday,salary,deptId FROM emp;
(3)给列起别名
示例: 查询所有的员工姓名和工资,使用汉字别名
SELECT ename AS 姓名,salary AS 工资 FROM emp;
练习: 查询所有员工的编号,姓名,工资,生日,使用汉字别名
SELECT eid AS 编号,ename AS 姓名,salary 工资,birthday 生日 FROM emp;
练习: 查询所有员工的编号和姓名,使用1个字母作为别名
SELECT eid a,ename b FROM emp;
(4)显示不同的记录/合并相同的记录
示例: 查询出员工都分布在哪些部门
SELECT DISTINCT deptId FROM emp;
练习: 查询出都有哪些性别的员工
SELECT DISTINCT sex FROM emp;
(5)查询时执行计算
示例: 计算2+5*3+7/2-9
SELECT 2+5*3+7/2-9;
练习: 查询出所有员工的姓名及其年薪
SELECT ename,salary*12 FROM emp;
练习: 假设每个员工的工资增加500,年终奖为5000,查询出所有员工的姓名及其年薪,给列使用汉字别名
SELECT ename 姓名, (salary+500)*12+5000 年薪 FROM emp;
(6)查询结果集排序
示例: 查询所有的部门,结果集按照编号从小到大排序
SELECT * FROM dept ORDER BY did ASC; #ascendant
示例: 查询所有的部门,结果集按照编号从大到小排序
SELECT * FROM dept ORDER BY did DESC;
#descendant
练习: 查询所有的员工,结果集按照工资从高到低排列
SELECT * FROM emp ORDER BY salary DESC;
练习: 查询所有的员工,结果集按照年龄从小到大排列
SELECT * FROM emp ORDER BY birthday DESC;
练习: 查询所有的员工,结果集按照姓名的升序排列
SELECT * FROM emp ORDER BY ename;
练习: 查询所有的员工,结果集按照工资降序排列,如果工资相同,按照姓名排列
SELECT * FROM emp ORDER BY salary DESC,ename;
练习: 查询所有的员工,结果集按照性别排序,如果性别相同按照生日降序排列
SELECT * FROM emp ORDER BY sex,birthday DESC;
ORDER BY 可以按照数值、字符串、日期时间来排序 默认是ASC升序排列 |
(7)条件查询
示例: 查询出编号为5的员工
SELECT * FROM emp WHERE eid=5;
练习: 查询出姓名为king的员工的编号,姓名,工资
SELECT eid,ename,salary FROM emp WHERE ename='king';
练习: 查询出20号部门下的员工有哪些
SELECT * FROM emp WHERE deptId=20;
练习: 查询出所有的女员工
SELECT * FROM emp WHERE sex=0;
练习: 查询出工资在5000以上的员工有哪些
SELECT * FROM emp WHERE salary>5000;
比较运算符: > < >= <= = !=(不等于) |
练习: 查询出1991-1-1前出生的员工有哪些
SELECT * FROM emp WHERE birthday<'1991-1-1';
练习: 查询出不在20部门的员工有哪些
SELECT * FROM emp WHERE deptId!=20;
练习: 查询出没有明确部门的员工有哪些
SELECT * FROM emp WHERE deptId IS NULL;
练习: 查询出有明确部门的员工有哪些
SELECT * FROM emp WHERE deptId IS NOT NULL;
练习: 查询出工资在5000~7000之间的员工有哪些
SELECT * FROM emp WHERE salary>=5000 AND salary<=7000;
SELECT * FROM emp WHERE salary BETWEEN 5000 AND 7000;
练习: 查询出工资在5000以下和7000以上的员工有哪些
SELECT * FROM emp WHERE salary<5000 OR salary>7000;
SELECT * FROM emp WHERE salary NOT BETWEEN 5000 AND 7000;
练习: 查询出1990年之前和1993年之后出生的员工有哪些
SELECT * FROM emp WHERE birthday<'1990-1-1' OR birthday>'1993-12-31';
SELECT * FROM emp WHERE birthday NOT BETWEEN '1990-1-1' AND '1993-12-31';
练习: 查询出1993年出生的员工有哪些
SELECT * FROM emp WHERE birthday>='1993-1-1' AND birthday<='1993-12-31';
SELECT * FROM emp WHERE birthday BETWEEN '1993-1-1' AND '1993-12-31';
练习: 查询出1994年后出生的男员工有哪些
SELECT * FROM emp WHERE birthday>'1994-12-31' AND sex=1;
练习: 查询出20号部门和30号的员工有哪些
SELECT * FROM emp WHERE deptId=20 OR deptId=30;
SELECT * FROM emp WHERE deptId IN(20,30);
练习: 查询出不在20号部门和30号部门的员工有哪些
SELECT * FROM emp WHERE deptId NOT IN(20,30);
(8)模糊条件查询
示例: 查询姓名中含有字母e的员工有哪些
SELECT * FROM emp WHERE ename LIKE '%e%';
练习: 查询出姓名中以e结尾的员工有哪些
SELECT * FROM emp WHERE ename LIKE '%e';
练习: 查询出姓名中倒数第2个字符为e的员工有哪些
SELECT * FROM emp WHERE ename LIKE '%e_';
% 可以匹配任意多个字符 >=0 _ 可以匹配任意1个字符 =1 以上两个匹配符必须结合着LIKE使用 |
(9)分页查询
查询的结果集中有太多的数据,一次显示不完,可以分页显示
需要有两个已知条件: 当前的页码、每页的数据量
SELECT * FROM emp LIMIT start,count;
start: 从哪一条数据开始查询
start = (当前的页码-1)*每页的数据量 |
count: 每页的数据量
假设每页显示5条数据
第1页: SELECT * FROM emp LIMIT 0,5;
第2页: SELECT * FROM emp LIMIT 5,5;
第3页: SELECT * FROM emp LIMIT 10,5;
假设每页显示7条数据
第1页: SELECT * FROM emp LIMIT 0,7;
第2页: SELECT * FROM emp LIMIT 7,7;
第3页: SELECT * FROM emp LIMIT 14,7;