SQL语句的分类
(1)DDL: Data Define Language 定义数据
CREATE / DROP / ALERT(修改) / TRUNCATE(截断)
(2)DML: Data Manipulate Language 操作数据
INSERT / DELETE / UPDATE
(3)DQL: Data Query Language 查询数据
SELECT
(4)DCL: Data Control Language 控制用户权限
GRANT(授权) / REVOKE(收权)
1.简单查询 —— 只查询特定的列
示例:查询员工的姓名,工资,生日
SELECT ename,salary,birthday FROM emp;
示例:查询员工的编号,姓名,性别,部门编号
SELECT eid,ename,sex,deptId FROM emp;
2.简单查询 —— 查询所有的列
SELECT * FROM emp;
3.简单查询 —— 给列取别名
示例:查询员工的姓名,生日,收入,取别名
SELECT ename AS 姓名,birthday AS 生日,salary AS 收入 FROM emp;
SELECT ename 姓名,birthday 生日,salary 收入 FROM emp;
示例:查询员工的编号,姓名,性别,起英文别名
SELECT eid a,ename b,sex c FROM emp;
4.简单查询 —— 只显示不同的记录
示例:查询哪些部门编号下有员工
SELECT DISTINCT deptId FROM emp;
示例:查询公司有哪些性别的员工
SELECT DISTINCT sex FROM emp;
5.简单查询 —— 在查询时执行计算
示例:计算2+3*5/10
SELECT 2+3*5/10 结果;
示例:查询出所有员工的姓名和年薪
SELECT ename 姓名,salary*12 年薪 FROM emp;
示例:假设每个员工的工资+500,年终每个人再给5000的年终奖,查询每个员工一年的收入
SELECT ename 姓名,(salary+500)*12+5000 AS 年收入 FROM emp;
6.简单查询 —— 查询结果集的排序
示例:查询所有的员工,结果按照工资由低到高
SELECT * FROM emp ORDER BY salary ASC; #ascendant升序
示例:查询所有的员工,结果按照工资由高到低
SELECT * FROM emp ORDER BY salary DESC;#descendant降序
示例:查询所有的员工,结果按照年龄从大到小排序
SELECT * FROM emp ORDER BY birthday ASC;
示例:查询所有的员工,结果集按照姓名排序
SELECT * FROM emp ORDER BY ename ASC;
示例:查询所有的员工,按照生日由小到大排序,如果生日相同,再按照姓名由小到大排序
SELECT * FROM emp ORDER BY birthday ASC,ename ASC;
示例:查询所有的员工,按照工资由小到大,如果工资相同,女员工显示在男员工的前边。
SELECT * FROM emp ORDER BY salary ASC,sex ASC;
说明:排序默认是按照升序排列。
7.简单查询 —— 条件查询
示例:查询出编号为5的员工所有信息
SELECT * FROM emp WHERE eid=5;
练习:查询出姓名为KING的员工的编号、工资、生日
SELECT eid,salary,birthday FROM emp WHERE ename='king';
练习:查询出20号部门下所有员工的信息
SELECT * FROM emp WHERE deptId=20;
练习:查询出所有的男员工信息
SELECT * FROM emp WHERE sex=1;
示例:查询出工资大于等于5000的员工所有信息
SELECT * FROM emp WHERE salary>=5000;
练习:查询出1991-1-1之后出生的员工所有信息
SELECT * FROM emp WHERE birthday>'1991-1-1';
练习:查询出不在10号部门的所有员工信息
SELECT * FROM emp WHERE deptId!=10;
注意:NULL和任何值都不能进行相等/不等判定,可以使用IS NULL 和 IS NOT NULL
练习:查询出暂时没有部门的员工信息
SELECT * FROM emp WHERE deptId IS NULL;
练习:查询出有明确部门的员工信息
SELECT *FROM emp WHERE deptId IS NOT NULL;
练习:查询出工资大于6000的女员工所有信息
SELECT * FROM emp WHERE salary>6000 AND sex=0;
练习:查询出工资在5000~5999之间的员工信息
SELECT * FROM emp WHERE salary>=5000 AND salary<=5999;
SELECT * FROM emp WHERE salary BETWEEN 5000 AND 5999;
练习:查询出工资小于4000和大于8000的员工信息
SELECT * FROM emp WHERE salary<4000 OR salary>8000;
多条件拼接:
AND 并且 两个都要满足
OR 或者 两个满足其一
练习:查询出在1991年出生的员工信息
SELECT * FROM emp WHERE birthday>='1991-1-1' AND birthday<='1991-12-31';
SELECT * FROM emp WHERE birthday BETWEEN '1991-1-1' AND '1991-12-31';
练习:查询出在1990年之前和1993之后出生的员工信息
SELECT * FROM emp WHERE birthday<'1990-1-1' OR birthday>'1993-12-31';
练习:查询出在10和30号部门的员工信息
SELECT * FROM emp WHERE deptId=10 OR deptId=30;
SELECT * FROM emp WHERE deptId IN(10,30);
练习:查询出在10、30、50、80号部门的员工信息
SELECT * FROM emp WHERE deptId=10 OR deptId=30 OR deptId=50 OR deptId=80;
SELECT * FROM emp WHERE deptId IN(10,30,50,80);
练习:查询出不在10和30号部门的员工信息
SELECT * FROM emp WHERE deptId NOT IN(10,30);
8.简单查询 —— 模糊条件查询
示例:查询出姓名中包含字母E的员工所有信息
SELECT * FROM emp WHERE ename LIKE '%E%';
练习:查询出姓名以E结尾的员工所有信息
SELECT * FROM emp WHERE ename LIKE '%E';
练习:查询出姓名中倒数第二个字符是E的员工所有信息
SELECT * FROM emp WHERE ename LIKE '%E_';
SQL中提供了两个模糊查询的匹配符
% 可以匹配任意多个字符 >= 0
_ 可以匹配任意一个字符 =1
上述两个符号不能和=连用,只能使用LIKE连用。
查询出所有的男员工,对查询的结果集,按照工资升序排序。
SELECT * FROM emp WHERE sex=1 ORDER BY salary ASC;
9.简单查询 —— 分页查询
分页显示:查询的结果集记录太多,一次显示不完,可以一页一页的显示。分页查询语句在不同的数据库中实现方法不一样,MySQL是最简单的。
SELECT * FROM emp LIMIT start, count;
start: 从结果集中开始读取的值
count: 指定读取的最多行数
第1页: SELECT * FROM emp LIMIT 0,5; #(页码-1)*每页数量
第2页: SELECT * FROM emp LIMIT 5,5;
第3页: SELECT * FROM emp LIMIT 10,5;
...
第n页: SELECT * FROM emp LIMIT (n-1)*5,5
start = (n-1)*count