- 数据查询语言(DQL Data Query Language) :按照指定的组合、条件表达式或排序检索已存在的数据库中数据,不改变数据库中数据,常用命令为select
- 数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端(这里用navicat),这个结果集是一张虚拟表,存放在内存中
- 查询所有信息:SELECT * FROM 表名;
- 查询指定字段:SELECT 字段1,字段2,… FROM 表名;
- 以下表为例:
结果为:CREATE TABLE employee ( id int(11) NOT NULL, name varchar(50) DEFAULT NULL, gender varchar(1) DEFAULT NULL, hire_date date DEFAULT NULL, salary decimal(10,0) DEFAULT NULL, performance double(255,0) DEFAULT NULL, manage double(255,0) DEFAULT NULL, department varchar(255) DEFAULT NULL ); INSERT INTO employee VALUES (1001, '张三', '男', '1991-7-25', 2000, 200, 500, '营销部'); INSERT INTO employee VALUES (1002, '李四', '男', '2017-7-5', 4000, 500, NULL, '营销部'); INSERT INTO employee VALUES (1003, '王五', '女', '2018-5-1', 6000, 100, 5000, '研发部'); INSERT INTO employee VALUES (1004, '赵六', '男', '1991-6-1', 1000, 3000, 4000, '财务部'); INSERT INTO employee VALUES (1005, '孙七', '女', '2018-3-23', 8000, 1000, NULL, '研发部'); INSERT INTO employee VALUES (1006, '周八', '男', '2010-9-8', 5000, 500, 1000, '人事部'); INSERT INTO employee VALUES (1007, '吴九', '女', '2017-7-5', 8000, 601, NULL, '研发部'); INSERT INTO employee VALUES (1008, '郑十', '女', '2014-4-6', 4000, 1801, NULL, '人事部'); #查询employee表中所有的数据 SELECT * FROM employee;
条件查询
条件查询就是在查询的时候给出WHERE子句,在WHERE子句中可以使用一些运算符及关键字,这些运算符及关键字如下:
- 等于:=,例:查询该表中男性信息
SELECT * FROM employee WHERE gender = '男';
- 不等于:!=、<>,例:查询该表中不是男性的信息
SELECT * FROM employee WHERE gender != '男'; SELECT * FROM employee WHERE gender <> '男';
- 大于:>,例:查询表中基本工资大于5000的员工信息
SELECT * FROM employee WHERE salary > 5000;
- 小于:<,例:查询表中基本工资小于5000的员工信息
SELECT * FROM employee WHERE salary < 5000;
- 大于等于:>=,例:查询表中基本工资大于等于5000的员工信息
SELECT * FROM employee WHERE salary >= 5000;
- 小于等于:<=,例:查询表中基本工资小于等于5000的员工信息
SELECT * FROM employee WHERE salary <= 5000;
- 值在什么范围:BETWEEN…AND,包括边界值,例:查询表中基本工资在2000到7000之间的员工信息
SELECT * FROM employee WHERE salary BETWEEN 2000 AND 7000;
- 与:AND,例:查询表中基本工资在2000到7000之间的员工信息
SELECT * FROM employee WHERE salary >= 2000 AND salary <= 7000;
- 或:OR,例:查询表中基本工资等于2000或者7000的员工信息
SELECT * FROM employee WHERE salary = 2000 OR salary = 7000;
- 如果等于某几个值:IN,例:查询表中基本工资等于2000或者7000的员工信息
SELECT * FROM employee WHERE salary IN (2000,7000);
- 非:NOT,例:查询表中基本工资不等于2000和7000的员工信息
SELECT * FROM employee WHERE salary NOT IN (2000,7000);
- 是否为空:IS NULL,例:查询表中管理费用为空的员工信息
SELECT * FROM employee WHERE manage IS NULL;
- 是否不为空:IS NOT NULL,例:查询表中管理费用不为空的员工信息
SELECT * FROM employee WHERE manage IS NOT NULL;
模糊查询
- 根据指定的关键进行查询,使用LIKE关键字后跟通配符,通配符有以下两种:
- _ :任意一个字符
- %:任意0~n个字符
- 以下表为例:
- 1.查询姓名由三个字符构成的学生信息:
结果为:SELECT * FROM student WHERE name LIKE '___';
- 2.查询姓名由三个字符构成并且第二个字符是“三”的学生信息:
结果为:SELECT * FROM student WHERE name LIKE '_三_';
- 3.查询姓张的学生:
结果为:SELECT * FROM student WHERE name LIKE '张%';
- 4.查询姓名第二个字符是“三”的学生信息:
结果为:SELECT * FROM student WHERE name LIKE '_三%';
- 5.查询姓名中含有“三”的学生信息:
结果为:SELECT * FROM student WHERE name LIKE '%三%';
- 6.查询姓名中含有%的学生信息:
结果为:#ESCAPE 字符A :将字符A后面的通配符取消变成普通的字符 SELECT * FROM student WHERE name LIKE '%A%%' ESCAPE 'A';
字段控制查询
- 去除重复记录:DISTINCT,例:查询employee表中有哪些部门
结果为:SELECT DISTINCT department FROM employee;
- 把查询字段的结果进行数值运算,必须都要是数值型,例:在原来所有信息的基础上加入总工资字段(基本工资、绩效和管理费用的和)
结果为:SELECT *,salary + performance + IFNULL(manage,0) sumsalary FROM employee;
- 对查询结果起别名:在字段后面写上别名,用空格或as隔开,例:
结果为:SELECT id,name,hire_date hd,department as dep,salary + performance + IFNULL(manage,0) sumsalary FROM employee;
排序
- 排序:对查询的结果进行排序,使用关键字ORDER BY,排序的类型有以下两种:
- ASC:升序,不指定关键字默认升序
- DESC:降序
- 例:对所有员工的薪水升序排序
结果为:#下面两种方式效果一样 SELECT *FROM employee ORDER BY salary ASC; SELECT *FROM employee ORDER BY salary;
- 例:对所有员工的薪水降序排序
结果为:SELECT *FROM employee ORDER BY salary DESC;
- 例:对所有员工的薪水降序排序,如果薪水相同时,按绩效降序排序
结果为:SELECT *FROM employee ORDER BY salary DESC,performance DESC;